Commit 9572375b authored by Karl Heuer's avatar Karl Heuer
Browse files

(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.
parent 5a8d99e0
...@@ -763,7 +763,8 @@ cached information about equivalent key sequences.") ...@@ -763,7 +763,8 @@ cached information about equivalent key sequences.")
check_x (); check_x ();
/* Decode the first argument: find the window and the coordinates. */ /* 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. */ /* Use the mouse's current position. */
FRAME_PTR new_f = selected_frame; FRAME_PTR new_f = selected_frame;
...@@ -1078,12 +1079,14 @@ popup_get_selection (initial_event, dpyinfo) ...@@ -1078,12 +1079,14 @@ popup_get_selection (initial_event, dpyinfo)
dpyinfo->grabbed &= ~(1 << event.xbutton.button); dpyinfo->grabbed &= ~(1 << event.xbutton.button);
/* Queue all events not for this popup, /* 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 if (event.type != Expose
&& (event.xany.display != dpyinfo->display && (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)); queue_tmp = (struct event_queue *) malloc (sizeof (struct event_queue));
if (queue_tmp != NULL) if (queue_tmp != NULL)
...@@ -1093,8 +1096,8 @@ popup_get_selection (initial_event, dpyinfo) ...@@ -1093,8 +1096,8 @@ popup_get_selection (initial_event, dpyinfo)
queue = queue_tmp; queue = queue_tmp;
} }
} }
else
XtDispatchEvent (&event); XtDispatchEvent (&event);
if (!popup_activated ()) if (!popup_activated ())
break; break;
...@@ -1191,7 +1194,7 @@ menubar_selection_callback (widget, id, client_data) ...@@ -1191,7 +1194,7 @@ menubar_selection_callback (widget, id, client_data)
XSETFRAME (frame, f); XSETFRAME (frame, f);
buf.kind = menu_bar_event; 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); kbd_buffer_store_event (&buf);
for (j = 0; j < submenu_depth; j++) for (j = 0; j < submenu_depth; j++)
...@@ -1902,6 +1905,7 @@ dialog_selection_callback (widget, id, client_data) ...@@ -1902,6 +1905,7 @@ dialog_selection_callback (widget, id, client_data)
BLOCK_INPUT; BLOCK_INPUT;
lw_destroy_all_widgets (id); lw_destroy_all_widgets (id);
UNBLOCK_INPUT; UNBLOCK_INPUT;
popup_activated_flag = 0;
} }
static char * button_names [] = { static char * button_names [] = {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment