]> git.eshelyaron.com Git - emacs.git/commitdiff
* menu.c (Fx_popup_menu): Use last_event_timestamp (Bug#4930).
authorChong Yidong <cyd@stupidchicken.com>
Tue, 30 Mar 2010 23:26:38 +0000 (19:26 -0400)
committerChong Yidong <cyd@stupidchicken.com>
Tue, 30 Mar 2010 23:26:38 +0000 (19:26 -0400)
src/ChangeLog
src/menu.c

index 25182378fd004d64258c7b61551b3bbaa3fadbd9..cb80f6f498dc212eff25fda316505f8ed55f4ccd 100644 (file)
@@ -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
index ad6054d7192953894816a7d3bbabb155a5437816..bfe54a53328e4127855cdcad5a922f2f8abbd939 100644 (file)
@@ -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;