Path: utzoo!utgpu!news-server.csri.toronto.edu!rutgers!tut.cis.ohio-state.edu!ucbvax!alfalfa.com!nazgul From: nazgul@alfalfa.com (Kee Hinckley) Newsgroups: comp.windows.x.motif Subject: Non-motif accelerators Message-ID: <910311101350.28320@alphalpha> Date: 11 Mar 91 15:13:50 GMT Sender: daemon@ucbvax.BERKELEY.EDU Distribution: inet Organization: The Internet Lines: 44 The following code installs accelerators some of the time. I can't for the life of me figure out why it doesn't do it all the time. Furthermore, the accelerator won't work unless the focus is set to a widget. I tried doing gadgets, but then we died deep in Motif. I don't know why this works when it does, or why it doesn't work when it doesn't. I'd appreciate suggestions concerning either. Set the accelerator resource on a widget, then call this. Note that the order of the arguments is the opposite of XtInstallAccelerators (I use C++ and default the shell argument to NULL). Just call this with either NULL or your toplevel shell. Then explore. void OmXInstallAccelerators(Widget widget, Widget shell) { Arg args[2]; Cardinal nkids, i; Widget *kids; if (!shell) { for (shell = widget; shell && !XtIsShell(shell); shell = XtParent(shell) ); if (!shell) return; } if (!XtIsWidget(shell)) return; XtInstallAccelerators(shell, widget); nkids = 0; XtSetArg(args[0], XmNchildren, &kids); XtSetArg(args[1], XmNnumChildren, &nkids); XtGetValues(shell, args, 2); for (i = 0; i < nkids; ++i) OmXInstallAccelerators(widget, kids[i]); } Alfalfa Software, Inc. | Poste: The EMail for Unix nazgul@alfalfa.com | Send Anything... Anywhere 617/646-7703 (voice/fax) | info@alfalfa.com I'm not sure which upsets me more: that people are so unwilling to accept responsibility for their own actions, or that they are so eager to regulate everyone else's.