This commit was generated by cvs2svn to compensate for changes in r1398,
[chise/xemacs-chise.git.1] / src / toolbar.c
index d45beca..c7221c7 100644 (file)
@@ -57,19 +57,19 @@ Lisp_Object Qinit_toolbar_from_resources;
 
 \f
 static Lisp_Object
-mark_toolbar_button (Lisp_Object obj, void (*markobj) (Lisp_Object))
+mark_toolbar_button (Lisp_Object obj)
 {
-  struct toolbar_button *data = (struct toolbar_button *) XPNTR (obj);
-  ((markobj) (data->next));
-  ((markobj) (data->frame));
-  ((markobj) (data->up_glyph));
-  ((markobj) (data->down_glyph));
-  ((markobj) (data->disabled_glyph));
-  ((markobj) (data->cap_up_glyph));
-  ((markobj) (data->cap_down_glyph));
-  ((markobj) (data->cap_disabled_glyph));
-  ((markobj) (data->callback));
-  ((markobj) (data->enabled_p));
+  struct toolbar_button *data = XTOOLBAR_BUTTON (obj);
+  mark_object (data->next);
+  mark_object (data->frame);
+  mark_object (data->up_glyph);
+  mark_object (data->down_glyph);
+  mark_object (data->disabled_glyph);
+  mark_object (data->cap_up_glyph);
+  mark_object (data->cap_down_glyph);
+  mark_object (data->cap_disabled_glyph);
+  mark_object (data->callback);
+  mark_object (data->enabled_p);
   return data->help_string;
 }
 
