# HG changeset patch # User Karl Heuer # Date 801528427 0 # Node ID 4117d74ba254c750933c3a83105c3e03d5270e6a # Parent d349456b4b1c5bf8ec75524f7d99c13dcdc2f176 (popup_get_selection): Force deactivation if key pressed. New arg `id'. (xdialog_show, xmenu_show): Pass new arg to popup_get_selection. diff -r d349456b4b1c -r 4117d74ba254 src/xmenu.c --- 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. */