diff src/menubar-x.c @ 1346:01c57eb70ae9

[xemacs-hg @ 2003-03-09 02:27:27 by ben] To: xemacs-patches@xemacs.org i.c: Sleep between calls to check for I/O, since these calls are non-blocking. behavior.el: Allow other keywords for forward compatibility. cl-macs.el: Rewrite to eliminate byte-compiler warning when `return' is used without `finally'. cmdloop.el: Avoid truncated error messages for `end-of-file' and the like. cmdloop.el: Avoid char-int error after syncing. files.el: Eliminate byte-compile warnings. printer.el: Fix line-width calculations. #### This used to work. Someone's changes (perhaps by Michael Sperber?) seem to have messed something up. simple.el: Use new clear-left-side functions to avoid messages ending up on the same line as other output. xemacs.mak: Add override for info/ as well when separate source/build dirs. xemacs.mak: Order sections in main build process and add comments. Add additional dependencies to try and prevent later steps from happening when failures in earlier steps have occurred. Makefile.in.in: Order sections in main build process and add comments. Add additional dependencies to try and prevent later steps from happening when failures in earlier steps have occurred. alloc.c: Don't arbitrarily clear Vconfigure_info_directory since it messes up separate build/source dirs. console.c, console.h, device-msw.c, device.c: Add accidentally omitted msprinter console and data descriptions. print.c, console-msw.c: Add clear-left-side functionality to help keep stdio/stderr output from separate sources on separate lines. Generalize the different kinds of debugging output. Add dpa(). profile.c: Add better docs on Unix/Windows differences. regex.c: Fix problems with rel-alloc compilation caused by previous patch. emacs.c: Seg fault rather than abort on Cygwin, since gdb doesn't trap aborts properly. console-gtk-impl.h, console-gtk.h, console-msw.h, console-x-impl.h, console-x.h, dialog-gtk.c, dialog-x.c, event-msw.c, frame-gtk.c, frame-x.c, frameslots.h, glyphs-gtk.c, glyphs-x.c, gui-gtk.c, gui-x.c, inline.c, menubar-gtk.c, menubar-msw.c, menubar-x.c, scrollbar-gtk.c, scrollbar-x.c, ui-gtk.c: Delete popup-data object. Delete menubar_data field from frames, since its usage is frame-specific. Delete menubar-msw.h, gui-x.h, gui-gtk.h. Clean up handling of lwlib callback data GCPRO'ing and add missing GCPRO recomputation in widget code.
author ben
date Sun, 09 Mar 2003 02:27:46 +0000
parents 1b0339b048ce
children 59bf16be00bf
line wrap: on
line diff
--- a/src/menubar-x.c	Sat Mar 08 22:52:26 2003 +0000
+++ b/src/menubar-x.c	Sun Mar 09 02:27:46 2003 +0000
@@ -48,7 +48,6 @@
 #include "window-impl.h"
 
 #include "console-x-impl.h"
-#include "gui-x.h"
 
 #include "EmacsFrame.h"
 #include "../lwlib/lwlib.h"
@@ -57,9 +56,6 @@
 			      int deep_p,
 			      int first_time_p);
 
-#define FRAME_MENUBAR_DATA(frame) ((frame)->menubar_data)
-#define XFRAME_MENUBAR_DATA(frame) XPOPUP_DATA ((frame)->menubar_data)
-
 #define MENUBAR_TYPE	0
 #define SUBMENU_TYPE	1
 #define POPUP_TYPE	2
@@ -481,9 +477,9 @@
       /* Now that we've destructively modified part of the widget value
 	 hierarchy, our list of protected callbacks will no longer be
 	 valid, so we need to recompute it. */
-      snarf_widget_values_for_gcpro (FRAME_MENUBAR_DATA (f));
+      gcpro_popup_callbacks (FRAME_X_MENUBAR_ID (f));
     }
