On Sat, Apr 30, 2011 at 12:02:06AM -0000, Thomas Dickey wrote:
> I might be able to appease it by checking for this case and warping the
> pointer onto the menu widget (will see).

This seems to work:

===================================================================
RCS file: RCS/menu.c,v
retrieving revision 1.289
diff -u -r1.289 menu.c
--- menu.c      2011/04/24 18:18:30     1.289
+++ menu.c      2011/04/30 00:22:23
@@ -834,10 +834,29 @@
 {
     TRACE(("HandlePopupMenu\n"));
     if (domenu(w, event, params, param_count)) {
+       XtermWidget xw = term;
+       TScreen *screen = TScreenOf(xw);
+
 #if OPT_TOOLBAR
        w = select_menu(w, mainMenu)->w;
 #endif
-       XtCallActionProc(w, "XawPositionSimpleMenu", event, params, 1);
+       /*
+        * The action procedure in SimpleMenu.c, PositionMenu does not expect a
+        * key translation event when we are popping up a menu.  In particular,
+        * if the pointer is outside the menu, then the action procedure will
+        * fail in its attempt to determine the location of the pointer within
+        * the menu.  Anticipate that by warping the pointer into the menu when
+        * a key event is detected.
+        */
+       switch (event->type) {
+       case KeyPress:
+       case KeyRelease:
+           XWarpPointer(screen->display, None, XtWindow(w), 0, 0, 0, 0, 0, 0);
+           break;
+       default:
+           XtCallActionProc(w, "XawPositionSimpleMenu", event, params, 1);
+           break;
+       }
        XtCallActionProc(w, "MenuPopup", event, params, 1);
     }
 }

-- 
Thomas E. Dickey <dic...@invisible-island.net>
http://invisible-island.net
ftp://invisible-island.net

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/756273

Title:
  xterm dies on popup-menu action

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to