@@ -90,7 +90,7 @@ print_toolbar_button (Lisp_Object obj, Lisp_Object printcharfun,
 
 DEFINE_LRECORD_IMPLEMENTATION ("toolbar-button", toolbar_button,
                               mark_toolbar_button, print_toolbar_button,
-                              0, 0, 0,
+                              0, 0, 0, 0,
                               struct toolbar_button);
 
 DEFUN ("toolbar-button-p", Ftoolbar_button_p, 1, 1, 0, /*
@@ -303,7 +303,7 @@ update_toolbar_button (struct frame *f, struct toolbar_button *tb,
 
   if (!tb)
     {
-      tb = alloc_lcrecord_type (struct toolbar_button, lrecord_toolbar_button);
+      tb = alloc_lcrecord_type (struct toolbar_button, &lrecord_toolbar_button);
       tb->next = Qnil;
       XSETFRAME (tb->frame, f);
       tb->up_glyph = Qnil;
@@ -722,10 +722,10 @@ set_frame_toolbar (struct frame *f, enum toolbar_pos pos)
 static void
 compute_frame_toolbars_data (struct frame *f)
 {
-  set_frame_toolbar (f, TOP_TOOLBAR);                   
-  set_frame_toolbar (f, BOTTOM_TOOLBAR);                        
-  set_frame_toolbar (f, LEFT_TOOLBAR);                  
-  set_frame_toolbar (f, RIGHT_TOOLBAR);                         
+  set_frame_toolbar (f, TOP_TOOLBAR);
+  set_frame_toolbar (f, BOTTOM_TOOLBAR);
+  set_frame_toolbar (f, LEFT_TOOLBAR);
+  set_frame_toolbar (f, RIGHT_TOOLBAR);
 }
 
 void
@@ -737,14 +737,14 @@ update_frame_toolbars (struct frame *f)
       && (f->toolbar_changed || f->frame_changed || f->clear))
     {
       int pos;
-      
+
       /* We're not officially "in redisplay", so we still have a
         chance to re-layout toolbars and windows. This is done here,
         because toolbar is the only thing which currently might
-        necesseritate this layout, as it is outside any windows. We
+        necessitate this layout, as it is outside any windows. We
         take care not to change size if toolbar geometry is really
         unchanged, as it will hose windows whose pixsizes are not
-        multiple of character sizes */
+        multiple of character sizes. */
 
       for (pos = 0; pos < 4; pos++)
        if (FRAME_REAL_TOOLBAR_SIZE (f, pos)
@@ -894,30 +894,27 @@ get_toolbar_coords (struct frame *f, enum toolbar_pos pos, int *x, int *y,
     }
 }
 
-#define CHECK_TOOLBAR(pos)                                             \
-  do                                                                   \
+#define CHECK_TOOLBAR(pos) do {                                                \
+  if (FRAME_REAL_##pos##_VISIBLE (f))                                  \
     {                                                                  \
+      int x, y, width, height, vert;                                   \
+                                                                       \
       get_toolbar_coords (f, pos, &x, &y, &width, &height, &vert, 0);  \
       if ((x_coord >= x) && (x_coord < (x + width)))                   \
        {                                                               \
          if ((y_coord >= y) && (y_coord < (y + height)))               \
            return FRAME_TOOLBAR_BUTTONS (f, pos);                      \
        }                                                               \
-    } while (0)
+    }                                                                  \
+} while (0)
 
 static Lisp_Object
 toolbar_buttons_at_pixpos (struct frame *f, int x_coord, int y_coord)
 {
-  int x, y, width, height, vert;
-
-  if (FRAME_REAL_TOP_TOOLBAR_VISIBLE (f))
-    CHECK_TOOLBAR (TOP_TOOLBAR);
-  if (FRAME_REAL_BOTTOM_TOOLBAR_VISIBLE (f))
-    CHECK_TOOLBAR (BOTTOM_TOOLBAR);
-  if (FRAME_REAL_LEFT_TOOLBAR_VISIBLE (f))
-    CHECK_TOOLBAR (LEFT_TOOLBAR);
-  if (FRAME_REAL_RIGHT_TOOLBAR_VISIBLE (f))
-    CHECK_TOOLBAR (RIGHT_TOOLBAR);
+  CHECK_TOOLBAR (TOP_TOOLBAR);
+  CHECK_TOOLBAR (BOTTOM_TOOLBAR);
+  CHECK_TOOLBAR (LEFT_TOOLBAR);
+  CHECK_TOOLBAR (RIGHT_TOOLBAR);
 
   return Qnil;
 }
@@ -931,9 +928,6 @@ toolbar_button_at_pixpos (struct frame *f, int x_coord, int y_coord)
 {
   Lisp_Object buttons = toolbar_buttons_at_pixpos (f, x_coord, y_coord);
 
-  if (NILP (buttons))
-    return Qnil;
-
   while (!NILP (buttons))
     {
       struct toolbar_button *tb = XTOOLBAR_BUTTON (buttons);
@@ -953,7 +947,7 @@ toolbar_button_at_pixpos (struct frame *f, int x_coord, int y_coord)
       buttons = tb->next;
     }
 
-  /* We must be over a blank in the toolbar. */
+  /* We are not over a toolbar or we are over a blank in the toolbar. */
   return Qnil;
 }
 
@@ -964,13 +958,10 @@ toolbar_button_at_pixpos (struct frame *f, int x_coord, int y_coord)
 
 DEFINE_SPECIFIER_TYPE (toolbar);
 
-#define CTB_ERROR(msg)                                         \
-  do                                                           \
-    {                                                          \
-      maybe_signal_simple_error (msg, button, Qtoolbar, errb); \
-      RETURN__ Qnil;                                           \
-    }                                                          \
-  while (0)
+#define CTB_ERROR(msg) do {                                    \
+  maybe_signal_simple_error (msg, button, Qtoolbar, errb);     \
+  RETURN_SANS_WARNINGS Qnil;                                   \
+} while (0)
 
 /* Returns Q_style if key was :style, Qt if ok otherwise, Qnil if error. */
 static Lisp_Object
