Mercurial > emacs
changeset 107708:c98cb0bca076
* menu.c (Fx_popup_menu): Use last_event_timestamp (Bug#4930).
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Tue, 30 Mar 2010 19:26:38 -0400 |
parents | 0fee5a19e171 |
children | 6db4a0b4404d cc97bf641d5f 91ec5dc616ef |
files | src/ChangeLog src/menu.c |
diffstat | 2 files changed, 16 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ChangeLog Tue Mar 30 23:41:01 2010 +0200 +++ b/src/ChangeLog Tue Mar 30 19:26:38 2010 -0400 @@ -1,3 +1,7 @@ +2010-03-30 Bernhard Herzog <bh@intevation.de> (tiny change) + + * menu.c (Fx_popup_menu): Use last_event_timestamp (Bug#4930). + 2010-03-30 Jan Djärv <jan.h.d@swipnet.se> * xdisp.c (note_mouse_highlight): Don't do highlight if pointer is
--- a/src/menu.c Tue Mar 30 23:41:01 2010 +0200 +++ b/src/menu.c Tue Mar 30 19:26:38 2010 -0400 @@ -61,6 +61,10 @@ #define HAVE_BOXES 1 #endif +/* The timestamp of the last input event Emacs received from the X server. */ +/* Defined in keyboard.c. */ +extern unsigned long last_event_timestamp; + extern Lisp_Object QCtoggle, QCradio; Lisp_Object menu_items; @@ -1073,7 +1077,6 @@ int keymaps = 0; int for_click = 0; int specpdl_count = SPECPDL_INDEX (); - Lisp_Object timestamp = Qnil; struct gcpro gcpro1; if (NILP (position)) @@ -1107,10 +1110,9 @@ for_click = 1; tem = Fcar (Fcdr (position)); /* EVENT_START (position) */ window = Fcar (tem); /* POSN_WINDOW (tem) */ - tem = Fcdr (Fcdr (tem)); - x = Fcar (Fcar (tem)); - y = Fcdr (Fcar (tem)); - timestamp = Fcar (Fcdr (tem)); + tem = Fcar (Fcdr (Fcdr (tem))); /* POSN_WINDOW_POSN (tem) */ + x = Fcar (tem); + y = Fcdr (tem); } /* If a click happens in an external tool bar or a detached @@ -1318,9 +1320,13 @@ selection = ns_menu_show (f, xpos, ypos, for_click, keymaps, title, &error_name); #else /* MSDOS and X11 */ + /* Assume last_event_timestamp is the timestamp of the button event. + Is this assumption ever violated? We can't use the timestamp + stored within POSITION because there the top bits from the actual + timestamp may be truncated away (Bug#4930). */ selection = xmenu_show (f, xpos, ypos, for_click, keymaps, title, &error_name, - INTEGERP (timestamp) ? XUINT (timestamp) : 0); + last_event_timestamp); #endif UNBLOCK_INPUT;