Mercurial > emacs
changeset 11614:fdd0d5bdd8c6
(popup_get_selection): Use x_non_menubar_window_to_frame.
Either queue or dispatch the event, but not both.
(dialog_selection_callback): Clear popup_activated_flag.
(Fx_popup_menu): If POSITION is just (menu-bar), use the
current mouse position.
(menubar_selection_callback): Use (menu-bar) instead of 'menu-bar.
author | Karl Heuer <kwzh@gnu.org> |
---|---|
date | Sat, 29 Apr 1995 04:21:23 +0000 |
parents | c4ef6460a9c9 |
children | 7fa33c87242c |
files | src/xmenu.c |
diffstat | 1 files changed, 11 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/xmenu.c Sat Apr 29 04:20:12 1995 +0000 +++ b/src/xmenu.c Sat Apr 29 04:21:23 1995 +0000 @@ -763,7 +763,8 @@ check_x (); /* Decode the first argument: find the window and the coordinates. */ - if (EQ (position, Qt)) + if (EQ (position, Qt) + || (CONSP (position) && EQ (XCONS (position)->car, Qmenu_bar))) { /* Use the mouse's current position. */ FRAME_PTR new_f = selected_frame; @@ -1078,12 +1079,14 @@ dpyinfo->grabbed &= ~(1 << event.xbutton.button); /* Queue all events not for this popup, - except for Expose, which we've already handled. */ + except for Expose, which we've already handled. + Note that the X window is associated with the frame if this + is a menu bar popup, but not if it's a dialog box. So we use + x_non_menubar_window_to_frame, not x_any_window_to_frame. */ if (event.type != Expose && (event.xany.display != dpyinfo->display - || ! x_any_window_to_frame (dpyinfo, event.xany.window))) + || x_non_menubar_window_to_frame (dpyinfo, event.xany.window))) { - queue_tmp = (struct event_queue *) malloc (sizeof (struct event_queue)); if (queue_tmp != NULL) @@ -1093,8 +1096,8 @@ queue = queue_tmp; } } - - XtDispatchEvent (&event); + else + XtDispatchEvent (&event); if (!popup_activated ()) break; @@ -1191,7 +1194,7 @@ XSETFRAME (frame, f); buf.kind = menu_bar_event; - buf.frame_or_window = Fcons (frame, Qmenu_bar); + buf.frame_or_window = Fcons (frame, Fcons (Qmenu_bar, Qnil)); kbd_buffer_store_event (&buf); for (j = 0; j < submenu_depth; j++) @@ -1902,6 +1905,7 @@ BLOCK_INPUT; lw_destroy_all_widgets (id); UNBLOCK_INPUT; + popup_activated_flag = 0; } static char * button_names [] = {