changeset 11954:4117d74ba254

(popup_get_selection): Force deactivation if key pressed. New arg `id'. (xdialog_show, xmenu_show): Pass new arg to popup_get_selection.
author Karl Heuer <kwzh@gnu.org>
date Fri, 26 May 1995 22:47:07 +0000
parents d349456b4b1c
children d972c95e7577
files src/xmenu.c
diffstat 1 files changed, 14 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/xmenu.c	Fri May 26 22:46:36 1995 +0000
+++ b/src/xmenu.c	Fri May 26 22:47:07 1995 +0000
@@ -1042,13 +1042,14 @@
 /* Loop in Xt until the menu pulldown or dialog popup has been
    popped down (deactivated).
 
-   NOTE: All calls to popup_get_selection() should be protected
+   NOTE: All calls to popup_get_selection should be protected
    with BLOCK_INPUT, UNBLOCK_INPUT wrappers.  */
 
 void
-popup_get_selection (initial_event, dpyinfo)
+popup_get_selection (initial_event, dpyinfo, id)
      XEvent *initial_event;
      struct x_display_info *dpyinfo;
+     LWLIB_ID id;
 {
   XEvent event;
 
@@ -1077,6 +1078,15 @@
       else if (event.type == ButtonRelease
 	       && dpyinfo->display == event.xbutton.display)
 	dpyinfo->grabbed &= ~(1 << event.xbutton.button);
+      /* If the user presses a key, deactivate the menu.
+	 The user is likely to do that if we get wedged.  */
+      else if (event.type == KeyPress
+	       && dpyinfo->display == event.xbutton.display)
+	{
+	  lw_destroy_all_widgets (id); 
+	  popup_activated_flag = 0;
+	  break;
+	}
 
       /* Queue all events not for this popup,
 	 except for Expose, which we've already handled.
@@ -1847,7 +1857,7 @@
   popup_activated_flag = 1;
 
   /* Process events that apply to the menu.  */
-  popup_get_selection ((XEvent *) 0, FRAME_X_DISPLAY_INFO (f));
+  popup_get_selection ((XEvent *) 0, FRAME_X_DISPLAY_INFO (f), menu_id);
 
 #if 0
   /* fp turned off the following statement and wrote a comment
@@ -2065,7 +2075,7 @@
   popup_activated_flag = 1;
 
   /* Process events that apply to the menu.  */
-  popup_get_selection ((XEvent *) 0, FRAME_X_DISPLAY_INFO (f));
+  popup_get_selection ((XEvent *) 0, FRAME_X_DISPLAY_INFO (f), dialog_id);
 
   /* Find the selected item, and its pane, to return
      the proper value.  */