X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/888953f1ca3f5c676b5bf62c4de64825d381d76f..c4e8cde8c6cea5ab85abbac10626bd5c1fe5a6af:/src/frame.c diff --git a/src/frame.c b/src/frame.c index ce48a3f5fb..9c6345a0b4 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, 2003, 2004, 2005 - Free Software Foundation. + Copyright (C) 1993, 1994, 1995, 1997, 1999, 2000, 2001, 2002, 2003, + 2004, 2005 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -16,14 +16,14 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs; see the file COPYING. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ +the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +Boston, MA 02110-1301, USA. */ #include #include #include "lisp.h" -#include "charset.h" +#include "character.h" #ifdef HAVE_X_WINDOWS #include "xterm.h" #endif @@ -399,7 +399,7 @@ make_frame_without_minibuffer (mini_window, kb, display) #ifdef MULTI_KBOARD if (!NILP (mini_window) && XFRAME (XWINDOW (mini_window)->frame)->kboard != kb) - error ("frame and minibuffer must be on the same display"); + error ("Frame and minibuffer must be on the same display"); #endif /* Make a frame containing just a root window. */ @@ -729,7 +729,7 @@ do_switch_frame (frame, track, for_deletion) return frame; } -DEFUN ("select-frame", Fselect_frame, Sselect_frame, 1, 2, "e", +DEFUN ("select-frame", Fselect_frame, Sselect_frame, 1, 1, "e", doc: /* Select the frame FRAME. Subsequent editing commands apply to its selected window. The selection of FRAME lasts until the next time the user does @@ -740,14 +740,14 @@ the command loop, because it still may have the window system's input focus. On a text-only terminal, the next redisplay will display FRAME. This function returns FRAME, or nil if FRAME has been deleted. */) - (frame, no_enter) - Lisp_Object frame, no_enter; + (frame) + Lisp_Object frame; { return do_switch_frame (frame, 1, 0); } -DEFUN ("handle-switch-frame", Fhandle_switch_frame, Shandle_switch_frame, 1, 2, "e", +DEFUN ("handle-switch-frame", Fhandle_switch_frame, Shandle_switch_frame, 1, 1, "e", doc: /* Handle a switch-frame event EVENT. Switch-frame events are usually bound to this function. A switch-frame event tells Emacs that the window manager has requested @@ -756,8 +756,8 @@ This function selects the selected window of the frame of EVENT. If EVENT is frame object, handle it as if it were a switch-frame event to that frame. */) - (event, no_enter) - Lisp_Object event, no_enter; + (event) + Lisp_Object event; { /* Preserve prefix arg that the command loop just cleared. */ current_kboard->Vprefix_arg = Vcurrent_prefix_arg; @@ -765,32 +765,6 @@ to that frame. */) return do_switch_frame (event, 0, 0); } -DEFUN ("ignore-event", Fignore_event, Signore_event, 0, 0, "", - doc: /* Do nothing. -This is a suitable binding for `iconify-frame' and `make-frame-visible'. */) - () -{ - /* Contrary to `handle-switch-frame', `ignore-event' is used from - `special-event-map'. Commands from that map are run in a special - way that automatically preserves the prefix-arg. Restoring - the prefix arg here is not just redundant but harmful: - - C-u C-x v = - - current-prefix-arg is set to non-nil, prefix-arg is set to nil. - - after the first prompt, the exit-minibuffer-hook is run which may - iconify a frame and thus push a `iconify-frame' event. - - after running exit-minibuffer-hook, current-prefix-arg is - restored to the non-nil value it had before the prompt. - - we enter the second prompt. - current-prefix-arg is non-nil, prefix-arg is nil. - - before running the first real event, we run the special iconify-frame - event, but we pass the `special' arg to execute-command so - current-prefix-arg and prefix-arg are left untouched. - - here we foolishly copy the non-nil current-prefix-arg to prefix-arg. - - the next key event will have a spuriously non-nil current-prefix-arg. - current_kboard->Vprefix_arg = Vcurrent_prefix_arg; */ - return Qnil; -} - DEFUN ("selected-frame", Fselected_frame, Sselected_frame, 0, 0, 0, doc: /* Return the frame that is now selected. */) () @@ -1286,6 +1260,10 @@ The functions are run with one arg, the frame to be deleted. */) if (FRAME_X_P (f)) x_clear_frame_selections (f); #endif +#ifdef MAC_OS + if (FRAME_MAC_P (f)) + x_clear_frame_selections (f); +#endif /* Free glyphs. This function must be called before the window tree of the @@ -1552,7 +1530,7 @@ before calling this function on it, like this. #if defined (MSDOS) && defined (HAVE_MOUSE) if (FRAME_MSDOS_P (XFRAME (frame))) { - Fselect_frame (frame, Qnil); + Fselect_frame (frame); mouse_moveto (XINT (x), XINT (y)); } #endif @@ -1584,7 +1562,7 @@ before calling this function on it, like this. #if defined (MSDOS) && defined (HAVE_MOUSE) if (FRAME_MSDOS_P (XFRAME (frame))) { - Fselect_frame (frame, Qnil); + Fselect_frame (frame); mouse_moveto (XINT (x), XINT (y)); } #endif @@ -1706,7 +1684,7 @@ If omitted, FRAME defaults to the currently selected frame. */) #if 0 /* This isn't logically necessary, and it can do GC. */ /* Don't let the frame remain selected. */ if (EQ (frame, selected_frame)) - Fhandle_switch_frame (next_frame (frame, Qt), Qnil); + Fhandle_switch_frame (next_frame (frame, Qt)); #endif /* Don't allow minibuf_window to remain on a deleted frame. */ @@ -1957,7 +1935,7 @@ store_in_alist (alistptr, prop, val) static int frame_name_fnn_p (str, len) char *str; - int len; + EMACS_INT len; { if (len > 1 && str[0] == 'F') { @@ -2335,6 +2313,12 @@ enabled such bindings for that variable with `make-variable-frame-local'. */) prop = parms[i]; val = values[i]; store_frame_param (f, prop, val); + + /* Changing the background color might change the background + mode, so that we have to load new defface specs. + Call frame-set-background-mode to do that. */ + if (EQ (prop, Qbackground_color)) + call1 (Qframe_set_background_mode, frame); } } @@ -2369,8 +2353,7 @@ DEFUN ("frame-char-width", Fframe_char_width, Sframe_char_width, 0, 1, 0, doc: /* Width in pixels of characters in the font in frame FRAME. If FRAME is omitted, the selected frame is used. -The width is the same for all characters, because -currently Emacs supports only fixed-width fonts. +On a graphical screen, the width is the standard width of the default font. For a terminal screen, the value is always 1. */) (frame) Lisp_Object frame; @@ -3091,14 +3074,14 @@ x_set_font (f, arg, oldval) BLOCK_INPUT; result = (STRINGP (fontset_name) - ? x_new_fontset (f, SDATA (fontset_name)) - : x_new_font (f, SDATA (arg))); + ? x_new_fontset (f, fontset_name) + : x_new_fontset (f, arg)); UNBLOCK_INPUT; if (EQ (result, Qnil)) error ("Font `%s' is not defined", SDATA (arg)); else if (EQ (result, Qt)) - error ("The characters of the given font have varying widths"); + error ("The default fontset can't be used for a frame font"); else if (STRINGP (result)) { set_default_ascii_font (result); @@ -3109,10 +3092,10 @@ x_set_font (f, arg, oldval) if (old_fontset == FRAME_FONTSET (f)) return; } - else if (!NILP (Fequal (result, oldval))) + store_frame_param (f, Qfont, result); + if (!NILP (Fequal (result, oldval))) return; - store_frame_param (f, Qfont, result); recompute_basic_faces (f); } else @@ -3390,7 +3373,7 @@ extern char *x_get_string_resource P_ ((XrmDatabase, char *, char *)); extern Display_Info *check_x_display_info P_ ((Lisp_Object)); -/* Get specified attribute from resource database RDB. +/* Get specified attribute from resource database RDB. See Fx_get_resource below for other parameters. */ static Lisp_Object @@ -3527,7 +3510,7 @@ x_get_resource_string (attribute, class) Lisp_Object x_get_arg (dpyinfo, alist, param, attribute, class, type) - Display_Info *dpyinfo; + Display_Info *dpyinfo; Lisp_Object alist, param; char *attribute; char *class; @@ -4127,7 +4110,6 @@ This variable is local to the current terminal and cannot be buffer-local. */); defsubr (&Sframe_live_p); defsubr (&Smake_terminal_frame); defsubr (&Shandle_switch_frame); - defsubr (&Signore_event); defsubr (&Sselect_frame); defsubr (&Sselected_frame); defsubr (&Swindow_frame);