X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/0ed082fedf31241b54ef2294c29c4880a7472e0e..40be44e2a95cd703e49022c8f8aa0ce5b9b29ea6:/src/frame.c diff --git a/src/frame.c b/src/frame.c index 0cd7377ece..56e0e7ec91 100644 --- a/src/frame.c +++ b/src/frame.c @@ -1,6 +1,6 @@ /* Generic frame functions. - Copyright (C) 1993, 1994, 1995, 1997, 1999, 2000, 2001, 2002, 2003, - 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. + +Copyright (C) 1993-1995, 1997, 1999-2011 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -21,6 +21,8 @@ along with GNU Emacs. If not, see . */ #include #include +#include +#include #include #include "lisp.h" #include "character.h" @@ -53,24 +55,8 @@ along with GNU Emacs. If not, see . */ #endif -/* If we shall make pointer invisible when typing or not. */ -Lisp_Object Vmake_pointer_invisible; - #ifdef HAVE_WINDOW_SYSTEM -/* The name we're using in resource queries. Most often "emacs". */ - -Lisp_Object Vx_resource_name; - -/* The application class we're using in resource queries. - Normally "Emacs". */ - -Lisp_Object Vx_resource_class; - -/* Lower limit value of the frame opacity (alpha transparency). */ - -Lisp_Object Vframe_alpha_lower_limit; - #endif #ifdef HAVE_NS @@ -119,8 +105,7 @@ Lisp_Object Qparent_id; Lisp_Object Qtitle, Qname; Lisp_Object Qexplicit_name; Lisp_Object Qunsplittable; -Lisp_Object Qmenu_bar_lines, Qtool_bar_lines; -Lisp_Object Vmenu_bar_mode, Vtool_bar_mode; +Lisp_Object Qmenu_bar_lines, Qtool_bar_lines, Qtool_bar_position; Lisp_Object Qleft_fringe, Qright_fringe; Lisp_Object Qbuffer_predicate, Qbuffer_list, Qburied_buffer_list; Lisp_Object Qtty_color_mode; @@ -133,14 +118,8 @@ Lisp_Object Qalpha; Lisp_Object Qface_set_after_frame_default; -Lisp_Object Vterminal_frame; -Lisp_Object Vdefault_frame_alist; -Lisp_Object Vdefault_frame_scroll_bars; -Lisp_Object Vmouse_position_function; -Lisp_Object Vmouse_highlight; -static Lisp_Object Vdelete_frame_functions, Qdelete_frame_functions; +static Lisp_Object Qdelete_frame_functions; -int focus_follows_mouse; static void set_menu_bar_lines_1 (Lisp_Object window, int n) @@ -198,21 +177,15 @@ set_menu_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) Lisp_Object Vframe_list; -extern Lisp_Object Vminibuffer_list; -extern Lisp_Object get_minibuffer (int); -extern Lisp_Object Fhandle_switch_frame (Lisp_Object event); -extern Lisp_Object Fredirect_frame_focus (Lisp_Object frame, Lisp_Object focus_frame); -extern Lisp_Object x_get_focus_frame (struct frame *frame); -extern Lisp_Object QCname, Qfont_param; - DEFUN ("framep", Fframep, Sframep, 1, 1, 0, doc: /* Return non-nil if OBJECT is a frame. -Value is t for a termcap frame (a character-only terminal), -`x' for an Emacs frame that is really an X window, -`w32' for an Emacs frame that is a window on MS-Windows display, -`ns' for an Emacs frame on a GNUstep or Macintosh Cocoa display, -`pc' for a direct-write MS-DOS frame. +Value is: + t for a termcap frame (a character-only terminal), + 'x' for an Emacs frame that is really an X window, + 'w32' for an Emacs frame that is a window on MS-Windows display, + 'ns' for an Emacs frame on a GNUstep or Macintosh Cocoa display, + 'pc' for a direct-write MS-DOS frame. See also `frame-live-p'. */) (Lisp_Object object) { @@ -254,10 +227,18 @@ return values. */) DEFUN ("window-system", Fwindow_system, Swindow_system, 0, 1, 0, doc: /* The name of the window system that FRAME is displaying through. -The value is a symbol---for instance, 'x' for X windows. -The value is nil if Emacs is using a text-only terminal. - -FRAME defaults to the currently selected frame. */) +The value is a symbol: + nil for a termcap frame (a character-only terminal), + 'x' for an Emacs frame that is really an X window, + 'w32' for an Emacs frame that is a window on MS-Windows display, + 'ns' for an Emacs frame on a GNUstep or Macintosh Cocoa display, + 'pc' for a direct-write MS-DOS frame. + +FRAME defaults to the currently selected frame. + +Use of this function as a predicate is deprecated. Instead, +use `display-graphic-p' or any of the other `display-*-p' +predicates which report frame's specific UI-related capabilities. */) (Lisp_Object frame) { Lisp_Object type; @@ -323,6 +304,7 @@ make_frame (int mini_p) f->menu_bar_window = Qnil; f->tool_bar_window = Qnil; f->tool_bar_items = Qnil; + f->tool_bar_position = Qtop; f->desired_tool_bar_string = f->current_tool_bar_string = Qnil; f->n_tool_bar_items = 0; f->left_fringe_width = f->right_fringe_width = 0; @@ -446,20 +428,20 @@ make_frame_without_minibuffer (register Lisp_Object mini_window, KBOARD *kb, Lis if (NILP (mini_window)) { /* Use default-minibuffer-frame if possible. */ - if (!FRAMEP (kb->Vdefault_minibuffer_frame) - || ! FRAME_LIVE_P (XFRAME (kb->Vdefault_minibuffer_frame))) + if (!FRAMEP (KVAR (kb, Vdefault_minibuffer_frame)) + || ! FRAME_LIVE_P (XFRAME (KVAR (kb, Vdefault_minibuffer_frame)))) { Lisp_Object frame_dummy; XSETFRAME (frame_dummy, f); GCPRO1 (frame_dummy); /* If there's no minibuffer frame to use, create one. */ - kb->Vdefault_minibuffer_frame = + KVAR (kb, Vdefault_minibuffer_frame) = call1 (intern ("make-initial-minibuffer-frame"), display); UNGCPRO; } - mini_window = XFRAME (kb->Vdefault_minibuffer_frame)->minibuffer_window; + mini_window = XFRAME (KVAR (kb, Vdefault_minibuffer_frame))->minibuffer_window; } f->minibuffer_window = mini_window; @@ -711,7 +693,7 @@ affects all frames on the same terminal device. */) if (!NILP (tty)) { name = (char *) alloca (SBYTES (tty) + 1); - strncpy (name, SDATA (tty), SBYTES (tty)); + strncpy (name, SSDATA (tty), SBYTES (tty)); name[SBYTES (tty)] = 0; } @@ -722,7 +704,7 @@ affects all frames on the same terminal device. */) if (!NILP (tty_type)) { type = (char *) alloca (SBYTES (tty_type) + 1); - strncpy (type, SDATA (tty_type), SBYTES (tty_type)); + strncpy (type, SSDATA (tty_type), SBYTES (tty_type)); type[SBYTES (tty_type)] = 0; } @@ -907,7 +889,7 @@ to that frame. */) (Lisp_Object event) { /* Preserve prefix arg that the command loop just cleared. */ - current_kboard->Vprefix_arg = Vcurrent_prefix_arg; + KVAR (current_kboard, Vprefix_arg) = Vcurrent_prefix_arg; call1 (Vrun_hooks, Qmouse_leave_buffer_hook); return do_switch_frame (event, 0, 0, Qnil); } @@ -1280,8 +1262,6 @@ other_visible_frames (FRAME_PTR f) return 1; } -extern Lisp_Object Qrun_hook_with_args; - /* Delete FRAME. When FORCE equals Qnoelisp, delete FRAME unconditionally. x_connection_closed and delete_terminal use this. Any other value of FORCE implements the semantics @@ -1546,7 +1526,7 @@ delete_frame (Lisp_Object frame, Lisp_Object force) /* If we've deleted this keyboard's default_minibuffer_frame, try to find another one. Prefer minibuffer-only frames, but also notice frames with other windows. */ - if (kb != NULL && EQ (frame, kb->Vdefault_minibuffer_frame)) + if (kb != NULL && EQ (frame, KVAR (kb, Vdefault_minibuffer_frame))) { Lisp_Object frames; @@ -1595,11 +1575,11 @@ delete_frame (Lisp_Object frame, Lisp_Object force) if (NILP (frame_with_minibuf)) abort (); - kb->Vdefault_minibuffer_frame = frame_with_minibuf; + KVAR (kb, Vdefault_minibuffer_frame) = frame_with_minibuf; } else /* No frames left on this kboard--say no minibuffer either. */ - kb->Vdefault_minibuffer_frame = Qnil; + KVAR (kb, Vdefault_minibuffer_frame) = Qnil; } /* Cause frame titles to update--necessary if we now have just one frame. */ @@ -1837,7 +1817,7 @@ make_frame_visible_1 (Lisp_Object window) w = XWINDOW (window); if (!NILP (w->buffer)) - XBUFFER (w->buffer)->display_time = Fcurrent_time (); + BVAR (XBUFFER (w->buffer), display_time) = Fcurrent_time (); if (!NILP (w->vchild)) make_frame_visible_1 (w->vchild); @@ -2169,10 +2149,13 @@ frame_name_fnn_p (char *str, EMACS_INT len) if (len > 1 && str[0] == 'F') { char *end_ptr; + long int n; + errno = 0; + n = strtol (str + 1, &end_ptr, 10); - strtol (str + 1, &end_ptr, 10); - - if (end_ptr == str + len) + if (end_ptr == str + len + && INT_MIN <= n && n <= INT_MAX + && ((LONG_MIN < n && n < LONG_MAX) || errno != ERANGE)) return 1; } return 0; @@ -2193,7 +2176,7 @@ set_term_frame_name (struct frame *f, Lisp_Object name) /* Check for no change needed in this very common case before we do any consing. */ - if (frame_name_fnn_p (SDATA (f->name), + if (frame_name_fnn_p (SSDATA (f->name), SBYTES (f->name))) return; @@ -2211,7 +2194,7 @@ set_term_frame_name (struct frame *f, Lisp_Object name) /* Don't allow the user to set the frame name to F, so it doesn't clash with the names we generate for terminal frames. */ - if (frame_name_fnn_p (SDATA (name), SBYTES (name))) + if (frame_name_fnn_p (SSDATA (name), SBYTES (name))) error ("Frame names of the form F are usurped by Emacs"); } @@ -2338,11 +2321,11 @@ If FRAME is omitted, return information on the currently selected frame. */) elt = Fassq (Qforeground_color, alist); if (CONSP (elt) && STRINGP (XCDR (elt))) { - if (strncmp (SDATA (XCDR (elt)), + if (strncmp (SSDATA (XCDR (elt)), unspecified_bg, SCHARS (XCDR (elt))) == 0) store_in_alist (&alist, Qforeground_color, tty_color_name (f, bg)); - else if (strncmp (SDATA (XCDR (elt)), + else if (strncmp (SSDATA (XCDR (elt)), unspecified_fg, SCHARS (XCDR (elt))) == 0) store_in_alist (&alist, Qforeground_color, tty_color_name (f, fg)); @@ -2352,11 +2335,11 @@ If FRAME is omitted, return information on the currently selected frame. */) elt = Fassq (Qbackground_color, alist); if (CONSP (elt) && STRINGP (XCDR (elt))) { - if (strncmp (SDATA (XCDR (elt)), + if (strncmp (SSDATA (XCDR (elt)), unspecified_fg, SCHARS (XCDR (elt))) == 0) store_in_alist (&alist, Qbackground_color, tty_color_name (f, fg)); - else if (strncmp (SDATA (XCDR (elt)), + else if (strncmp (SSDATA (XCDR (elt)), unspecified_bg, SCHARS (XCDR (elt))) == 0) store_in_alist (&alist, Qbackground_color, tty_color_name (f, bg)); @@ -2445,7 +2428,7 @@ If FRAME is nil, describe the currently selected frame. */) if (EQ (parameter, Qbackground_color)) { - color_name = SDATA (value); + color_name = SSDATA (value); csz = SCHARS (value); if (strncmp (color_name, unspecified_bg, csz) == 0) value = tty_color_name (f, FRAME_BACKGROUND_PIXEL (f)); @@ -2454,7 +2437,7 @@ If FRAME is nil, describe the currently selected frame. */) } else if (EQ (parameter, Qforeground_color)) { - color_name = SDATA (value); + color_name = SSDATA (value); csz = SCHARS (value); if (strncmp (color_name, unspecified_fg, csz) == 0) value = tty_color_name (f, FRAME_FOREGROUND_PIXEL (f)); @@ -2657,6 +2640,28 @@ If FRAME is omitted, the selected frame is used. */) #endif return make_number (FRAME_COLS (f)); } + +DEFUN ("tool-bar-pixel-width", Ftool_bar_pixel_width, + Stool_bar_pixel_width, 0, 1, 0, + doc: /* Return width in pixels of FRAME's tool bar. +The result is greater than zero only when the tool bar is on the left +or right side of FRAME. If FRAME is omitted, the selected frame is +used. */) + (Lisp_Object frame) +{ + struct frame *f; + + if (NILP (frame)) + frame = selected_frame; + CHECK_FRAME (frame); + f = XFRAME (frame); + +#ifdef FRAME_TOOLBAR_WIDTH + if (FRAME_WINDOW_P (f)) + return make_number (FRAME_TOOLBAR_WIDTH (f)); +#endif + return make_number (0); +} DEFUN ("set-frame-height", Fset_frame_height, Sset_frame_height, 2, 3, 0, doc: /* Specify that the frame FRAME has LINES lines. @@ -2778,11 +2783,11 @@ the rightmost or bottommost possible position (that stays within the screen). * that is an index in this table. */ struct frame_parm_table { - char *name; + const char *name; Lisp_Object *variable; }; -static struct frame_parm_table frame_parms[] = +static const struct frame_parm_table frame_parms[] = { {"auto-raise", &Qauto_raise}, {"auto-lower", &Qauto_lower}, @@ -2816,13 +2821,11 @@ static struct frame_parm_table frame_parms[] = {"font-backend", &Qfont_backend}, {"alpha", &Qalpha}, {"sticky", &Qsticky}, + {"tool-bar-position", &Qtool_bar_position}, }; #ifdef HAVE_WINDOW_SYSTEM -extern Lisp_Object Qbox; -extern Lisp_Object Qtop; - /* Calculate fullscreen size. Return in *TOP_POS and *LEFT_POS the wanted positions of the WM window (not Emacs window). Return in *WIDTH and *HEIGHT the wanted width and height of Emacs @@ -3209,6 +3212,7 @@ x_report_frame_params (struct frame *f, Lisp_Object *alistptr) XSETFASTINT (tem, FRAME_X_OUTPUT (f)->parent_desc); store_in_alist (alistptr, Qexplicit_name, (f->explicit_name ? Qt : Qnil)); store_in_alist (alistptr, Qparent_id, tem); + store_in_alist (alistptr, Qtool_bar_position, f->tool_bar_position); } @@ -3287,7 +3291,7 @@ x_set_screen_gamma (struct frame *f, Lisp_Object new_value, Lisp_Object old_valu void x_set_font (struct frame *f, Lisp_Object arg, Lisp_Object oldval) { - Lisp_Object frame, font_object, font_param = Qnil; + Lisp_Object font_object, font_param = Qnil; int fontset = -1; /* Set the frame parameter back to the old value because we may @@ -3303,16 +3307,16 @@ x_set_font (struct frame *f, Lisp_Object arg, Lisp_Object oldval) fontset = fs_query_fontset (arg, 0); if (fontset < 0) { - font_object = font_open_by_name (f, SDATA (arg)); + font_object = font_open_by_name (f, SSDATA (arg)); if (NILP (font_object)) - error ("Font `%s' is not defined", SDATA (arg)); + error ("Font `%s' is not defined", SSDATA (arg)); arg = AREF (font_object, FONT_NAME_INDEX); } else if (fontset > 0) { Lisp_Object ascii_font = fontset_ascii (fontset); - font_object = font_open_by_name (f, SDATA (ascii_font)); + font_object = font_open_by_name (f, SSDATA (ascii_font)); if (NILP (font_object)) error ("Font `%s' is not defined", SDATA (arg)); arg = AREF (font_object, FONT_NAME_INDEX); @@ -3390,7 +3394,7 @@ x_set_font_backend (struct frame *f, Lisp_Object new_value, Lisp_Object old_valu char *p0, *p1; CHECK_STRING (new_value); - p0 = p1 = SDATA (new_value); + p0 = p1 = SSDATA (new_value); new_value = Qnil; while (*p0) { @@ -3441,6 +3445,11 @@ void x_set_fringe_width (struct frame *f, Lisp_Object new_value, Lisp_Object old_value) { compute_fringe_widths (f, 1); +#ifdef HAVE_X_WINDOWS + /* Must adjust this so window managers report correct number of columns. */ + if (FRAME_X_WINDOW (f) != 0) + x_wm_set_size_hint (f, 0, 0); +#endif } void @@ -3670,7 +3679,6 @@ validate_x_resource_name (void) if (STRINGP (Vx_resource_name)) { unsigned char *p = SDATA (Vx_resource_name); - int i; len = SBYTES (Vx_resource_name); @@ -3721,7 +3729,7 @@ validate_x_resource_name (void) } -extern char *x_get_string_resource (XrmDatabase, char *, char *); +extern char *x_get_string_resource (XrmDatabase, const char *, const char *); extern Display_Info *check_x_display_info (Lisp_Object); @@ -3763,23 +3771,23 @@ xrdb_get_resource (XrmDatabase rdb, Lisp_Object attribute, Lisp_Object class, Li /* Start with emacs.FRAMENAME for the name (the specific one) and with `Emacs' for the class key (the general one). */ - strcpy (name_key, SDATA (Vx_resource_name)); - strcpy (class_key, SDATA (Vx_resource_class)); + strcpy (name_key, SSDATA (Vx_resource_name)); + strcpy (class_key, SSDATA (Vx_resource_class)); strcat (class_key, "."); - strcat (class_key, SDATA (class)); + strcat (class_key, SSDATA (class)); if (!NILP (component)) { strcat (class_key, "."); - strcat (class_key, SDATA (subclass)); + strcat (class_key, SSDATA (subclass)); strcat (name_key, "."); - strcat (name_key, SDATA (component)); + strcat (name_key, SSDATA (component)); } strcat (name_key, "."); - strcat (name_key, SDATA (attribute)); + strcat (name_key, SSDATA (attribute)); value = x_get_string_resource (rdb, name_key, class_key); @@ -3823,7 +3831,7 @@ display_x_get_resource (Display_Info *dpyinfo, Lisp_Object attribute, Lisp_Objec /* Used when C code wants a resource value. */ /* Called from oldXMenu/Create.c. */ char * -x_get_resource_string (char *attribute, char *class) +x_get_resource_string (const char *attribute, const char *class) { char *name_key; char *class_key; @@ -3856,7 +3864,8 @@ x_get_resource_string (char *attribute, char *class) and don't let it get stored in any Lisp-visible variables! */ Lisp_Object -x_get_arg (Display_Info *dpyinfo, Lisp_Object alist, Lisp_Object param, char *attribute, char *class, enum resource_types type) +x_get_arg (Display_Info *dpyinfo, Lisp_Object alist, Lisp_Object param, + const char *attribute, const char *class, enum resource_types type) { register Lisp_Object tem; @@ -3895,25 +3904,25 @@ x_get_arg (Display_Info *dpyinfo, Lisp_Object alist, Lisp_Object param, char *at switch (type) { case RES_TYPE_NUMBER: - return make_number (atoi (SDATA (tem))); + return make_number (atoi (SSDATA (tem))); case RES_TYPE_BOOLEAN_NUMBER: - if (!strcmp (SDATA (tem), "on") - || !strcmp (SDATA (tem), "true")) + if (!strcmp (SSDATA (tem), "on") + || !strcmp (SSDATA (tem), "true")) return make_number (1); - return make_number (atoi (SDATA (tem))); + return make_number (atoi (SSDATA (tem))); break; case RES_TYPE_FLOAT: - return make_float (atof (SDATA (tem))); + return make_float (atof (SSDATA (tem))); case RES_TYPE_BOOLEAN: tem = Fdowncase (tem); - if (!strcmp (SDATA (tem), "on") + if (!strcmp (SSDATA (tem), "on") #ifdef HAVE_NS - || !strcmp(SDATA(tem), "yes") + || !strcmp (SSDATA (tem), "yes") #endif - || !strcmp (SDATA (tem), "true")) + || !strcmp (SSDATA (tem), "true")) return Qt; else return Qnil; @@ -3927,17 +3936,17 @@ x_get_arg (Display_Info *dpyinfo, Lisp_Object alist, Lisp_Object param, char *at { Lisp_Object lower; lower = Fdowncase (tem); - if (!strcmp (SDATA (lower), "on") + if (!strcmp (SSDATA (lower), "on") #ifdef HAVE_NS - || !strcmp(SDATA(lower), "yes") + || !strcmp (SSDATA (lower), "yes") #endif - || !strcmp (SDATA (lower), "true")) + || !strcmp (SSDATA (lower), "true")) return Qt; - else if (!strcmp (SDATA (lower), "off") + else if (!strcmp (SSDATA (lower), "off") #ifdef HAVE_NS - || !strcmp(SDATA(lower), "no") + || !strcmp (SSDATA (lower), "no") #endif - || !strcmp (SDATA (lower), "false")) + || !strcmp (SSDATA (lower), "false")) return Qnil; else return Fintern (tem, Qnil); @@ -3953,8 +3962,10 @@ x_get_arg (Display_Info *dpyinfo, Lisp_Object alist, Lisp_Object param, char *at return Fcdr (tem); } -Lisp_Object -x_frame_get_arg (struct frame *f, Lisp_Object alist, Lisp_Object param, char *attribute, char *class, enum resource_types type) +static Lisp_Object +x_frame_get_arg (struct frame *f, Lisp_Object alist, Lisp_Object param, + const char *attribute, const char *class, + enum resource_types type) { return x_get_arg (FRAME_X_DISPLAY_INFO (f), alist, param, attribute, class, type); @@ -3963,7 +3974,10 @@ x_frame_get_arg (struct frame *f, Lisp_Object alist, Lisp_Object param, char *at /* Like x_frame_get_arg, but also record the value in f->param_alist. */ Lisp_Object -x_frame_get_and_record_arg (struct frame *f, Lisp_Object alist, Lisp_Object param, char *attribute, char *class, enum resource_types type) +x_frame_get_and_record_arg (struct frame *f, Lisp_Object alist, + Lisp_Object param, + const char *attribute, const char *class, + enum resource_types type) { Lisp_Object value; @@ -3983,7 +3997,9 @@ x_frame_get_and_record_arg (struct frame *f, Lisp_Object alist, Lisp_Object para If that is not found either, use the value DEFLT. */ Lisp_Object -x_default_parameter (struct frame *f, Lisp_Object alist, Lisp_Object prop, Lisp_Object deflt, char *xprop, char *xclass, enum resource_types type) +x_default_parameter (struct frame *f, Lisp_Object alist, Lisp_Object prop, + Lisp_Object deflt, const char *xprop, const char *xclass, + enum resource_types type) { Lisp_Object tem; @@ -4024,7 +4040,7 @@ On Nextstep, this just calls `ns-parse-geometry'. */) CHECK_STRING (string); - geometry = XParseGeometry ((char *) SDATA (string), + geometry = XParseGeometry (SSDATA (string), &x, &y, &width, &height); result = Qnil; if (geometry & XValue) @@ -4289,6 +4305,20 @@ frame_make_pointer_visible (void) } } +DEFUN ("frame-pointer-visible-p", Fframe_pointer_visible_p, + Sframe_pointer_visible_p, 0, 1, 0, + doc: /* Return t if the mouse pointer displayed on FRAME is visible. +Otherwise it returns nil. FRAME omitted or nil means the +selected frame. This is useful when `make-pointer-invisible' is set. */) + (Lisp_Object frame) +{ + if (NILP (frame)) + frame = selected_frame; + + CHECK_FRAME (frame); + + return (XFRAME (frame)->pointer_invisible ? Qnil : Qt); +} /*********************************************************************** @@ -4414,7 +4444,7 @@ syms_of_frame (void) } #ifdef HAVE_WINDOW_SYSTEM - DEFVAR_LISP ("x-resource-name", &Vx_resource_name, + DEFVAR_LISP ("x-resource-name", Vx_resource_name, doc: /* The name Emacs uses to look up X resources. `x-get-resource' uses this as the first component of the instance name when requesting resource values. @@ -4426,7 +4456,7 @@ It may be useful to bind this variable locally around a call to `x-get-resource'. See also the variable `x-resource-class'. */); Vx_resource_name = Qnil; - DEFVAR_LISP ("x-resource-class", &Vx_resource_class, + DEFVAR_LISP ("x-resource-class", Vx_resource_class, doc: /* The class Emacs uses to look up X resources. `x-get-resource' uses this as the first component of the instance class when requesting resource values. @@ -4438,7 +4468,7 @@ but binding this variable locally around a call to `x-get-resource' is a reasonable practice. See also the variable `x-resource-name'. */); Vx_resource_class = build_string (EMACS_CLASS); - DEFVAR_LISP ("frame-alpha-lower-limit", &Vframe_alpha_lower_limit, + DEFVAR_LISP ("frame-alpha-lower-limit", Vframe_alpha_lower_limit, doc: /* The lower limit of the frame opacity (alpha transparency). The value should range from 0 (invisible) to 100 (completely opaque). You can also use a floating number between 0.0 and 1.0. @@ -4446,7 +4476,7 @@ The default is 20. */); Vframe_alpha_lower_limit = make_number (20); #endif - DEFVAR_LISP ("default-frame-alist", &Vdefault_frame_alist, + DEFVAR_LISP ("default-frame-alist", Vdefault_frame_alist, doc: /* Alist of default values for frame creation. These may be set in your init file, like this: (setq default-frame-alist '((width . 80) (height . 55) (menu-bar-lines . 1))) @@ -4461,7 +4491,7 @@ The `menu-bar-lines' element of the list controls whether new frames Setting this variable does not affect existing frames, only new ones. */); Vdefault_frame_alist = Qnil; - DEFVAR_LISP ("default-frame-scroll-bars", &Vdefault_frame_scroll_bars, + DEFVAR_LISP ("default-frame-scroll-bars", Vdefault_frame_scroll_bars, doc: /* Default position of scroll bars on this window-system. */); #ifdef HAVE_WINDOW_SYSTEM #if defined(HAVE_NTGUI) || defined(NS_IMPL_COCOA) || (defined(USE_GTK) && defined(USE_TOOLKIT_SCROLL_BARS)) @@ -4475,10 +4505,10 @@ Setting this variable does not affect existing frames, only new ones. */); Vdefault_frame_scroll_bars = Qnil; #endif - DEFVAR_LISP ("terminal-frame", &Vterminal_frame, + DEFVAR_LISP ("terminal-frame", Vterminal_frame, doc: /* The initial frame-object, which represents Emacs's stdout. */); - DEFVAR_LISP ("mouse-position-function", &Vmouse_position_function, + DEFVAR_LISP ("mouse-position-function", Vmouse_position_function, doc: /* If non-nil, function to transform normal value of `mouse-position'. `mouse-position' calls this function, passing its usual return value as argument, and returns whatever this function returns. @@ -4486,7 +4516,7 @@ This abnormal hook exists for the benefit of packages like `xt-mouse.el' which need to do mouse handling at the Lisp level. */); Vmouse_position_function = Qnil; - DEFVAR_LISP ("mouse-highlight", &Vmouse_highlight, + DEFVAR_LISP ("mouse-highlight", Vmouse_highlight, doc: /* If non-nil, clickable text is highlighted when mouse is over it. If the value is an integer, highlighting is only shown after moving the mouse, while keyboard input turns off the highlight even when the mouse @@ -4494,12 +4524,12 @@ is over the clickable text. However, the mouse shape still indicates when the mouse is over clickable text. */); Vmouse_highlight = Qt; - DEFVAR_LISP ("make-pointer-invisible", &Vmake_pointer_invisible, + DEFVAR_LISP ("make-pointer-invisible", Vmake_pointer_invisible, doc: /* If non-nil, make pointer invisible while typing. The pointer becomes visible again when the mouse is moved. */); Vmake_pointer_invisible = Qt; - DEFVAR_LISP ("delete-frame-functions", &Vdelete_frame_functions, + DEFVAR_LISP ("delete-frame-functions", Vdelete_frame_functions, doc: /* Functions to be run before deleting a frame. The functions are run with one arg, the frame to be deleted. See `delete-frame'. @@ -4512,13 +4542,25 @@ recursively). */); Qdelete_frame_functions = intern_c_string ("delete-frame-functions"); staticpro (&Qdelete_frame_functions); - DEFVAR_LISP ("menu-bar-mode", &Vmenu_bar_mode, - doc: /* Non-nil if Menu-Bar mode is enabled. */); + DEFVAR_LISP ("menu-bar-mode", Vmenu_bar_mode, + doc: /* Non-nil if Menu-Bar mode is enabled. +See the command `menu-bar-mode' for a description of this minor mode. +Setting this variable directly does not take effect; +either customize it (see the info node `Easy Customization') +or call the function `menu-bar-mode'. */); Vmenu_bar_mode = Qt; - DEFVAR_LISP ("tool-bar-mode", &Vtool_bar_mode, - doc: /* Non-nil if Tool-Bar mode is enabled. */); + DEFVAR_LISP ("tool-bar-mode", Vtool_bar_mode, + doc: /* Non-nil if Tool-Bar mode is enabled. +See the command `tool-bar-mode' for a description of this minor mode. +Setting this variable directly does not take effect; +either customize it (see the info node `Easy Customization') +or call the function `tool-bar-mode'. */); +#ifdef HAVE_WINDOW_SYSTEM Vtool_bar_mode = Qt; +#else + Vtool_bar_mode = Qnil; +#endif DEFVAR_KBOARD ("default-minibuffer-frame", Vdefault_minibuffer_frame, doc: /* Minibufferless frames use this frame's minibuffer. @@ -4535,20 +4577,12 @@ displayed. This variable is local to the current terminal and cannot be buffer-local. */); - DEFVAR_BOOL ("focus-follows-mouse", &focus_follows_mouse, + DEFVAR_BOOL ("focus-follows-mouse", focus_follows_mouse, doc: /* Non-nil if window system changes focus when you move the mouse. You should set this variable to tell Emacs how your window manager handles focus, since there is no way in general for Emacs to find out automatically. See also `mouse-autoselect-window'. */); -#ifdef HAVE_WINDOW_SYSTEM -#if defined(HAVE_NTGUI) || defined(HAVE_NS) focus_follows_mouse = 0; -#else - focus_follows_mouse = 1; -#endif -#else - focus_follows_mouse = 0; -#endif staticpro (&Vframe_list); @@ -4593,10 +4627,12 @@ automatically. See also `mouse-autoselect-window'. */); defsubr (&Sframe_char_width); defsubr (&Sframe_pixel_height); defsubr (&Sframe_pixel_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); @@ -4604,6 +4640,3 @@ automatically. See also `mouse-autoselect-window'. */); #endif } - -/* arch-tag: 7dbf2c69-9aad-45f8-8296-db893d6dd039 - (do not change this comment) */