-  else if (!POPUP_DATAP (FRAME_MENUBAR_DATA (f)))
+  else if (!FRAME_X_MENUBAR_ID (f))
     return;
   else
     {
@@ -565,21 +561,12 @@
   if (!data || (!data->next && !data->contents))
     abort ();
 
-  if (NILP (FRAME_MENUBAR_DATA (f)))
-    {
-      struct popup_data *mdata =
-	alloc_lcrecord_type (struct popup_data, &lrecord_popup_data);
-
-      mdata->id = new_lwlib_id ();
-      mdata->last_menubar_buffer = Qnil;
-      mdata->protect_me = Qnil;
-      mdata->menubar_contents_up_to_date = 0;
-      FRAME_MENUBAR_DATA (f) = wrap_popup_data (mdata);
-    }
+  if (!FRAME_X_MENUBAR_ID (f))
+    FRAME_X_MENUBAR_ID (f) = new_lwlib_id ();
 
   /***** now store into the menubar widget, creating it if necessary *****/
 
-  id = XFRAME_MENUBAR_DATA (f)->id;
+  id = FRAME_X_MENUBAR_ID (f);
   if (!FRAME_X_MENUBAR_WIDGET (f))
     {
       Widget parent = FRAME_X_CONTAINER_WIDGET (f);
@@ -612,10 +599,10 @@
      have been freshly created.  They need to be GC-protected, so snarf them
      now and record them into the popup-data object associated with the
      frame. */
-  snarf_widget_values_for_gcpro (FRAME_MENUBAR_DATA (f));
+  gcpro_popup_callbacks (id);
 
-  XFRAME_MENUBAR_DATA (f)->menubar_contents_up_to_date = deep_p;
-  XFRAME_MENUBAR_DATA (f)->last_menubar_buffer =
+  FRAME_X_MENUBAR_CONTENTS_UP_TO_DATE (f) = deep_p;
+  FRAME_X_LAST_MENUBAR_BUFFER (f) =
     XWINDOW (FRAME_LAST_NONMINIBUF_WINDOW (f))->buffer;
   return menubar_visible;
 }
@@ -721,8 +708,8 @@
    */
   int menubar_contents_changed =
     (f->menubar_changed
-     || NILP (FRAME_MENUBAR_DATA (f))
-     || (!EQ (XFRAME_MENUBAR_DATA (f)->last_menubar_buffer,
+     || !FRAME_X_MENUBAR_ID (f)
+     || (!EQ (FRAME_X_LAST_MENUBAR_BUFFER (f),
 	      XWINDOW (FRAME_LAST_NONMINIBUF_WINDOW (f))->buffer)));
 
   Boolean menubar_was_visible = XtIsManaged (FRAME_X_MENUBAR_WIDGET (f));
@@ -765,9 +752,10 @@
   menubar_widget = FRAME_X_MENUBAR_WIDGET (f);
   if (menubar_widget)
     {
-      LWLIB_ID id = XFRAME_MENUBAR_DATA (f)->id;
+      LWLIB_ID id = FRAME_X_MENUBAR_ID (f);
       lw_destroy_all_widgets (id);
-      XFRAME_MENUBAR_DATA (f)->id = 0;
+      ungcpro_popup_callbacks (id);
+      FRAME_X_MENUBAR_ID (f) = 0;
     }
 }
 
@@ -1234,7 +1222,7 @@
       Lisp_Object matchp;
 
       widget_value *val;
-      LWLIB_ID id = XPOPUP_DATA (f->menubar_data)->id;
+      LWLIB_ID id = FRAME_X_MENUBAR_ID (f);
 
       val = lw_get_all_values (id);
       if (val)
@@ -1323,10 +1311,10 @@
   LWLIB_ID id;
   widget_value *val;
 
-  if (NILP (f->menubar_data))
+  if (!FRAME_X_MENUBAR_ID (f))
     invalid_argument ("Frame has no menubar", Qunbound);
 
-  id = XPOPUP_DATA (f->menubar_data)->id;
+  id = FRAME_X_MENUBAR_ID (f);
   val = lw_get_all_values (id);
   val = val->contents;
   lw_set_menu (FRAME_X_MENUBAR_WIDGET (f), val);