summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChong Yidong <cyd@stupidchicken.com>2010-03-30 19:26:38 -0400
committerChong Yidong <cyd@stupidchicken.com>2010-03-30 19:26:38 -0400
commita6d676d9f41be8ad0c436c6d04cfedc1ce68adc8 (patch)
tree368f24d8d4134416c9f1d7ddaadbc6326520704f
parentb42da3879c85f7083bd9adc1bcb1f48b4472ac30 (diff)
downloademacs-a6d676d9f41be8ad0c436c6d04cfedc1ce68adc8.tar.gz
* menu.c (Fx_popup_menu): Use last_event_timestamp (Bug#4930).
-rw-r--r--src/ChangeLog4
-rw-r--r--src/menu.c18
2 files changed, 16 insertions, 6 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 25182378fd0..cb80f6f498d 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -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
diff --git a/src/menu.c b/src/menu.c
index ad6054d7192..bfe54a53328 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -61,6 +61,10 @@ extern HMENU current_popup_menu;
#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 @@ no quit occurs and `x-popup-menu' returns nil. */)
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 @@ no quit occurs and `x-popup-menu' returns nil. */)
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 @@ no quit occurs and `x-popup-menu' returns nil. */)
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;