@@ -979,7 +970,7 @@ check_toolbar_button_keywords (Lisp_Object button, Lisp_Object key,
 {
   if (!KEYWORDP (key))
     {
-      maybe_signal_simple_error_2 ("not a keyword", key, button, Qtoolbar,
+      maybe_signal_simple_error_2 ("Not a keyword", key, button, Qtoolbar,
                                   errb);
       return Qnil;
     }
@@ -990,7 +981,7 @@ check_toolbar_button_keywords (Lisp_Object button, Lisp_Object key,
          && !EQ (val, Q3D)
          && !EQ (val, Q2d)
          && !EQ (val, Q3d))
-       CTB_ERROR ("unrecognized toolbar blank style");
+       CTB_ERROR ("Unrecognized toolbar blank style");
 
       return Q_style;
     }
@@ -1139,18 +1130,18 @@ toolbar_validate (Lisp_Object instantiator)
     return;
 
   if (!CONSP (instantiator))
-    signal_simple_error ("toolbar spec must be list or nil", instantiator);
+    signal_simple_error ("Toolbar spec must be list or nil", instantiator);
 
   for (rest = instantiator; !NILP (rest); rest = XCDR (rest))
     {
       if (!CONSP (rest))
-       signal_simple_error ("bad list in toolbar spec", instantiator);
+       signal_simple_error ("Bad list in toolbar spec", instantiator);
 
       if (NILP (XCAR (rest)))
        {
          if (pushright_seen)
            error
-             ("more than one partition (nil) in instantiator description");
+             ("More than one partition (nil) in instantiator description");
          else
            pushright_seen = 1;
        }
@@ -1200,7 +1191,7 @@ toolbar_specs_changed (Lisp_Object specifier, struct window *w,
                       Lisp_Object oldval)
 {
   /* This could be smarter but I doubt that it would make any
-     noticable difference given the infrequency with which this is
+     noticeable difference given the infrequency with which this is
      probably going to be called.
      */
   MARK_TOOLBAR_CHANGED;
@@ -1272,7 +1263,7 @@ toolbar_buttons_captioned_p_changed (Lisp_Object specifier, struct window *w,
                                     Lisp_Object oldval)
 {
   /* This could be smarter but I doubt that it would make any
-     noticable difference given the infrequency with which this is
+     noticeable difference given the infrequency with which this is
      probably going to be called. */
   MARK_TOOLBAR_CHANGED;
 }
@@ -1281,6 +1272,8 @@ toolbar_buttons_captioned_p_changed (Lisp_Object specifier, struct window *w,
 void
 syms_of_toolbar (void)
 {
+  INIT_LRECORD_IMPLEMENTATION (toolbar_button);
+
   defsymbol (&Qtoolbar_buttonp, "toolbar-button-p");
   defsymbol (&Q2D, "2D");
   defsymbol (&Q3D, "3D");
@@ -1321,6 +1314,12 @@ specifier_type_create_toolbar (void)
 }
 
 void
+reinit_specifier_type_create_toolbar (void)
+{
+  REINITIALIZE_SPECIFIER_TYPE (toolbar);
+}
+
+void
 specifier_vars_of_toolbar (void)
 {
   Lisp_Object fb;
@@ -1437,8 +1436,7 @@ For the other vector formats (specifying blank areas of the toolbar):
      automatically knew about specifier fallbacks, so we didn't
      have to do it ourselves. */
   set_specifier_caching (Vdefault_toolbar,
-                        slot_offset (struct window,
-                                     default_toolbar),
+                        offsetof (struct window, default_toolbar),
                         default_toolbar_specs_changed,
                         0, 0);
 
@@ -1450,8 +1448,7 @@ See `default-toolbar' for a description of a valid toolbar instantiator.
 */ );
   Vtoolbar[TOP_TOOLBAR] = Fmake_specifier (Qtoolbar);
   set_specifier_caching (Vtoolbar[TOP_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar[TOP_TOOLBAR]),
+                        offsetof (struct window, toolbar[TOP_TOOLBAR]),
                         toolbar_specs_changed,
                         0, 0);
 
@@ -1468,8 +1465,7 @@ displayed even if you provide a value for `bottom-toolbar'.
 */ );
   Vtoolbar[BOTTOM_TOOLBAR] = Fmake_specifier (Qtoolbar);
   set_specifier_caching (Vtoolbar[BOTTOM_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar[BOTTOM_TOOLBAR]),
+                        offsetof (struct window, toolbar[BOTTOM_TOOLBAR]),
                         toolbar_specs_changed,
                         0, 0);
 
@@ -1486,8 +1482,7 @@ displayed even if you provide a value for `left-toolbar'.
 */ );
   Vtoolbar[LEFT_TOOLBAR] = Fmake_specifier (Qtoolbar);
   set_specifier_caching (Vtoolbar[LEFT_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar[LEFT_TOOLBAR]),
+                        offsetof (struct window, toolbar[LEFT_TOOLBAR]),
                         toolbar_specs_changed,
                         0, 0);
 
@@ -1504,8 +1499,7 @@ displayed even if you provide a value for `right-toolbar'.
 */ );
   Vtoolbar[RIGHT_TOOLBAR] = Fmake_specifier (Qtoolbar);
   set_specifier_caching (Vtoolbar[RIGHT_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar[RIGHT_TOOLBAR]),
+                        offsetof (struct window, toolbar[RIGHT_TOOLBAR]),
                         toolbar_specs_changed,
                         0, 0);
 
@@ -1559,11 +1553,9 @@ is not visible, so it is expanded to take up the slack.
 */ );
   Vdefault_toolbar_height = Fmake_specifier (Qnatnum);
   set_specifier_caching (Vdefault_toolbar_height,
-                        slot_offset (struct window,
-                                     default_toolbar_height),
+                        offsetof (struct window, default_toolbar_height),
                         default_toolbar_size_changed_in_window,
-                        slot_offset (struct frame,
-                                     default_toolbar_height),
+                        offsetof (struct frame, default_toolbar_height),
                         default_toolbar_size_changed_in_frame);
 
   DEFVAR_SPECIFIER ("default-toolbar-width", &Vdefault_toolbar_width /*
@@ -1574,11 +1566,9 @@ See `default-toolbar-height' for more information.
 */ );
   Vdefault_toolbar_width = Fmake_specifier (Qnatnum);
   set_specifier_caching (Vdefault_toolbar_width,
-                        slot_offset (struct window,
-                                     default_toolbar_width),
+                        offsetof (struct window, default_toolbar_width),
                         default_toolbar_size_changed_in_window,
-                        slot_offset (struct frame,
-                                     default_toolbar_width),
+                        offsetof (struct frame, default_toolbar_width),
                         default_toolbar_size_changed_in_frame);
 
   DEFVAR_SPECIFIER ("top-toolbar-height",
@@ -1590,11 +1580,9 @@ See `default-toolbar-height' for more information.
 */ );
   Vtoolbar_size[TOP_TOOLBAR] = Fmake_specifier (Qnatnum);
   set_specifier_caching (Vtoolbar_size[TOP_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar_size[TOP_TOOLBAR]),
+                        offsetof (struct window, toolbar_size[TOP_TOOLBAR]),
                         toolbar_geometry_changed_in_window,
-                        slot_offset (struct frame,
-                                     toolbar_size[TOP_TOOLBAR]),
+                        offsetof (struct frame, toolbar_size[TOP_TOOLBAR]),
                         frame_size_slipped);
 
   DEFVAR_SPECIFIER ("bottom-toolbar-height",
@@ -1606,11 +1594,9 @@ See `default-toolbar-height' for more information.
 */ );
   Vtoolbar_size[BOTTOM_TOOLBAR] = Fmake_specifier (Qnatnum);
   set_specifier_caching (Vtoolbar_size[BOTTOM_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar_size[BOTTOM_TOOLBAR]),
+                        offsetof (struct window, toolbar_size[BOTTOM_TOOLBAR]),
                         toolbar_geometry_changed_in_window,
-                        slot_offset (struct frame,
-                                     toolbar_size[BOTTOM_TOOLBAR]),
+                        offsetof (struct frame, toolbar_size[BOTTOM_TOOLBAR]),
                         frame_size_slipped);
 
   DEFVAR_SPECIFIER ("left-toolbar-width",
@@ -1622,11 +1608,9 @@ See `default-toolbar-height' for more information.
 */ );
   Vtoolbar_size[LEFT_TOOLBAR] = Fmake_specifier (Qnatnum);
   set_specifier_caching (Vtoolbar_size[LEFT_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar_size[LEFT_TOOLBAR]),
+                        offsetof (struct window, toolbar_size[LEFT_TOOLBAR]),
                         toolbar_geometry_changed_in_window,
-                        slot_offset (struct frame,
-                                     toolbar_size[LEFT_TOOLBAR]),
+                        offsetof (struct frame, toolbar_size[LEFT_TOOLBAR]),
                         frame_size_slipped);
 
   DEFVAR_SPECIFIER ("right-toolbar-width",
@@ -1638,11 +1622,9 @@ See `default-toolbar-height' for more information.
 */ );
   Vtoolbar_size[RIGHT_TOOLBAR] = Fmake_specifier (Qnatnum);
   set_specifier_caching (Vtoolbar_size[RIGHT_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar_size[RIGHT_TOOLBAR]),
+                        offsetof (struct window, toolbar_size[RIGHT_TOOLBAR]),
                         toolbar_geometry_changed_in_window,
-                        slot_offset (struct frame,
-                                     toolbar_size[RIGHT_TOOLBAR]),
+                        offsetof (struct frame, toolbar_size[RIGHT_TOOLBAR]),
                         frame_size_slipped);
 
   fb = Qnil;
@@ -1653,7 +1635,7 @@ See `default-toolbar-height' for more information.
   fb = Fcons (Fcons (list1 (Qx), make_int (DEFAULT_TOOLBAR_HEIGHT)), fb);
 #endif
 #ifdef HAVE_MS_WINDOWS
-  fb = Fcons (Fcons (list1 (Qmswindows), 
+  fb = Fcons (Fcons (list1 (Qmswindows),
                     make_int (MSWINDOWS_DEFAULT_TOOLBAR_HEIGHT)), fb);
 #endif
   if (!NILP (fb))
@@ -1667,7 +1649,7 @@ See `default-toolbar-height' for more information.
   fb = Fcons (Fcons (list1 (Qx), make_int (DEFAULT_TOOLBAR_WIDTH)), fb);
 #endif
 #ifdef HAVE_MS_WINDOWS
-  fb = Fcons (Fcons (list1 (Qmswindows), 
+  fb = Fcons (Fcons (list1 (Qmswindows),
                     make_int (MSWINDOWS_DEFAULT_TOOLBAR_WIDTH)), fb);
 #endif
   if (!NILP (fb))
@@ -1703,11 +1685,9 @@ the value in a window domain will not.
 */ );
   Vdefault_toolbar_border_width = Fmake_specifier (Qnatnum);
   set_specifier_caching (Vdefault_toolbar_border_width,
-                        slot_offset (struct window,
-                                     default_toolbar_border_width),
+                        offsetof (struct window, default_toolbar_border_width),
                         default_toolbar_border_width_changed_in_window,
-                        slot_offset (struct frame,
-                                     default_toolbar_border_width),
+                        offsetof (struct frame, default_toolbar_border_width),
                         default_toolbar_border_width_changed_in_frame);
 
   DEFVAR_SPECIFIER ("top-toolbar-border-width",
@@ -1719,11 +1699,11 @@ See `default-toolbar-height' for more information.
 */ );
   Vtoolbar_border_width[TOP_TOOLBAR] = Fmake_specifier (Qnatnum);
   set_specifier_caching (Vtoolbar_border_width[TOP_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar_border_width[TOP_TOOLBAR]),
+                        offsetof (struct window,
+                                  toolbar_border_width[TOP_TOOLBAR]),
                         toolbar_geometry_changed_in_window,
-                        slot_offset (struct frame,
-                                     toolbar_border_width[TOP_TOOLBAR]),
+                        offsetof (struct frame,
+                                  toolbar_border_width[TOP_TOOLBAR]),
                         frame_size_slipped);
 
   DEFVAR_SPECIFIER ("bottom-toolbar-border-width",
@@ -1735,11 +1715,11 @@ See `default-toolbar-height' for more information.
 */ );
   Vtoolbar_border_width[BOTTOM_TOOLBAR] = Fmake_specifier (Qnatnum);
   set_specifier_caching (Vtoolbar_border_width[BOTTOM_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar_border_width[BOTTOM_TOOLBAR]),
+                        offsetof (struct window,
+                                  toolbar_border_width[BOTTOM_TOOLBAR]),
                         toolbar_geometry_changed_in_window,
-                        slot_offset (struct frame,
-                                     toolbar_border_width[BOTTOM_TOOLBAR]),
+                        offsetof (struct frame,
+                                  toolbar_border_width[BOTTOM_TOOLBAR]),
                         frame_size_slipped);
 
   DEFVAR_SPECIFIER ("left-toolbar-border-width",
@@ -1751,11 +1731,11 @@ See `default-toolbar-height' for more information.
 */ );
   Vtoolbar_border_width[LEFT_TOOLBAR] = Fmake_specifier (Qnatnum);
   set_specifier_caching (Vtoolbar_border_width[LEFT_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar_border_width[LEFT_TOOLBAR]),
+                        offsetof (struct window,
+                                  toolbar_border_width[LEFT_TOOLBAR]),
                         toolbar_geometry_changed_in_window,
-                        slot_offset (struct frame,
-                                     toolbar_border_width[LEFT_TOOLBAR]),
+                        offsetof (struct frame,
+                                  toolbar_border_width[LEFT_TOOLBAR]),
                         frame_size_slipped);
 
   DEFVAR_SPECIFIER ("right-toolbar-border-width",
@@ -1767,11 +1747,11 @@ See `default-toolbar-height' for more information.
 */ );
   Vtoolbar_border_width[RIGHT_TOOLBAR] = Fmake_specifier (Qnatnum);
   set_specifier_caching (Vtoolbar_border_width[RIGHT_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar_border_width[RIGHT_TOOLBAR]),
+                        offsetof (struct window,
+                                  toolbar_border_width[RIGHT_TOOLBAR]),
                         toolbar_geometry_changed_in_window,
-                        slot_offset (struct frame,
-                                     toolbar_border_width[RIGHT_TOOLBAR]),
+                        offsetof (struct frame,
+                                  toolbar_border_width[RIGHT_TOOLBAR]),
                         frame_size_slipped);
 
   fb = Qnil;
@@ -1815,11 +1795,9 @@ visibility specifiers have a fallback value of true.
 */ );
   Vdefault_toolbar_visible_p = Fmake_specifier (Qboolean);
   set_specifier_caching (Vdefault_toolbar_visible_p,
-                        slot_offset (struct window,
-                                     default_toolbar_visible_p),
+                        offsetof (struct window, default_toolbar_visible_p),
                         default_toolbar_visible_p_changed_in_window,
-                        slot_offset (struct frame,
-                                     default_toolbar_visible_p),
+                        offsetof (struct frame, default_toolbar_visible_p),
                         default_toolbar_visible_p_changed_in_frame);
 
   DEFVAR_SPECIFIER ("top-toolbar-visible-p",
@@ -1831,11 +1809,11 @@ See `default-toolbar-visible-p' for more information.
 */ );
   Vtoolbar_visible_p[TOP_TOOLBAR] = Fmake_specifier (Qboolean);
   set_specifier_caching (Vtoolbar_visible_p[TOP_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar_visible_p[TOP_TOOLBAR]),
+                        offsetof (struct window,
+                                  toolbar_visible_p[TOP_TOOLBAR]),
                         toolbar_geometry_changed_in_window,
-                        slot_offset (struct frame,
-                                     toolbar_visible_p[TOP_TOOLBAR]),
+                        offsetof (struct frame,
+                                  toolbar_visible_p[TOP_TOOLBAR]),
                         frame_size_slipped);
 
   DEFVAR_SPECIFIER ("bottom-toolbar-visible-p",
@@ -1847,11 +1825,11 @@ See `default-toolbar-visible-p' for more information.
 */ );
   Vtoolbar_visible_p[BOTTOM_TOOLBAR] = Fmake_specifier (Qboolean);
   set_specifier_caching (Vtoolbar_visible_p[BOTTOM_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar_visible_p[BOTTOM_TOOLBAR]),
+                        offsetof (struct window,
+                                  toolbar_visible_p[BOTTOM_TOOLBAR]),
                         toolbar_geometry_changed_in_window,
-                        slot_offset (struct frame,
-                                     toolbar_visible_p[BOTTOM_TOOLBAR]),
+                        offsetof (struct frame,
+                                  toolbar_visible_p[BOTTOM_TOOLBAR]),
                         frame_size_slipped);
 
   DEFVAR_SPECIFIER ("left-toolbar-visible-p",
@@ -1863,11 +1841,11 @@ See `default-toolbar-visible-p' for more information.
 */ );
   Vtoolbar_visible_p[LEFT_TOOLBAR] = Fmake_specifier (Qboolean);
   set_specifier_caching (Vtoolbar_visible_p[LEFT_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar_visible_p[LEFT_TOOLBAR]),
+                        offsetof (struct window,
+                                  toolbar_visible_p[LEFT_TOOLBAR]),
                         toolbar_geometry_changed_in_window,
-                        slot_offset (struct frame,
-                                     toolbar_visible_p[LEFT_TOOLBAR]),
+                        offsetof (struct frame,
+                                  toolbar_visible_p[LEFT_TOOLBAR]),
                         frame_size_slipped);
 
   DEFVAR_SPECIFIER ("right-toolbar-visible-p",
@@ -1879,11 +1857,11 @@ See `default-toolbar-visible-p' for more information.
 */ );
   Vtoolbar_visible_p[RIGHT_TOOLBAR] = Fmake_specifier (Qboolean);
   set_specifier_caching (Vtoolbar_visible_p[RIGHT_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar_visible_p[RIGHT_TOOLBAR]),
+                        offsetof (struct window,
+                                  toolbar_visible_p[RIGHT_TOOLBAR]),
                         toolbar_geometry_changed_in_window,
-                        slot_offset (struct frame,
-                                     toolbar_visible_p[RIGHT_TOOLBAR]),
+                        offsetof (struct frame,
+                                  toolbar_visible_p[RIGHT_TOOLBAR]),
                         frame_size_slipped);
 
   /* initially, top inherits from default; this can be
@@ -1905,8 +1883,7 @@ This is a specifier; use `set-specifier' to change it.
 */ );
   Vtoolbar_buttons_captioned_p = Fmake_specifier (Qboolean);
   set_specifier_caching (Vtoolbar_buttons_captioned_p,
-                        slot_offset (struct window,
-                                     toolbar_buttons_captioned_p),
+                        offsetof (struct window, toolbar_buttons_captioned_p),
                         toolbar_buttons_captioned_p_changed,
                         0, 0);
   set_specifier_fallback (Vtoolbar_buttons_captioned_p,