Path: utzoo!attcan!uunet!lll-winken!lll-lcc!ames!mailrus!tut.cis.ohio-state.edu!bloom-beacon!athena.mit.edu!dschmidt
From: dschmidt@athena.mit.edu (Dan Schmidt)
Newsgroups: comp.windows.x
Subject: Re: XtAddActions/XtOverrideTranslations
Keywords: Changing event handling for widgets..
Message-ID: <6247@bloom-beacon.MIT.EDU>
Date: 16 Jul 88 06:26:21 GMT
References: <4495@pasteur.Berkeley.Edu>
Sender: daemon@bloom-beacon.MIT.EDU
Reply-To: dschmidt@athena.mit.edu (Dan Schmidt)
Organization: Massachusetts Institute of Technology
Lines: 54
In article <4495@pasteur.Berkeley.Edu> dheller@cory.Berkeley.EDU (Dan Heller) writes:
>
> A collegue and I are trying to force a middle button event on a
> widget to go to a specific routine. So, we stumbled thru some
> of the vague documentation on pages 91 and 92 of the X Toolkit
> Intrinsics to try to figure out how to do this.
>
> The Doc says to use XtOverrideTranslations() to merge in our new
> translation table. But of course, it didn't tell us that we needed
> to call something else in order for these translations to be
> recognized. We figured that we should call XtAddActions() first
> to register actions that we were going to reference when trying
> to merge our new translation table in.
>
> Finally, we got no more error messages, but the new event wasn't
> registered. We tried all kinds of widgets -- label widgets,
> command widgets, and even one of my own. It doesn't seem like
> the type of widget should matter, but I tried a few anyway just
> in case...
>
> We finally worked around the problem by calling XtAddEventHandler()
> to register the actions and events desired and it worked fine.
>
> Can someone tell me what we could have done to get the new translation
> table working correctly?
> Dan Heller
OK... This is what to do:
1. Make your XtActionList:
static XtActionsRec actionTable[] = {"Foo",foo};
2. Make your translation table:
String translationtable = ":Foo()";
3. Let the translation manager know about your action table:
XtAddActions(actionTable,XtNumber(actionTable));
4. Put in your new translation table:
XtOverrideTranslations(w,XtParseTranslationTable(translationtable));
Now, whenever a button is pressed in the widget w, the procedure foo()
(not Foo(); Foo() -> Foo -> foo via the actionTable) is called.
I actually thought that this was one of the clearer parts of the
manual... which means of course that it was barely understandable...
Dan Schmidt Something I learned today
dschmidt@athena.mit.edu Black and white is always gray -- Husker Du
It was a giant Adenoid. At least as big as St. Paul's, and growing hour by
hour. London, perhaps all England, was in mortal peril! -- Thomas Pynchon