use vectors for symbol slots
[bpt/emacs.git] / src / frame.c
index e75a74b..bb10ef9 100644 (file)
@@ -50,6 +50,9 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 #include "msdos.h"
 #include "dosfns.h"
 #endif
+#ifdef USE_X_TOOLKIT
+#include "widget.h"
+#endif
 
 #ifdef HAVE_NS
 Lisp_Object Qns_parse_geometry;
@@ -162,19 +165,16 @@ decode_any_frame (register Lisp_Object frame)
   return XFRAME (frame);
 }
 
+#ifdef HAVE_WINDOW_SYSTEM
+
 bool
 window_system_available (struct frame *f)
 {
-  if (f)
-    return FRAME_WINDOW_P (f) || FRAME_MSDOS_P (f);
-  else
-#ifdef HAVE_WINDOW_SYSTEM
-    return x_display_list != NULL;
-#else
-    return 0;
-#endif
+  return f ? FRAME_WINDOW_P (f) || FRAME_MSDOS_P (f) : x_display_list != NULL;
 }
 
+#endif /* HAVE_WINDOW_SYSTEM */
+
 struct frame *
 decode_window_system_frame (Lisp_Object frame)
 {
@@ -352,6 +352,9 @@ make_frame (bool mini_p)
   f->line_height = 1;  /* !FRAME_WINDOW_P value.  */
 #ifdef HAVE_WINDOW_SYSTEM
   f->want_fullscreen = FULLSCREEN_NONE;
+#if ! defined (USE_GTK) && ! defined (HAVE_NS)
+  f->last_tool_bar_item = -1;
+#endif
 #endif
 
   root_window = make_window ();
@@ -1557,7 +1560,7 @@ and returns whatever that function returns.  */)
   GCPRO1 (retval);
   if (!NILP (Vmouse_position_function))
     retval = call1 (Vmouse_position_function, retval);
-  RETURN_UNGCPRO (retval);
+  return retval;
 }
 
 DEFUN ("mouse-pixel-position", Fmouse_pixel_position,
@@ -2106,14 +2109,14 @@ store_frame_param (struct frame *f, Lisp_Object prop, Lisp_Object val)
      without messing up the symbol's status.  */
   if (SYMBOLP (prop))
     {
-      struct Lisp_Symbol *sym = XSYMBOL (prop);
+      sym_t sym = XSYMBOL (prop);
     start:
-      switch (sym->redirect)
+      switch (SYMBOL_REDIRECT (sym))
        {
        case SYMBOL_VARALIAS: sym = indirect_variable (sym); goto start;
        case SYMBOL_PLAINVAL: case SYMBOL_FORWARDED: break;
        case SYMBOL_LOCALIZED:
-         { struct Lisp_Buffer_Local_Value *blv = sym->val.blv;
+         { struct Lisp_Buffer_Local_Value *blv = SYMBOL_BLV (sym);
            if (blv->frame_local && blv_found (blv) && XFRAME (blv->where) == f)
              swap_in_global_binding (sym);
            break;
@@ -4520,6 +4523,8 @@ make_monitor_attribute_list (struct MonitorInfo *monitors,
 void
 syms_of_frame (void)
 {
+#include "frame.x"
+
   DEFSYM (Qframep, "framep");
   DEFSYM (Qframe_live_p, "frame-live-p");
   DEFSYM (Qexplicit_name, "explicit-name");
@@ -4765,64 +4770,4 @@ set this option to a non-nil value in your init file.  */);
   frame_resize_pixelwise = 0;
 
   staticpro (&Vframe_list);
-
-  defsubr (&Sframep);
-  defsubr (&Sframe_live_p);
-  defsubr (&Swindow_system);
-  defsubr (&Smake_terminal_frame);
-  defsubr (&Shandle_switch_frame);
-  defsubr (&Sselect_frame);
-  defsubr (&Sselected_frame);
-  defsubr (&Sframe_list);
-  defsubr (&Snext_frame);
-  defsubr (&Sprevious_frame);
-  defsubr (&Slast_nonminibuf_frame);
-  defsubr (&Sdelete_frame);
-  defsubr (&Smouse_position);
-  defsubr (&Smouse_pixel_position);
-  defsubr (&Sset_mouse_position);
-  defsubr (&Sset_mouse_pixel_position);
-#if 0
-  defsubr (&Sframe_configuration);
-  defsubr (&Srestore_frame_configuration);
-#endif
-  defsubr (&Smake_frame_visible);
-  defsubr (&Smake_frame_invisible);
-  defsubr (&Siconify_frame);
-  defsubr (&Sframe_visible_p);
-  defsubr (&Svisible_frame_list);
-  defsubr (&Sraise_frame);
-  defsubr (&Slower_frame);
-  defsubr (&Sx_focus_frame);
-  defsubr (&Sredirect_frame_focus);
-  defsubr (&Sframe_focus);
-  defsubr (&Sframe_parameters);
-  defsubr (&Sframe_parameter);
-  defsubr (&Smodify_frame_parameters);
-  defsubr (&Sframe_char_height);
-  defsubr (&Sframe_char_width);
-  defsubr (&Sframe_pixel_height);
-  defsubr (&Sframe_pixel_width);
-  defsubr (&Sframe_text_cols);
-  defsubr (&Sframe_text_lines);
-  defsubr (&Sframe_total_cols);
-  defsubr (&Sframe_text_width);
-  defsubr (&Sframe_text_height);
-  defsubr (&Sscroll_bar_width);
-  defsubr (&Sfringe_width);
-  defsubr (&Sborder_width);
-  defsubr (&Sright_divider_width);
-  defsubr (&Sbottom_divider_width);
-  defsubr (&Stool_bar_pixel_width);
-  defsubr (&Sset_frame_height);
-  defsubr (&Sset_frame_width);
-  defsubr (&Sset_frame_size);
-  defsubr (&Sset_frame_position);
-  defsubr (&Sframe_pointer_visible_p);
-
-#ifdef HAVE_WINDOW_SYSTEM
-  defsubr (&Sx_get_resource);
-  defsubr (&Sx_parse_geometry);
-#endif
-
 }