changeset 15807:508ec69917b1

(pending_menu_activation): Don't initialize. Not static. (set_frame_menubar): If no saved_menu_event yet, set deep_p. Don't clear pending_menu_activation here. (Fx_popup_dialog): Don't fail to initialize WINDOW.
author Richard M. Stallman <rms@gnu.org>
date Wed, 31 Jul 1996 16:54:23 +0000
parents a3f1489198ea
children 3afa38a18102
files src/xmenu.c
diffstat 1 files changed, 18 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/xmenu.c	Wed Jul 31 16:52:52 1996 +0000
+++ b/src/xmenu.c	Wed Jul 31 16:54:23 1996 +0000
@@ -172,7 +172,14 @@
 
 static int next_menubar_widget_id;
 
-static int pending_menu_activation = 1;
+/* This is set nonzero after the user activates the menu bar, and set
+   to zero again after the menu bars are redisplayed by prepare_menu_bar.
+   While it is nonzero, all calls to set_frame_menubar go deep.
+
+   I don't understand why this is needed, but it does seem to be
+   needed on Motif, according to Marcus Daniels <marcus@sysc.pdx.edu>.  */
+
+int pending_menu_activation;
 
 #ifdef USE_X_TOOLKIT
 
@@ -1007,6 +1014,8 @@
     }
   else if (WINDOWP (position) || FRAMEP (position))
     window = position;
+  else
+    window = Qnil;
 
   /* Decode where to put the menu.  */
 
@@ -1184,13 +1193,14 @@
   if (!f->output_data.x->saved_menu_event->type)
     return;
 
-  if (f->output_data.x->saved_menu_event->type != ButtonRelease)
-    set_frame_menubar (f, 0, 1);
+  set_frame_menubar (f, 0, 1);
   BLOCK_INPUT;
   XtDispatchEvent ((XEvent *) f->output_data.x->saved_menu_event);
   UNBLOCK_INPUT;
+#ifdef USE_MOTIF
   if (f->output_data.x->saved_menu_event->type == ButtonRelease)
     pending_menu_activation = 1;
+#endif
   
   /* Ignore this if we get it a second time.  */
   f->output_data.x->saved_menu_event->type = 0;
@@ -1607,9 +1617,13 @@
   if (! menubar_widget)
     deep_p = 1;
   else if (pending_menu_activation && !deep_p)
+    deep_p = 1;
+  /* Make the first call for any given frame always go deep.  */
+  else if (!f->output_data.x->saved_menu_event && !deep_p)
     {
       deep_p = 1;
-      pending_menu_activation = 0;
+      f->output_data.x->saved_menu_event = (XEvent*)xmalloc (sizeof (XEvent));
+      f->output_data.x->saved_menu_event->type = 0;
     }
 
   wv = xmalloc_widget_value ();