annotate src/frame.c @ 872:79c6ff3eef26

[xemacs-hg @ 2002-06-20 21:18:01 by ben] font changes etc.; some 21.4 changes mule/mule-msw-init-late.el: Specify charset->windows-registry conversion. mule/mule-x-init.el: Delete extra mule font additions here. Put them in faces.c. cl-macs.el: Document better. font-lock.el: Move Lisp function regexp to lisp-mode.el. lisp-mode.el: Various indentation fixes: Handle flet functions better. Handle argument lists in defuns and flets. Handle quoted lists, e.g. property lists -- don't indent like function calls. Distinguish between lambdas and other lists. lisp-mode.el: Handle this form. faces.el, font-menu.el, font.el, gtk-faces.el, msw-faces.el, msw-font-menu.el, x-faces.el, x-init.el: Major overhaul of face-handling code: -- Fix lots of bogus code in msw-faces.el, msw-font-menu.el, font-menu.el that was "truenaming" font specs -- i.e. in the process of frobbing a particular field in a general user-specified font spec with wildcarded fields, sticking in particular values for all the remaining wildcarded fields. This bug was rampant everywhere except in x-faces.el (the oldest and only correctly written code). This also means that we need to work with font names at all times and not font instances, because a font instance is essentially a truenamed font. -- Total rewrite of extremely junky code in msw-faces.el. Work with names as well as font instances, and return names; stop truenaming when canonicalizing and frobbing; fix handling of the combined style field, i.e. weight/slant (also fixed in font.el). -- Totally rewrite the frobbing functions in faces.el. This time, we frob all the instantiators rather than just computing a single instance value and working backwards. That way, e.g., `bold' will work for all charsets that have bold available, rather than only for whatever charset was part of the computed font instance (another example of the truename virus). Also fix up code to look at the fallbacks (all of them) when no global value present, so we don't need to put something in the global value. Intelligently handle a request to frob a buffer locale, rather than signalling an error. When frobbing instantiators, try hard to figure out what device type is associated with them, and frob each according to its own proper device type. Correctly handle inheritance vectors given as instantiators. Preserve existing tags when putting back frobbed instantiators. Extract out general specifier-frobbing code into specifier.el. Document everything cleanly. Do lots of other things better, etc. -- Don't duplicatively set a global specification for the default font -- it's already in the fallback and we no longer need a default global specification present. Delete various code in x-faces.el and msw-faces.el that duplicated the lists of fonts in faces.c. -- init-global-faces was not being called at all under MS Windows! Major bogosity. That caused device-specific values to get stuck into all the fonts, making it very hard to change them -- setting global specs caused nothing to happen. -- Correct weight names in font.el. -- Lots more font fixups in objects*.c. Printer.el: Warning fix. specifier.el: Add more args to map-specifier. Add various "heuristic" specifier functions to aid in creation of specifier-munging code such as in faces.el. subr.el: New functions. lwlib.c: Fix warning. config.inc.samp: Clean up, add args to control fastcall (not yet supported! the changes needed are in another ws of mine), profile support, vc6 support, union-type. xemacs.dsp, xemacs.mak: Semi-major overhaul. Fix bug where dump-id was always getting recomputed, forcing a redump even when nothing changed. Add support for fastcall. Support edit-and-continue (on by default) with vc6. Use incremental linking when doing a debug compilation. Add support for profiling. Consolidate the various debug flags. Partial support for "batch-compiling" -- compiling many files on a single invocation of the compiler. Doesn't seem to help that much for me, so it's not finished or enabled by default. Remove HAVE_MSW_C_DIRED, we always do. Correct some sloppy use of directories. s/cygwin32.h: Allow pdump to work under Cygwin (mmap is broken, so need to undefine HAVE_MMAP). s/win32-common.h, s/windowsnt.h: Support for fastcall. Add WIN32_ANY for identifying all Win32 variants (Cygwin, native, MinGW). Both of these are properly used in another ws. alloc.c, balloon-x.c, buffer.c, bytecode.c, callint.c, cm.c, cmdloop.c, cmds.c, console-gtk.c, console-gtk.h, console-msw.c, console-msw.h, console-stream.c, console-stream.h, console-tty.c, console-tty.h, console-x.c, console-x.h, console.c, console.h, device-gtk.c, device-msw.c, device-tty.c, device-x.c, device.c, device.h, devslots.h, dialog-gtk.c, dialog-msw.c, dialog-x.c, dialog.c, dired-msw.c, editfns.c, emacs.c, event-Xt.c, event-gtk.c, event-msw.c, event-stream.c, event-tty.c, event-unixoid.c, events.c, extents.c, extents.h, faces.c, fileio.c, fns.c, frame-gtk.c, frame-msw.c, frame-tty.c, frame-x.c, frame.c, frame.h, glyphs-eimage.c, glyphs-gtk.c, glyphs-msw.c, glyphs-widget.c, glyphs-x.c, glyphs.c, glyphs.h, gui-gtk.c, gui-msw.c, gui-x.c, gui.c, gutter.c, input-method-xlib.c, intl-encap-win32.c, intl-win32.c, keymap.c, lisp.h, macros.c, menubar-gtk.c, menubar-msw.c, menubar-x.c, menubar.c, menubar.h, minibuf.c, mule-charset.c, nt.c, objects-gtk.c, objects-gtk.h, objects-msw.c, objects-msw.h, objects-tty.c, objects-tty.h, objects-x.c, objects-x.h, objects.c, objects.h, postgresql.c, print.c, process.h, redisplay-gtk.c, redisplay-msw.c, redisplay-output.c, redisplay-tty.c, redisplay-x.c, redisplay.c, redisplay.h, scrollbar-gtk.c, scrollbar-msw.c, scrollbar-x.c, scrollbar.c, select-gtk.c, select-msw.c, select-x.c, select.c, signal.c, sound.c, specifier.c, symbols.c, syntax.c, sysdep.c, syssignal.h, syswindows.h, toolbar-common.c, toolbar-gtk.c, toolbar-msw.c, toolbar-x.c, toolbar.c, unicode.c, window.c, window.h: The following are the major changes made: (1) Separation of various header files into an external and an internal version, similar to the existing separation of process.h and procimpl.h. Eventually this should be done for all Lisp objects. The external version has the same name as currently; the internal adds -impl. The external file has XFOO() macros for objects, but the structure is opaque and defined only in the internal file. It's now reasonable to move all prototypes in lisp.h into the appropriate external file, and this should be done. Currently, separation has been done on extents.h, objects*.h, console.h, device.h, frame.h, and window.h. For c/d/f/w, the most basic properties are available in the external header file, with the macros resolving to functions. In the internal header file, the macros are redefined to directly access the structure. Also, the global MARK_FOO_CHANGED macros have been made into functions so that they can be accessed without needing to include lots of -impl headers -- they are used in almost exclusively in non-time-critical functions, and take up enough time that the function overhead will be negligible. Similarly, the function overhead from making the basic properties mentioned above into functions is negligible, and code that does heavy accessing of c/d/f/w structures inevitably ends up needing the internal header files, anyway. (2) More face changes. -- Major rewrite of objects-msw.c. Now handles wildcard specs properly, rather than "truenaming" (or even worse, signalling an error, which previously happened with some of the fallbacks if you tried to use them in make-font-instance!). -- Split charset matching of fonts into two stages -- one to find a font specifically designed for a particular charset (by examining its registry), the second to find a Unicode font that can support the charset. This needs to proceed as two complete, separate instantiations in order to work properly (otherwise many of the fonts in the HELLO page look wrong). This should also make it easy to support iso10646 (Unicode) fonts under X. -- All default values for fonts are now completely specified in the fallbacks. Stuff from mule-x-init.el has all been moved here, merged with the existing specs, and totally rethought so you get sensible results. (HELLO now looks much better!). -- Generalize the "default X/GTK device" stuff into a per-device-type "default device". -- Add mswindows-{set-}charset-registry. In time, charset<->code-page conversion functions will be removed. -- Wrap protective code around calls to compute device specifier tags, and do this computation before calling the face initialization code because the latter may need these tags to be correctly updated. (3) Other changes. EmacsFrame.c, glyphs-msw.c, eval.c, gui-x.c, intl-encap-win32.c, search.c, signal.c, toolbar-msw.c, unicode.c: Warning fixes. config.h.in: #undefs meant to be frobbed by configure *MUST* go inside of #ifndef WIN32_NO_CONFIGURE, and everything else *MUST* go outside! eval.c: Let detailed backtraces be detailed. specifier.c: Don't override user's print-string-length/print-length settings. glyphs.c: New function image-instance-instantiator. config.h.in, sysdep.c: Changes for fastcall. sysdep.c, nt.c: Fix up a previous botched patch that tried to add support for both EEXIST and EACCES. IF THE BOTCHED PATCH WENT INTO 21.4, THIS FIXUP NEEDS TO GO IN, TOO. search.c: Fix *evil* crash due to incorrect synching of syntax-cache code with 21.1. THIS SHOULD GO INTO 21.4.
author ben
date Thu, 20 Jun 2002 21:19:10 +0000
parents 804517e16990
children c925bacdda60
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 /* Generic frame functions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 Copyright (C) 1989, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
3 Copyright (C) 1995, 1996, 2002 Ben Wing.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4 Copyright (C) 1995 Sun Microsystems, Inc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 XEmacs is free software; you can redistribute it and/or modify it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 under the terms of the GNU General Public License as published by the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 Free Software Foundation; either version 2, or (at your option) any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 XEmacs is distributed in the hope that it will be useful, but WITHOUT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 along with XEmacs; see the file COPYING. If not, write to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 Boston, MA 02111-1307, USA. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23 /* Synched up with: FSF 19.30. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 /* This file has been Mule-ized. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 #include <config.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 #include "lisp.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 #include "buffer.h" /* for Vbuffer_alist */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 #include "console.h"
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
32 #include "device-impl.h"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 #include "events.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 #include "extents.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 #include "faces.h"
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
36 #include "frame-impl.h"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 #include "glyphs.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 #include "gutter.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 #include "menubar.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 #include "redisplay.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 #include "scrollbar.h"
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
42 #include "toolbar.h"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 #include "window.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 Lisp_Object Vselect_frame_hook, Qselect_frame_hook;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 Lisp_Object Vdeselect_frame_hook, Qdeselect_frame_hook;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 Lisp_Object Vcreate_frame_hook, Qcreate_frame_hook;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 Lisp_Object Vdelete_frame_hook, Qdelete_frame_hook;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 Lisp_Object Vmouse_enter_frame_hook, Qmouse_enter_frame_hook;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 Lisp_Object Vmouse_leave_frame_hook, Qmouse_leave_frame_hook;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 Lisp_Object Vmap_frame_hook, Qmap_frame_hook;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 Lisp_Object Vunmap_frame_hook, Qunmap_frame_hook;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 int allow_deletion_of_last_visible_frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 Lisp_Object Vadjust_frame_function;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 Lisp_Object Vmouse_motion_handler;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 Lisp_Object Vsynchronize_minibuffers;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 Lisp_Object Qsynchronize_minibuffers;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 Lisp_Object Qbuffer_predicate;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 Lisp_Object Qmake_initial_minibuffer_frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 Lisp_Object Qcustom_initialize_frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 /* We declare all these frame properties here even though many of them
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 are currently only used in frame-x.c, because we should generalize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 them. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 Lisp_Object Qminibuffer;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 Lisp_Object Qunsplittable;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 Lisp_Object Qinternal_border_width;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 Lisp_Object Qtop_toolbar_shadow_color;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 Lisp_Object Qbottom_toolbar_shadow_color;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 Lisp_Object Qbackground_toolbar_color;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 Lisp_Object Qtop_toolbar_shadow_pixmap;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 Lisp_Object Qbottom_toolbar_shadow_pixmap;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 Lisp_Object Qtoolbar_shadow_thickness;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 Lisp_Object Qscrollbar_placement;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 Lisp_Object Qinter_line_space;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 Lisp_Object Qvisual_bell;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 Lisp_Object Qbell_volume;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 Lisp_Object Qpointer_background;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 Lisp_Object Qpointer_color;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 Lisp_Object Qtext_pointer;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 Lisp_Object Qspace_pointer;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 Lisp_Object Qmodeline_pointer;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 Lisp_Object Qgc_pointer;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 Lisp_Object Qinitially_unmapped;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 Lisp_Object Quse_backing_store;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 Lisp_Object Qborder_color;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 Lisp_Object Qborder_width;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 Lisp_Object Qframep, Qframe_live_p;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 Lisp_Object Qdelete_frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 Lisp_Object Qframe_title_format, Vframe_title_format;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 Lisp_Object Qframe_icon_title_format, Vframe_icon_title_format;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 Lisp_Object Vdefault_frame_name;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 Lisp_Object Vdefault_frame_plist;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 Lisp_Object Vframe_icon_glyph;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 Lisp_Object Qhidden;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 Lisp_Object Qvisible, Qiconic, Qinvisible, Qvisible_iconic, Qinvisible_iconic;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 Lisp_Object Qnomini, Qvisible_nomini, Qiconic_nomini, Qinvisible_nomini;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 Lisp_Object Qvisible_iconic_nomini, Qinvisible_iconic_nomini;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
107 Lisp_Object Qset_specifier, Qset_face_property;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 Lisp_Object Qface_property_instance;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 Lisp_Object Qframe_property_alias;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 /* If this is non-nil, it is the frame that make-frame is currently
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113 creating. We can't set the current frame to this in case the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 debugger goes off because it would try and display to it. However,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 there are some places which need to reference it which have no
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 other way of getting it if it isn't the selected frame. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 Lisp_Object Vframe_being_created;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 Lisp_Object Qframe_being_created;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 static void store_minibuf_frame_prop (struct frame *f, Lisp_Object val);
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
121 static void frame_conversion_internal (struct frame *f, int pixel_to_char,
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
122 int *pixel_width, int *pixel_height,
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
123 int *char_width, int *char_height,
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
124 int real_face);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
125 static struct display_line title_string_display_line;
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
126 /* Used by generate_title_string. Global because they get used so much that
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
127 the dynamic allocation time adds up. */
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
128 static Ichar_dynarr *title_string_ichar_dynarr;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 mark_frame (Lisp_Object obj)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 struct frame *f = XFRAME (obj);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 #define MARKED_SLOT(x) mark_object (f->x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 #include "frameslots.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 if (FRAME_LIVE_P (f)) /* device is nil for a dead frame */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 MAYBE_FRAMEMETH (f, mark_frame, (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
142 #ifdef HAVE_SCROLLBARS
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
143 if (f->sb_vcache)
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
144 mark_object (wrap_scrollbar_instance (f->sb_vcache));
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
145 if (f->sb_hcache)
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
146 mark_object (wrap_scrollbar_instance (f->sb_hcache));
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
147 #endif
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
148
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
149 mark_gutters (f);
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
150
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 print_frame (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 struct frame *frm = XFRAME (obj);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 if (print_readably)
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
160 printing_unreadable_object ("#<frame %s 0x%x>",
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
161 XSTRING_DATA (frm->name), frm->header.uid);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
163 write_fmt_string (printcharfun, "#<%s-frame ", !FRAME_LIVE_P (frm) ? "dead" :
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
164 FRAME_TYPE_NAME (frm));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 print_internal (frm->name, printcharfun, 1);
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
166 write_fmt_string (printcharfun, " 0x%x>", frm->header.uid);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 DEFINE_LRECORD_IMPLEMENTATION ("frame", frame,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 mark_frame, print_frame, 0, 0, 0, 0,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 struct frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 nuke_all_frame_slots (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 {
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
176 zero_lcrecord (f);
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
177
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 #define MARKED_SLOT(x) f->x = Qnil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 #include "frameslots.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 /* Allocate a new frame object and set all its fields to reasonable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 values. The root window is created but the minibuffer will be done
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 later. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 static struct frame *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 allocate_frame_core (Lisp_Object device)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 Lisp_Object frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 Lisp_Object root_window;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 struct frame *f = alloc_lcrecord_type (struct frame, &lrecord_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 nuke_all_frame_slots (f);
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
195 frame = wrap_frame (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 f->device = device;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 f->framemeths = XDEVICE (device)->devmeths;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 f->buffer_alist = Fcopy_sequence (Vbuffer_alist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 root_window = allocate_window ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 XWINDOW (root_window)->frame = frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 /* 10 is arbitrary,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 Just so that there is "something there."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 Correct size will be set up later with change_frame_size. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 f->width = 10;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 f->height = 10;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 XWINDOW (root_window)->pixel_width = 10;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 XWINDOW (root_window)->pixel_height = 9;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 f->root_window = root_window;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 f->selected_window = root_window;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 f->last_nonminibuf_window = root_window;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 /* cache of subwindows visible on frame */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
219 f->subwindow_instance_cache = make_weak_list (WEAK_LIST_SIMPLE);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 /* associated exposure ignore list */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 f->subwindow_exposures = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 f->subwindow_exposures_tail = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
225 FRAME_SET_PAGENUMBER (f, 1);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
226
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
227 note_object_created (root_window);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
228
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 /* Choose a buffer for the frame's root window. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 XWINDOW (root_window)->buffer = Qt;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 Lisp_Object buf;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 buf = Fcurrent_buffer ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 /* If buf is a 'hidden' buffer (i.e. one whose name starts with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 a space), try to find another one. */
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
237 if (string_ichar (Fbuffer_name (buf), 0) == ' ')
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238 buf = Fother_buffer (buf, Qnil, Qnil);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
239 Fset_window_buffer (root_window, buf, Qnil);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 return f;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 setup_normal_frame (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 Lisp_Object mini_window;
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
249 Lisp_Object frame = wrap_frame (f);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
250
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 mini_window = allocate_window ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 XWINDOW (f->root_window)->next = mini_window;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 XWINDOW (mini_window)->prev = f->root_window;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 XWINDOW (mini_window)->mini_p = Qt;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 XWINDOW (mini_window)->frame = frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 f->minibuffer_window = mini_window;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258 f->has_minibuffer = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
260 note_object_created (mini_window);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
261
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262 XWINDOW (mini_window)->buffer = Qt;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
263 Fset_window_buffer (mini_window, Vminibuffer_zero, Qt);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 /* Make a frame using a separate minibuffer window on another frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 MINI_WINDOW is the minibuffer window to use. nil means use the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 default-minibuffer-frame. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 setup_frame_without_minibuffer (struct frame *f, Lisp_Object mini_window)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 Lisp_Object device = f->device;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276 if (!NILP (mini_window))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 CHECK_LIVE_WINDOW (mini_window);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279 if (!NILP (mini_window)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 && !EQ (DEVICE_CONSOLE (XDEVICE (device)),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281 FRAME_CONSOLE (XFRAME (XWINDOW (mini_window)->frame))))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
282 invalid_argument ("frame and minibuffer must be on the same console", Qunbound);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
284 /* Do not create a default minibuffer frame on printer devices. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
285 if (NILP (mini_window)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
286 && DEVICE_DISPLAY_P (XDEVICE (FRAME_DEVICE (f))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 struct console *con = XCONSOLE (FRAME_CONSOLE (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 /* Use default-minibuffer-frame if possible. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290 if (!FRAMEP (con->default_minibuffer_frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291 || ! FRAME_LIVE_P (XFRAME (con->default_minibuffer_frame)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293 /* If there's no minibuffer frame to use, create one. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294 con->default_minibuffer_frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295 = call1 (Qmake_initial_minibuffer_frame, device);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297 mini_window = XFRAME (con->default_minibuffer_frame)->minibuffer_window;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 /* Install the chosen minibuffer window, with proper buffer. */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
301 if (!NILP (mini_window))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
302 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
303 store_minibuf_frame_prop (f, mini_window);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
304 Fset_window_buffer (mini_window, Vminibuffer_zero, Qt);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
305 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
306 else
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
307 f->minibuffer_window = Qnil;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 /* Make a frame containing only a minibuffer window. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313 setup_minibuffer_frame (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 /* First make a frame containing just a root window, no minibuffer. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317 Lisp_Object mini_window;
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
318 Lisp_Object frame = wrap_frame (f);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
319
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 f->no_split = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322 f->has_minibuffer = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324 /* Now label the root window as also being the minibuffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 Avoid infinite looping on the window chain by marking next pointer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 as nil. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 mini_window = f->minibuffer_window = f->root_window;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 XWINDOW (mini_window)->mini_p = Qt;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330 XWINDOW (mini_window)->next = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 XWINDOW (mini_window)->prev = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 XWINDOW (mini_window)->frame = frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334 /* Put the proper buffer in that window. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
336 Fset_window_buffer (mini_window, Vminibuffer_zero, Qt);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 make_sure_its_a_fresh_plist (Lisp_Object foolist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 if (CONSP (Fcar (foolist)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 /* looks like an alist to me. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 foolist = Fcopy_alist (foolist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 foolist = Fdestructive_alist_to_plist (foolist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 foolist = Fcopy_sequence (foolist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 return foolist;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353
558
ed498ef2108b [xemacs-hg @ 2001-05-23 09:59:33 by ben]
ben
parents: 546
diff changeset
354 static Lisp_Object
546
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
355 restore_frame_list_to_its_unbesmirched_state (Lisp_Object kawnz)
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
356 {
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
357 Lisp_Object lissed = XCDR (kawnz);
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
358 if (!EQ (lissed, Qunbound))
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
359 DEVICE_FRAME_LIST (XDEVICE (XCAR (kawnz))) = lissed;
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
360 return Qnil;
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
361 }
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
362
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 DEFUN ("make-frame", Fmake_frame, 0, 2, "", /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 Create and return a new frame, displaying the current buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 Runs the functions listed in `create-frame-hook' after frame creation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 Optional argument PROPS is a property list (a list of alternating
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 keyword-value specifications) of properties for the new frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369 \(An alist is accepted for backward compatibility but should not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370 be passed in.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 See `set-frame-properties', `default-x-frame-plist', and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373 `default-tty-frame-plist' for the specially-recognized properties.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 (props, device))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 struct frame *f;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 struct device *d;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 Lisp_Object frame = Qnil, name = Qnil, minibuf;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380 struct gcpro gcpro1, gcpro2, gcpro3;
546
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
381 int speccount = specpdl_depth (), speccount2;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382 int first_frame_on_device = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383 int first_frame_on_console = 0;
546
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
384 Lisp_Object besmirched_cons = Qnil;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
385 int frame_name_is_defaulted = 1;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387 d = decode_device (device);
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
388 device = wrap_device (d);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
390 /* PROPS and NAME may be freshly-created, so make sure to GCPRO. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391 GCPRO3 (frame, props, name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
393 props = make_sure_its_a_fresh_plist (props);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394 if (DEVICE_SPECIFIC_FRAME_PROPS (d))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395 /* Put the device-specific props before the more general ones so
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396 that they override them. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
397 props = nconc2 (props,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398 make_sure_its_a_fresh_plist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399 (*DEVICE_SPECIFIC_FRAME_PROPS (d)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400 props = nconc2 (props, make_sure_its_a_fresh_plist (Vdefault_frame_plist));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 Fcanonicalize_lax_plist (props, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
403 name = Flax_plist_get (props, Qname, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
404 if (!NILP (name))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
405 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
406 CHECK_STRING (name);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
407 frame_name_is_defaulted = 0;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
408 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 else if (STRINGP (Vdefault_frame_name))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410 name = Vdefault_frame_name;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412 name = build_string ("emacs");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
414 if (!NILP (Fstring_match (make_string ((const Ibyte *) "\\.", 2), name,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415 Qnil, Qnil)))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
416 syntax_error (". not allowed in frame names", name);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418 f = allocate_frame_core (device);
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
419 frame = wrap_frame (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421 specbind (Qframe_being_created, name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422 f->name = name;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
424 FRAMEMETH (f, init_frame_1, (f, props, frame_name_is_defaulted));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426 minibuf = Flax_plist_get (props, Qminibuffer, Qunbound);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
427 if (UNBOUNDP (minibuf))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 /* If minibuf is unspecified, then look for a minibuffer X resource. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 /* #### Not implemented any more. We need to fix things up so
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431 that we search out all X resources and append them to the end of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
432 props, above. This is the only way in general to assure
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433 coherent behavior for all frame properties/resources/etc. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
435 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
436 props = Flax_plist_remprop (props, Qminibuffer);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438 if (EQ (minibuf, Qnone) || NILP (minibuf))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439 setup_frame_without_minibuffer (f, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
440 else if (EQ (minibuf, Qonly))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441 setup_minibuffer_frame (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442 else if (WINDOWP (minibuf))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443 setup_frame_without_minibuffer (f, minibuf);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444 else if (EQ (minibuf, Qt) || UNBOUNDP (minibuf))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445 setup_normal_frame (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 else
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
447 invalid_argument ("Invalid value for `minibuffer'", minibuf);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
448
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
449 update_frame_window_mirror (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
451 if (initialized && !DEVICE_STREAM_P (d))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453 if (!NILP (f->minibuffer_window))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 reset_face_cachels (XWINDOW (f->minibuffer_window));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455 reset_face_cachels (XWINDOW (f->root_window));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
457
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 /* If no frames on this device formerly existed, say this is the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
459 first frame. It kind of assumes that frameless devices don't
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
460 exist, but it shouldn't be too harmful. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
461 if (NILP (DEVICE_FRAME_LIST (d)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
462 first_frame_on_device = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
463
546
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
464 /* It's possible for one of the init methods below to signal an error;
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
465 in that case, let's make sure the device isn't besmirched by
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
466 having a half-initialized frame attached to it */
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
467 speccount2 = specpdl_depth ();
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
468 record_unwind_protect (restore_frame_list_to_its_unbesmirched_state,
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
469 besmirched_cons =
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
470 Fcons (device, DEVICE_FRAME_LIST (d)));
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
471
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472 /* This *must* go before the init_*() methods. Those functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473 call Lisp code, and if any of them causes a warning to be displayed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474 and the *Warnings* buffer to be created, it won't get added to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475 the frame-specific version of the buffer-alist unless the frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476 is accessible from the device. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
477
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
478 #if 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
479 DEVICE_FRAME_LIST (d) = nconc2 (DEVICE_FRAME_LIST (d), Fcons (frame, Qnil));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
480 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481 DEVICE_FRAME_LIST (d) = Fcons (frame, DEVICE_FRAME_LIST (d));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482 RESET_CHANGED_SET_FLAGS;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
483
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
484 note_object_created (frame);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
485
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486 /* Now make sure that the initial cached values are set correctly.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487 Do this after the init_frame method is called because that may
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488 do things (e.g. create widgets) that are necessary for the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489 specifier value-changed methods to work OK. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490 recompute_all_cached_specifiers_in_frame (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
491
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
492 if (!DEVICE_STREAM_P (d))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494 init_frame_faces (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
495
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496 #ifdef HAVE_SCROLLBARS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
497 /* Finish up resourcing the scrollbars. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498 init_frame_scrollbars (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501 #ifdef HAVE_TOOLBARS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
502 /* Create the initial toolbars. We have to do this after the frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
503 methods are called because it may potentially call some things itself
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
504 which depend on the normal frame methods having initialized
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
505 things. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
506 init_frame_toolbars (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
507 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
508 reset_face_cachels (XWINDOW (FRAME_SELECTED_WINDOW (f)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509 reset_glyph_cachels (XWINDOW (FRAME_SELECTED_WINDOW (f)));
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
510
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
511 change_frame_size (f, f->height, f->width, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
512 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
513
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514 MAYBE_FRAMEMETH (f, init_frame_2, (f, props));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515 Fset_frame_properties (frame, props);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516 MAYBE_FRAMEMETH (f, init_frame_3, (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
518 /* Hallelujah, praise the lord. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
519 f->init_finished = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
520
546
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
521 XCDR (besmirched_cons) = Qunbound;
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
522
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
523 unbind_to (speccount2);
546
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
524
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
525 /* If this is the first frame on the device, make it the selected one. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
526 if (first_frame_on_device && NILP (DEVICE_SELECTED_FRAME (d)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
527 set_device_selected_frame (d, frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
528
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
529 /* If at startup or if the current console is a stream console
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
530 (usually also at startup), make this console the selected one
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
531 so that messages show up on it. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
532 if (NILP (Fselected_console ()) ||
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
533 CONSOLE_STREAM_P (XCONSOLE (Fselected_console ())))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
534 Fselect_console (DEVICE_CONSOLE (d));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
535
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
536 first_frame_on_console =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
537 (first_frame_on_device &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
538 XINT (Flength (CONSOLE_DEVICE_LIST (XCONSOLE (DEVICE_CONSOLE (d)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
539 == 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
540
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
541 /* #### all this calling of frame methods at various odd times
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
542 is somewhat of a mess. It's necessary to do it this way due
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
543 to strange console-type-specific things that need to be done. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
544 MAYBE_FRAMEMETH (f, after_init_frame, (f, first_frame_on_device,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
545 first_frame_on_console));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
546
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
547 if (!DEVICE_STREAM_P (d))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
548 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
549 /* Now initialise the gutters. This won't change the frame size,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
550 but is needed as input to the layout that change_frame_size
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
551 will eventually do. Unfortunately gutter sizing code relies
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
552 on the frame in question being visible so we can't do this
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
553 earlier. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
554 init_frame_gutters (f);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
555
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
556 change_frame_size (f, f->height, f->width, 0);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
557 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
558
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
559 if (first_frame_on_device)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
560 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
561 if (first_frame_on_console)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
562 va_run_hook_with_args (Qcreate_console_hook, 1, DEVICE_CONSOLE (d));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
563 va_run_hook_with_args (Qcreate_device_hook, 1, device);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
564 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
565 va_run_hook_with_args (Qcreate_frame_hook, 1, frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
566
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
567 /* Initialize custom-specific stuff. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
568 if (!UNBOUNDP (symbol_function (XSYMBOL (Qcustom_initialize_frame))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
569 call1 (Qcustom_initialize_frame, frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
570
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
571 unbind_to (speccount);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
572
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
573 UNGCPRO;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
574 return frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
575 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
576
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
577
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
578 /* this function should be used in most cases when a Lisp function is passed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
579 a FRAME argument. Use this unless you don't accept nil == current frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
580 (in which case, do a CHECK_LIVE_FRAME() and then an XFRAME()) or you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
581 allow dead frames. Note that very few functions should accept dead
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
582 frames. It could be argued that functions should just do nothing when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
583 given a dead frame, but the presence of a dead frame usually indicates
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
584 an oversight in the Lisp code that could potentially lead to strange
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
585 results and so it is better to catch the error early.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
586
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
587 If you only accept X frames, use decode_x_frame(), which does what this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
588 function does but also makes sure the frame is an X frame. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
589
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
590 struct frame *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
591 decode_frame (Lisp_Object frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
592 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
593 if (NILP (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
594 return selected_frame ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
595
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
596 CHECK_LIVE_FRAME (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
597 return XFRAME (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
598 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
599
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
600 struct frame *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
601 decode_frame_or_selected (Lisp_Object cdf)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
602 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
603 if (CONSOLEP (cdf))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
604 cdf = CONSOLE_SELECTED_DEVICE (decode_console (cdf));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
605 if (DEVICEP (cdf))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
606 cdf = DEVICE_SELECTED_FRAME (decode_device (cdf));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
607 return decode_frame (cdf);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
608 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
609
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
610 Lisp_Object
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
611 frame_device (struct frame *f)
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
612 {
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
613 return FRAME_DEVICE (f);
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
614 }
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
615
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
616 int
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
617 frame_live_p (struct frame *f)
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
618 {
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
619 return FRAME_LIVE_P (f);
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
620 }
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
621
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
622
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
623 #ifdef ERROR_CHECK_TRAPPING_PROBLEMS
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
624
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
625 static Lisp_Object
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
626 commit_ritual_suicide (Lisp_Object ceci_nest_pas_une_pipe)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
627 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
628 assert (!in_display);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
629 return Qnil;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
630 }
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
631
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
632 #endif
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
633
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
634 /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
635 * window size changes are held up during critical regions. Afterwards,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
636 * we want to deal with any delayed changes.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
637 */
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
638 int
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
639 enter_redisplay_critical_section (void)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
640 {
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
641 int depth = specpdl_depth ();
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
642
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
643 #ifdef ERROR_CHECK_TRAPPING_PROBLEMS
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
644 /* force every call to QUIT to check for in_displayness */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
645 something_happened++;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
646 record_unwind_protect (commit_ritual_suicide, Qnil);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
647 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
648 in_display = 1;
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
649
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
650 return depth;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
651 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
652
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
653 void
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
654 exit_redisplay_critical_section (int depth)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
655 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
656 Lisp_Object frmcons, devcons, concons;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
657
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
658 in_display = 0;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
659
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
660 #ifdef ERROR_CHECK_TRAPPING_PROBLEMS
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
661 unbind_to (depth);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
662 something_happened--;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
663 #endif
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
664
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
665 /* we used to have a function to do this for only one frame, and
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
666 it was typical to call it at the end of a critical section
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
667 (which occurs once per frame); but what then happens if multiple
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
668 frames have frame changes held up?
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
669
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
670 this means we are O(N^2) over frames. i seriously doubt it matters.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
671 --ben */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
672 FRAME_LOOP_NO_BREAK (frmcons, devcons, concons)
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
673 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
674 struct frame *f = XFRAME (XCAR (frmcons));
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
675 if (f->size_change_pending)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
676 change_frame_size (f, f->new_height, f->new_width, 0);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
677 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
678 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
679
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
680 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
681 invalidate_vertical_divider_cache_in_frame (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
682 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
683 /* Invalidate cached value of needs_vertical_divider_p in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
684 every and all windows */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
685 map_windows (f, invalidate_vertical_divider_cache_in_window, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
686 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
687
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
688 /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
689 * Frame size may change due to changes in scrollbars, toolbars,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
690 * default font etc. These changes are applied early in redisplay
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
691 * frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
692 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
693 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
694 adjust_frame_size (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
695 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
696 int keep_char_size = 0;
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
697 Lisp_Object frame = wrap_frame (f);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
698
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
699
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
700 if (!f->size_slipped)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
701 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
702
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
703 /* Don't adjust tty frames. #### May break when TTY have menubars.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
704 Then, write an Vadjust_frame_function which will return t for TTY
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
705 frames. Another solution is frame_size_fixed_p method for TTYs,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
706 which always returned yes it's fixed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
707 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
708 if (!FRAME_WIN_P (f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
709 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
710 CLEAR_FRAME_SIZE_SLIPPED (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
711 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
712 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
713
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
714 /* frame_size_fixed_p tells that frame size cannot currently
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
715 be changed change due to external conditions */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
716 if (!FRAMEMETH_OR_GIVEN (f, frame_size_fixed_p, (f), 0))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
717 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
718 if (NILP (Vadjust_frame_function))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
719 keep_char_size = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
720 else if (EQ (Vadjust_frame_function, Qt))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
721 keep_char_size = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
722 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
723 keep_char_size =
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
724 NILP (call1_trapping_problems ("Error in adjust-frame-function",
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
725 Vadjust_frame_function, frame,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
726 0));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
727
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
728 if (keep_char_size)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
729 Fset_frame_size (frame, make_int (FRAME_CHARWIDTH(f)),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
730 make_int (FRAME_CHARHEIGHT(f)), Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
731 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
732
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
733 if (!keep_char_size)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
734 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
735 int height, width;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
736 pixel_to_char_size (f, FRAME_PIXWIDTH(f), FRAME_PIXHEIGHT(f),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
737 &width, &height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
738 change_frame_size (f, height, width, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
739 CLEAR_FRAME_SIZE_SLIPPED (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
740 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
741 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
742
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
743 /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
744 * This is a "specifier changed in frame" handler for various specifiers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
745 * changing which causes frame size adjustment
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
746 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
747 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
748 frame_size_slipped (Lisp_Object specifier, struct frame *f,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
749 Lisp_Object oldval)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
750 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
751 MARK_FRAME_SIZE_SLIPPED(f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
752 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
753
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
754 DEFUN ("framep", Fframep, 1, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
755 Return non-nil if OBJECT is a frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
756 Also see `frame-live-p'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
757 Note that FSF Emacs kludgily returns a value indicating what type of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
758 frame this is. Use the cleaner function `frame-type' for that.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
759 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
760 (object))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
761 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
762 return FRAMEP (object) ? Qt : Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
763 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
764
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
765 DEFUN ("frame-live-p", Fframe_live_p, 1, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
766 Return non-nil if OBJECT is a frame which has not been deleted.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
767 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
768 (object))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
769 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
770 return FRAMEP (object) && FRAME_LIVE_P (XFRAME (object)) ? Qt : Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
771 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
772
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
773
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
774 DEFUN ("focus-frame", Ffocus_frame, 1, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
775 Select FRAME and give it the window system focus.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
776 This function is not affected by the value of `focus-follows-mouse'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
777 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
778 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
779 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
780 CHECK_LIVE_FRAME (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
781
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
782 MAYBE_DEVMETH (XDEVICE (FRAME_DEVICE (XFRAME (frame))), focus_on_frame,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
783 (XFRAME (frame)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
784 /* FRAME will be selected by the time we receive the next event.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
785 However, it is better to select it explicitly now, in case the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
786 Lisp code depends on frame being selected. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
787 Fselect_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
788 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
789 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
790
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
791 /* Called from Fselect_window() */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
792 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
793 select_frame_1 (Lisp_Object frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
794 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
795 struct frame *f = XFRAME (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
796 Lisp_Object old_selected_frame = Fselected_frame (Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
797
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
798 if (EQ (frame, old_selected_frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
799 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
800
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
801 /* now select the frame's device */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
802 set_device_selected_frame (XDEVICE (FRAME_DEVICE (f)), frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
803 select_device_1 (FRAME_DEVICE (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
804
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
805 update_frame_window_mirror (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
806 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
807
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
808 DEFUN ("select-frame", Fselect_frame, 1, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
809 Select the frame FRAME.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
810 Subsequent editing commands apply to its selected window.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
811 The selection of FRAME lasts until the next time the user does
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
812 something to select a different frame, or until the next time this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
813 function is called.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
814
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
815 Note that this does not actually cause the window-system focus to be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
816 set to this frame, or the `select-frame-hook' or `deselect-frame-hook'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
817 to be run, until the next time that XEmacs is waiting for an event.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
818
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
819 Also note that when focus-follows-mouse is non-nil, the frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
820 selection is temporary and is reverted when the current command
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
821 terminates, much like the buffer selected by `set-buffer'. In order
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
822 to effect a permanent focus change, use `focus-frame'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
823 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
824 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
825 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
826 CHECK_LIVE_FRAME (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
827
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
828 /* select the frame's selected window. This will call
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
829 selected_frame_1(). */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
830 Fselect_window (FRAME_SELECTED_WINDOW (XFRAME (frame)), Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
831
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
832 /* Nothing should be depending on the return value of this function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
833 But, of course, there is stuff out there which is. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
834 return frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
835 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
836
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
837 /* use this to retrieve the currently selected frame. You should use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
838 this in preference to Fselected_frame (Qnil) unless you are prepared
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
839 to handle the possibility of there being no selected frame (this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
840 happens at some points during startup). */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
841
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
842 struct frame *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
843 selected_frame (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
844 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
845 Lisp_Object device = Fselected_device (Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
846 Lisp_Object frame = DEVICE_SELECTED_FRAME (XDEVICE (device));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
847 if (NILP (frame))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
848 gui_error ("No frames exist on device", device);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
849 return XFRAME (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
850 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
851
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
852 /* use this instead of XFRAME (DEVICE_SELECTED_FRAME (d)) to catch
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
853 the possibility of there being no frames on the device (just created).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
854 There is no point doing this inside of redisplay because errors
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
855 cause an abort(), indicating a flaw in the logic, and error_check_frame()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
856 will catch this just as well. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
857
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
858 struct frame *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
859 device_selected_frame (struct device *d)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
860 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
861 Lisp_Object frame = DEVICE_SELECTED_FRAME (d);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
862 if (NILP (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
863 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
864 Lisp_Object device = wrap_device (d);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
865
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
866 gui_error ("No frames exist on device", device);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
867 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
868 return XFRAME (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
869 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
870
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
871 #if 0 /* FSFmacs */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
872
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 800
diff changeset
873 DEFUN ("handle-switch-frame", Fhandle_switch_frame, 1, 2, "e", /*
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
874 Handle a switch-frame event EVENT.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
875 Switch-frame events are usually bound to this function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
876 A switch-frame event tells Emacs that the window manager has requested
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
877 that the user's events be directed to the frame mentioned in the event.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
878 This function selects the selected window of the frame of EVENT.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
879
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
880 If EVENT is frame object, handle it as if it were a switch-frame event
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
881 to that frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
882 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
883 (frame, no_enter))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
884 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
885 /* Preserve prefix arg that the command loop just cleared. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
886 XCONSOLE (Vselected_console)->prefix_arg = Vcurrent_prefix_arg;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
887 #if 0 /* unclean! */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
888 run_hook (Qmouse_leave_buffer_hook);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
889 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
890 return do_switch_frame (frame, no_enter, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
891 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
892
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
893 /* A load of garbage. */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 800
diff changeset
894 DEFUN ("ignore-event", Fignore_event, 0, 0, "", /*
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
895 Do nothing, but preserve any prefix argument already specified.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
896 This is a suitable binding for iconify-frame and make-frame-visible.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
897 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
898 ())
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
899 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
900 struct console *c = XCONSOLE (Vselected_console);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
901
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
902 c->prefix_arg = Vcurrent_prefix_arg;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
903 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
904 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
905
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
906 #endif /* 0 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
907
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
908 DEFUN ("selected-frame", Fselected_frame, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
909 Return the frame that is now selected on device DEVICE.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
910 If DEVICE is not specified, the selected device will be used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
911 If no frames exist on the device, nil is returned.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
912 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
913 (device))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
914 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
915 if (NILP (device) && NILP (Fselected_device (Qnil)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
916 return Qnil; /* happens early in temacs */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
917 return DEVICE_SELECTED_FRAME (decode_device (device));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
918 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
919
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
920 Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
921 frame_first_window (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
922 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
923 Lisp_Object w = f->root_window;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
924
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
925 while (1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
926 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
927 if (! NILP (XWINDOW (w)->hchild))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
928 w = XWINDOW (w)->hchild;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
929 else if (! NILP (XWINDOW (w)->vchild))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
930 w = XWINDOW (w)->vchild;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
931 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
932 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
933 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
934
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
935 return w;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
936 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
937
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
938 DEFUN ("active-minibuffer-window", Factive_minibuffer_window, 0, 0, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
939 Return the currently active minibuffer window, or nil if none.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
940 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
941 ())
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
942 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
943 return minibuf_level ? minibuf_window : Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
944 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
945
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
946 DEFUN ("last-nonminibuf-frame", Flast_nonminibuf_frame, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
947 Return the most-recently-selected non-minibuffer-only frame on CONSOLE.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
948 This will always be the same as (selected-frame device) unless the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
949 selected frame is a minibuffer-only frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
950 CONSOLE defaults to the selected console if omitted.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
951 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
952 (console))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
953 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
954 Lisp_Object result;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
955
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
956 console = wrap_console (decode_console (console));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
957 /* Just in case the machinations in delete_frame_internal() resulted
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
958 in the last-nonminibuf-frame getting out of sync, make sure and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
959 return the selected frame if it's acceptable. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
960 result = Fselected_frame (CONSOLE_SELECTED_DEVICE (XCONSOLE (console)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
961 if (!NILP (result) && !FRAME_MINIBUF_ONLY_P (XFRAME (result)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
962 return result;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
963 return CONSOLE_LAST_NONMINIBUF_FRAME (XCONSOLE (console));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
964 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
965
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
966 DEFUN ("frame-root-window", Fframe_root_window, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
967 Return the root-window of FRAME.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
968 If omitted, FRAME defaults to the currently selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
969 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
970 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
971 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
972 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
973 return FRAME_ROOT_WINDOW (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
974 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
975
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
976 DEFUN ("frame-selected-window", Fframe_selected_window, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
977 Return the selected window of frame object FRAME.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
978 If omitted, FRAME defaults to the currently selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
979 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
980 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
981 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
982 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
983 return FRAME_SELECTED_WINDOW (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
984 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
985
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
986 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
987 set_frame_selected_window (struct frame *f, Lisp_Object window)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
988 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
989 assert (XFRAME (WINDOW_FRAME (XWINDOW (window))) == f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
990 f->selected_window = window;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
991 if (!MINI_WINDOW_P (XWINDOW (window)) || FRAME_MINIBUF_ONLY_P (f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
992 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
993 if (!EQ (f->last_nonminibuf_window, window))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
994 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
995 #ifdef HAVE_TOOLBARS
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
996 MARK_TOOLBAR_CHANGED;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
997 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
998 MARK_GUTTER_CHANGED;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
999 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1000 f->last_nonminibuf_window = window;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1001 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1002 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1003
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1004 DEFUN ("set-frame-selected-window", Fset_frame_selected_window, 2, 2, 0, /*
460
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 450
diff changeset
1005 Set the selected window of FRAME to WINDOW.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1006 If FRAME is nil, the selected frame is used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1007 If FRAME is the selected frame, this makes WINDOW the selected window.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1008 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1009 (frame, window))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1010 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1011 frame = wrap_frame (decode_frame (frame));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1012 CHECK_LIVE_WINDOW (window);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1013
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1014 if (! EQ (frame, WINDOW_FRAME (XWINDOW (window))))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
1015 invalid_argument ("In `set-frame-selected-window', WINDOW is not on FRAME", Qunbound);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1016
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1017 if (XFRAME (frame) == selected_frame ())
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1018 return Fselect_window (window, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1019
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1020 set_frame_selected_window (XFRAME (frame), window);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1021 return window;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1022 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1023
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1024
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1025 DEFUN ("frame-device", Fframe_device, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1026 Return the device that FRAME is on.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1027 If omitted, FRAME defaults to the currently selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1028 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1029 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1030 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1031 return FRAME_DEVICE (decode_frame (frame));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1032 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1033
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1034 int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1035 is_surrogate_for_selected_frame (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1036 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1037 struct device *d = XDEVICE (f->device);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1038 struct frame *dsf = device_selected_frame (d);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1039
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1040 /* Can't be a surrogate for ourselves. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1041 if (f == dsf)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1042 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1043
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1044 if (!FRAME_HAS_MINIBUF_P (dsf) &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1045 f == XFRAME (WINDOW_FRAME (XWINDOW (FRAME_MINIBUF_WINDOW (dsf)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1046 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1047 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1048 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1049 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1050
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1051 static int
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1052 frame_matches_frame_spec (Lisp_Object frame, Lisp_Object type)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1053 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1054 struct frame *f = XFRAME (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1055
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1056 if (WINDOWP (type))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1057 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1058 CHECK_LIVE_WINDOW (type);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1059
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1060 if (EQ (FRAME_MINIBUF_WINDOW (f), type)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1061 /* Check that F either is, or has forwarded
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1062 its focus to, TYPE's frame. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1063 && (EQ (WINDOW_FRAME (XWINDOW (type)), frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1064 || EQ (WINDOW_FRAME (XWINDOW (type)),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1065 FRAME_FOCUS_FRAME (f))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1066 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1067 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1068 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1069 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1070
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1071 #if 0 /* FSFmacs */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1072 if (EQ (type, Qvisible) || EQ (type, Qiconic) || EQ (type, Qvisible_iconic)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1073 || EQ (type, Qvisible_nomini) || EQ (type, Qiconic_nomini)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1074 || EQ (type, Qvisible_iconic_nomini))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1075 FRAME_SAMPLE_VISIBILITY (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1076 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1077
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1078 if (NILP (type))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1079 type = Qnomini;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1080 if (ZEROP (type))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1081 type = Qvisible_iconic;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1082
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1083 if (EQ (type, Qvisible))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1084 return FRAME_VISIBLE_P (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1085 if (EQ (type, Qiconic))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1086 return FRAME_ICONIFIED_P (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1087 if (EQ (type, Qinvisible))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1088 return !FRAME_VISIBLE_P (f) && !FRAME_ICONIFIED_P (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1089 if (EQ (type, Qvisible_iconic))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1090 return FRAME_VISIBLE_P (f) || FRAME_ICONIFIED_P (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1091 if (EQ (type, Qinvisible_iconic))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1092 return !FRAME_VISIBLE_P (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1093
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1094 if (EQ (type, Qnomini))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1095 return !FRAME_MINIBUF_ONLY_P (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1096 if (EQ (type, Qvisible_nomini))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1097 return FRAME_VISIBLE_P (f) && !FRAME_MINIBUF_ONLY_P (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1098 if (EQ (type, Qiconic_nomini))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1099 return FRAME_ICONIFIED_P (f) && !FRAME_MINIBUF_ONLY_P (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1100 if (EQ (type, Qinvisible_nomini))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1101 return !FRAME_VISIBLE_P (f) && !FRAME_ICONIFIED_P (f) &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1102 !FRAME_MINIBUF_ONLY_P (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1103 if (EQ (type, Qvisible_iconic_nomini))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1104 return ((FRAME_VISIBLE_P (f) || FRAME_ICONIFIED_P (f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1105 && !FRAME_MINIBUF_ONLY_P (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1106 if (EQ (type, Qinvisible_iconic_nomini))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1107 return !FRAME_VISIBLE_P (f) && !FRAME_MINIBUF_ONLY_P (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1108
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1109 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1110 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1111
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1112 int
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1113 device_matches_device_spec (Lisp_Object device, Lisp_Object device_spec)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1114 {
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1115 if (EQ (device_spec, Qwindow_system))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1116 return DEVICE_WIN_P (XDEVICE (device));
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1117 if (DEVICEP (device_spec))
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1118 return EQ (device, device_spec);
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1119 if (CONSOLEP (device_spec))
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1120 return EQ (DEVICE_CONSOLE (XDEVICE (device)), device_spec);
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1121 if (valid_console_type_p (device_spec))
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1122 return EQ (DEVICE_TYPE (XDEVICE (device)), device_spec);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1123 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1124 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1125
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1126 /* Return the next frame in the frame list after FRAME.
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1127 WHICH-FRAMES and WHICH-DEVICES control which frames and devices
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1128 are considered; see `next-frame'. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1129
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1130 Lisp_Object
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1131 next_frame (Lisp_Object frame, Lisp_Object which_frames, Lisp_Object which_devices)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1132 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1133 Lisp_Object first = Qnil;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1134 Lisp_Object devcons, concons;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1135 int passed = 0;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1136
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1137 CHECK_LIVE_FRAME (frame);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1138
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1139 DEVICE_LOOP_NO_BREAK (devcons, concons)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1140 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1141 Lisp_Object device = XCAR (devcons);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1142 Lisp_Object frmcons;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1143
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1144 if (!device_matches_device_spec (device, which_devices))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1145 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1146 if (EQ (device, FRAME_DEVICE (XFRAME (frame))))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1147 passed = 1;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1148 continue;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1149 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1150
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1151 DEVICE_FRAME_LOOP (frmcons, XDEVICE (device))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1152 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1153 Lisp_Object f = XCAR (frmcons);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1154
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1155 if (passed)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1156 {
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1157 if (frame_matches_frame_spec (f, which_frames))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1158 return f;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1159 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1160 else
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1161 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1162 if (EQ (frame, f))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1163 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1164 passed = 1;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1165 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1166 else
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1167 {
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1168 if (NILP (first) && frame_matches_frame_spec (f, which_frames))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1169 first = f;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1170 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1171 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1172 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1173 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1174
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1175 if (NILP (first))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1176 /* We went through the whole frame list without finding a single
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1177 acceptable frame. Return the original frame. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1178 return frame;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1179 else
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1180 /* There were no acceptable frames in the list after FRAME; otherwise,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1181 we would have returned directly from the loop. Since FIRST is the last
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1182 acceptable frame in the list, return it. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1183 return first;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1184 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1185
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1186 /* Return the previous frame in the frame list before FRAME.
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1187 WHICH-FRAMES and WHICH-DEVICES control which frames and devices
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1188 are considered; see `next-frame'. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1189
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1190 Lisp_Object
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1191 previous_frame (Lisp_Object frame, Lisp_Object which_frames, Lisp_Object which_devices)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1192 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1193 Lisp_Object devcons, concons;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1194 Lisp_Object last = Qnil;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1195
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1196 CHECK_LIVE_FRAME (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1197
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1198 DEVICE_LOOP_NO_BREAK (devcons, concons)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1199 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1200 Lisp_Object device = XCAR (devcons);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1201 Lisp_Object frmcons;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1202
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1203 if (!device_matches_device_spec (device, which_devices))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1204 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1205 if (EQ (device, FRAME_DEVICE (XFRAME (frame)))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1206 && !NILP (last))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1207 return last;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1208 continue;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1209 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1210
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1211 DEVICE_FRAME_LOOP (frmcons, XDEVICE (device))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1212 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1213 Lisp_Object f = XCAR (frmcons);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1214
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1215 if (EQ (frame, f))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1216 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1217 if (!NILP (last))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1218 return last;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1219 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1220 else
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1221 {
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1222 if (frame_matches_frame_spec (f, which_frames))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1223 last = f;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1224 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1225 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1226 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1227
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1228 if (NILP (last))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1229 /* We went through the whole frame list without finding a single
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1230 acceptable frame. Return the original frame. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1231 return frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1232 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1233 /* There were no acceptable frames in the list before FRAME; otherwise,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1234 we would have returned directly from the loop. Since LAST is the last
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1235 acceptable frame in the list, return it. */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1236 return last;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1237 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1238
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1239 DEFUN ("next-frame", Fnext_frame, 0, 3, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1240 Return the next frame of the right type in the frame list after FRAME.
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1241 WHICH-FRAMES controls which frames are eligible to be returned; all
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1242 others will be skipped. Note that if there is only one eligible
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1243 frame, then `next-frame' called repeatedly will always return
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1244 the same frame, and if there is no eligible frame, then FRAME is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1245 returned.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1246
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1247 Possible values for WHICH-FRAMES are
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1248
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1249 'visible Consider only frames that are visible.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1250 'iconic Consider only frames that are iconic.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1251 'invisible Consider only frames that are invisible
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1252 (this is different from iconic).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1253 'visible-iconic Consider frames that are visible or iconic.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1254 'invisible-iconic Consider frames that are invisible or iconic.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1255 'nomini Consider all frames except minibuffer-only ones.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1256 'visible-nomini Like `visible' but omits minibuffer-only frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1257 'iconic-nomini Like `iconic' but omits minibuffer-only frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1258 'invisible-nomini Like `invisible' but omits minibuffer-only frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1259 'visible-iconic-nomini Like `visible-iconic' but omits minibuffer-only
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1260 frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1261 'invisible-iconic-nomini Like `invisible-iconic' but omits minibuffer-only
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1262 frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1263 any other value Consider all frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1264
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1265 If WHICH-FRAMES is omitted, 'nomini is used. A value for WHICH-FRAMES
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1266 of 0 (a number) is treated like 'iconic, for backwards compatibility.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1267
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1268 If WHICH-FRAMES is a window, include only its own frame and any frame
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1269 now using that window as the minibuffer.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1270
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1271 The optional third argument WHICH-DEVICES further clarifies on which
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1272 devices to search for frames as specified by WHICH-FRAMES.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1273 If nil or omitted, search all devices on FRAME's console.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1274 If a device, only search that device.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1275 If a console, search all devices on that console.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1276 If a device type, search all devices of that type.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1277 If `window-system', search all window-system devices.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1278 Any other non-nil value means search all devices.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1279 */
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1280 (frame, which_frames, which_devices))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1281 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1282 frame = wrap_frame (decode_frame (frame));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1283
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1284 return next_frame (frame, which_frames, which_devices);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1285 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1286
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1287 DEFUN ("previous-frame", Fprevious_frame, 0, 3, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1288 Return the next frame of the right type in the frame list after FRAME.
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1289 WHICH-FRAMES controls which frames are eligible to be returned; all
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1290 others will be skipped. Note that if there is only one eligible
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1291 frame, then `previous-frame' called repeatedly will always return
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1292 the same frame, and if there is no eligible frame, then FRAME is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1293 returned.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1294
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1295 See `next-frame' for an explanation of the WHICH-FRAMES and WHICH-DEVICES
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1296 arguments.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1297 */
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1298 (frame, which_frames, which_devices))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1299 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1300 frame = wrap_frame (decode_frame (frame));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1301
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1302 return previous_frame (frame, which_frames, which_devices);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1303 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1304
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1305 /* Return any frame for which PREDICATE is non-zero, or return Qnil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1306 if there aren't any. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1307
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1308 Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1309 find_some_frame (int (*predicate) (Lisp_Object, void *),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1310 void *closure)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1311 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1312 Lisp_Object framecons, devcons, concons;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1313
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1314 FRAME_LOOP_NO_BREAK (framecons, devcons, concons)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1315 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1316 Lisp_Object frame = XCAR (framecons);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1317
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1318 if ((predicate) (frame, closure))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1319 return frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1320 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1321
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1322 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1323 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1324
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1325
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1326
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1327 /* extern void free_line_insertion_deletion_costs (struct frame *f); */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1328
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1329 /* Return 1 if it is ok to delete frame F;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1330 0 if all frames aside from F are invisible.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1331 (Exception: if F is a stream frame, it's OK to delete if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1332 any other frames exist.) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1333
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1334 int
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1335 other_visible_frames (struct frame *f)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1336 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1337 Lisp_Object frame = wrap_frame (f);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1338
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1339 if (FRAME_STREAM_P (f))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1340 return !EQ (frame, next_frame (frame, Qt, Qt));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1341 return !EQ (frame, next_frame (frame, Qvisible_iconic_nomini, Qt));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1342 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1343
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1344 /* Delete frame F.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1345
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1346 If FORCE is non-zero, allow deletion of the only frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1347
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1348 If CALLED_FROM_DELETE_DEVICE is non-zero, then, if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1349 deleting the last frame on a device, just delete it,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1350 instead of calling `delete-device'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1351
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1352 If FROM_IO_ERROR is non-zero, then the frame is gone due
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1353 to an I/O error. This affects what happens if we exit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1354 (we do an emergency exit instead of `save-buffers-kill-emacs'.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1355 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1356
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1357 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1358 delete_frame_internal (struct frame *f, int force,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1359 int called_from_delete_device,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1360 int from_io_error)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1361 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1362 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1363 int minibuffer_selected;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1364 struct device *d;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1365 struct console *con;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1366 Lisp_Object frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1367 Lisp_Object device;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1368 Lisp_Object console;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1369 struct gcpro gcpro1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1370
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1371 /* OK to delete an already deleted frame. */
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
1372 if (!FRAME_LIVE_P (f))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1373 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1374
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1375 frame = wrap_frame (f);
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
1376
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
1377 if (!force)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
1378 check_allowed_operation (OPERATION_DELETE_OBJECT, frame, Qnil);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
1379
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1380 GCPRO1 (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1381
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1382 device = FRAME_DEVICE (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1383 d = XDEVICE (device);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1384 console = DEVICE_CONSOLE (d);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1385 con = XCONSOLE (console);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1386
545
9a775fb11bb7 [xemacs-hg @ 2001-05-18 04:39:39 by kkm]
kkm
parents: 460
diff changeset
1387 if (!called_from_delete_device
9a775fb11bb7 [xemacs-hg @ 2001-05-18 04:39:39 by kkm]
kkm
parents: 460
diff changeset
1388 && !DEVICE_IMPL_FLAG (d, XDEVIMPF_FRAMELESS_OK))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1389 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1390 /* If we're deleting the only non-minibuffer frame on the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1391 device, delete the device. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1392 if (EQ (frame, next_frame (frame, Qnomini, FRAME_DEVICE (f))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1393 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1394 delete_device_internal (d, force, 0, from_io_error);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1395 UNGCPRO;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1396 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1397 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1398 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1399
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1400 /* In FSF, delete-frame will not normally allow you to delete the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1401 last visible frame. This was too annoying, so we changed it to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1402 only frame. However, this would let people shoot themselves by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1403 deleting all frames which were either visible or iconified and thus
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1404 losing any way of communicating with the still running XEmacs process.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1405 So we put it back. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1406 if (!force && !allow_deletion_of_last_visible_frame &&
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1407 !other_visible_frames (f))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
1408 invalid_operation ("Attempt to delete the sole visible or iconified frame", Qunbound);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1409
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1410 /* Does this frame have a minibuffer, and is it the surrogate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1411 minibuffer for any other frame? */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1412 if (FRAME_HAS_MINIBUF_P (f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1413 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1414 Lisp_Object frmcons, devcons, concons;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1415
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1416 FRAME_LOOP_NO_BREAK (frmcons, devcons, concons)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1417 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1418 Lisp_Object this = XCAR (frmcons);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1419
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1420 if (! EQ (this, frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1421 && EQ (frame, (WINDOW_FRAME
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1422 (XWINDOW
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1423 (FRAME_MINIBUF_WINDOW (XFRAME (this)))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1424 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1425 /* We've found another frame whose minibuffer is on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1426 this frame. */
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
1427 gui_error
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1428 ("Attempt to delete a surrogate minibuffer frame", frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1429 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1430 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1431 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1432
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1433 /* Test for popup frames hanging around. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1434 /* Deletion of a parent frame with popups is deadly. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1435 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1436 Lisp_Object frmcons, devcons, concons;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1437
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1438 FRAME_LOOP_NO_BREAK (frmcons, devcons, concons)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1439 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1440 Lisp_Object this = XCAR (frmcons);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1441
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1442
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1443 if (! EQ (this, frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1444 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1445 struct device *devcons_d = XDEVICE (XCAR (devcons));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1446 if (EQ (frame, DEVMETH_OR_GIVEN (devcons_d, get_frame_parent,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1447 (XFRAME (this)),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1448 Qnil)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1449 /* We've found a popup frame whose parent is this frame. */
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
1450 gui_error
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1451 ("Attempt to delete a frame with live popups", frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1452 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1453 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1454 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1455
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1456 /* Before here, we haven't made any dangerous changes (just checked for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1457 error conditions). Now run the delete-frame-hook. Remember that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1458 user code there could do any number of dangerous things, including
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1459 signalling an error. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1460
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1461 va_run_hook_with_args (Qdelete_frame_hook, 1, frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1462
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1463 if (!FRAME_LIVE_P (f)) /* Make sure the delete-frame-hook didn't */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1464 { /* go ahead and delete anything. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1465 UNGCPRO;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1466 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1467 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1468
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1469 /* Call the delete-device-hook and delete-console-hook now if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1470 appropriate, before we do any dangerous things -- they too could
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1471 signal an error. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1472 if (XINT (Flength (DEVICE_FRAME_LIST (d))) == 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1473 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1474 va_run_hook_with_args (Qdelete_device_hook, 1, device);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1475 if (!FRAME_LIVE_P (f)) /* Make sure the delete-device-hook didn't */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1476 { /* go ahead and delete anything. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1477 UNGCPRO;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1478 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1479 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1480
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1481 if (XINT (Flength (CONSOLE_DEVICE_LIST (con))) == 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1482 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1483 va_run_hook_with_args (Qdelete_console_hook, 1, console);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1484 if (!FRAME_LIVE_P (f)) /* Make sure the delete-console-hook didn't */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1485 { /* go ahead and delete anything. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1486 UNGCPRO;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1487 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1488 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1489 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1490 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1491
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1492 minibuffer_selected = EQ (minibuf_window, Fselected_window (Qnil));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1493
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1494 /* If we were focused on this frame, then we're not any more.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1495 Assume that we lost the focus; that way, the call to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1496 Fselect_frame() below won't end up making us explicitly
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1497 focus on another frame, which is generally undesirable in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1498 a point-to-type world. If our mouse ends up sitting over
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1499 another frame, we will receive a FocusIn event and end up
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1500 making that frame the selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1501
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1502 #### This may not be an ideal solution in a click-to-type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1503 world (in that case, we might want to explicitly choose
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1504 another frame to have the focus, rather than relying on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1505 the WM, which might focus on a frame in a different app
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1506 or focus on nothing at all). But there's no easy way
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1507 to detect which focus model we're running on, and the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1508 alternative is more heinous. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1509
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1510 if (EQ (frame, DEVICE_FRAME_WITH_FOCUS_REAL (d)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1511 DEVICE_FRAME_WITH_FOCUS_REAL (d) = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1512 if (EQ (frame, DEVICE_FRAME_WITH_FOCUS_FOR_HOOKS (d)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1513 DEVICE_FRAME_WITH_FOCUS_FOR_HOOKS (d) = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1514 if (EQ (frame, DEVICE_FRAME_THAT_OUGHT_TO_HAVE_FOCUS (d)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1515 DEVICE_FRAME_THAT_OUGHT_TO_HAVE_FOCUS (d) = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1516
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1517 /* Don't allow the deleted frame to remain selected.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1518 Note that in the former scheme of things, this would
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1519 have caused us to regain the focus. This no longer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1520 applies (see above); I think the new behavior is more
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1521 logical. If someone disagrees, it can always be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1522 changed (or a new user variable can be introduced, ugh.) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1523 if (EQ (frame, DEVICE_SELECTED_FRAME (d)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1524 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1525 Lisp_Object next;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1526
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1527 /* If this is a popup frame, select its parent if possible.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1528 Otherwise, find another visible frame; if none, just take any frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1529 First try the same device, then the same console. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1530
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1531 next = DEVMETH_OR_GIVEN (d, get_frame_parent, (f), Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1532 if (NILP (next) || EQ (next, frame) || ! FRAME_LIVE_P (XFRAME (next)))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1533 next = next_frame (frame, Qvisible, device);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1534 if (NILP (next) || EQ (next, frame))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1535 next = next_frame (frame, Qvisible, console);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1536 if (NILP (next) || EQ (next, frame))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1537 next = next_frame (frame, Qvisible, Qt);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1538 if (NILP (next) || EQ (next, frame))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1539 next = next_frame (frame, Qt, device);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1540 if (NILP (next) || EQ (next, frame))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1541 next = next_frame (frame, Qt, console);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1542 if (NILP (next) || EQ (next, frame))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1543 next = next_frame (frame, Qt, Qt);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1544
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1545 /* if we haven't found another frame at this point
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1546 then there aren't any. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1547 if (NILP (next) || EQ (next, frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1548 ;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1549 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1550 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1551 int did_select = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1552 /* if this is the global selected frame, select another one. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1553 if (EQ (frame, Fselected_frame (Qnil)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1554 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1555 Fselect_frame (next);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1556 did_select = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1557 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1558 /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1559 * If the new frame we just selected is on a different
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1560 * device then we still need to change DEVICE_SELECTED_FRAME(d)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1561 * to a live frame, if there are any left on this device.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1562 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1563 if (!EQ (device, FRAME_DEVICE(XFRAME(next))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1564 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1565 Lisp_Object next_f = next_frame (frame, Qt, device);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1566 if (NILP (next_f) || EQ (next_f, frame))
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1567 set_device_selected_frame (d, Qnil);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1568 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1569 set_device_selected_frame (d, next_f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1570 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1571 else if (! did_select)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1572 set_device_selected_frame (d, next);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1573
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1574 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1575 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1576
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1577 /* Don't allow minibuf_window to remain on a deleted frame. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1578 if (EQ (f->minibuffer_window, minibuf_window))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1579 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1580 struct frame *sel_frame = selected_frame ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1581 Fset_window_buffer (sel_frame->minibuffer_window,
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1582 XWINDOW (minibuf_window)->buffer, Qt);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1583 minibuf_window = sel_frame->minibuffer_window;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1584
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1585 /* If the dying minibuffer window was selected,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1586 select the new one. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1587 if (minibuffer_selected)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1588 Fselect_window (minibuf_window, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1589 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1590
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1591 /* After this point, no errors must be allowed to occur. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1592
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1593 #ifdef HAVE_MENUBARS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1594 free_frame_menubars (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1595 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1596 #ifdef HAVE_SCROLLBARS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1597 free_frame_scrollbars (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1598 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1599 #ifdef HAVE_TOOLBARS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1600 free_frame_toolbars (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1601 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1602 free_frame_gutters (f);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1603 /* Unfortunately deleting the frame will also delete the parent of
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1604 all of the subwindow instances current on the frame. I think this
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1605 can lead to bad things when trying to finalize the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1606 instances. Thus we loop over all instance caches calling the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1607 finalize method for each instance. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1608 free_frame_subwindow_instances (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1609
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1610 /* This must be done before the window and window_mirror structures
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1611 are freed. The scrollbar information is attached to them. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1612 MAYBE_FRAMEMETH (f, delete_frame, (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1613
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1614 /* Mark all the windows that used to be on FRAME as deleted, and then
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1615 remove the reference to them. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1616 delete_all_subwindows (XWINDOW (f->root_window));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1617 f->root_window = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1618
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1619 /* clear out the cached glyph information */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1620 f->subwindow_instance_cache = Qnil;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1621
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1622 /* Remove the frame now from the list. This way, any events generated
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1623 on this frame by the maneuvers below will disperse themselves. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1624
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1625 /* This used to be Fdelq(), but that will cause a seg fault if the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1626 QUIT checker happens to get invoked, because the frame list is in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1627 an inconsistent state. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1628 d->frame_list = delq_no_quit (frame, d->frame_list);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1629 RESET_CHANGED_SET_FLAGS;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1630
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1631 f->visible = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1632
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
1633 free_window_mirror (XWINDOW_MIRROR (f->root_mirror));
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
1634
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1635 /* free_line_insertion_deletion_costs (f); */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1636
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1637 /* If we've deleted the last non-minibuf frame, then try to find
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1638 another one. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1639 if (EQ (frame, CONSOLE_LAST_NONMINIBUF_FRAME (con)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1640 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1641 Lisp_Object frmcons, devcons;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1642
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1643 set_console_last_nonminibuf_frame (con, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1644
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1645 CONSOLE_FRAME_LOOP_NO_BREAK (frmcons, devcons, con)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1646 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1647 Lisp_Object ecran = XCAR (frmcons);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1648 if (!FRAME_MINIBUF_ONLY_P (XFRAME (ecran)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1649 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1650 set_console_last_nonminibuf_frame (con, ecran);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1651 goto double_break_1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1652 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1653 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1654 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1655 double_break_1:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1656
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1657 #if 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1658 /* The following test is degenerate FALSE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1659 if (called_from_delete_device < 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1660 /* then we're being called from delete-console, and we shouldn't
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1661 try to find another default-minibuffer frame for the console.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1662 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1663 con->default_minibuffer_frame = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1664 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1665
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1666 /* If we've deleted this console's default_minibuffer_frame, try to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1667 find another one. Prefer minibuffer-only frames, but also notice
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1668 frames with other windows. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1669 if (EQ (frame, con->default_minibuffer_frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1670 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1671 Lisp_Object frmcons, devcons;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1672 /* The last frame we saw with a minibuffer, minibuffer-only or not. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1673 Lisp_Object frame_with_minibuf;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1674 /* Some frame we found on the same console, or nil if there are none. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1675 Lisp_Object frame_on_same_console;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1676
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1677 frame_on_same_console = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1678 frame_with_minibuf = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1679
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1680 set_console_last_nonminibuf_frame (con, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1681
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1682 CONSOLE_FRAME_LOOP_NO_BREAK (frmcons, devcons, con)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1683 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1684 Lisp_Object this;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1685 struct frame *f1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1686
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1687 this = XCAR (frmcons);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1688 f1 = XFRAME (this);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1689
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1690 /* Consider only frames on the same console
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1691 and only those with minibuffers. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1692 if (FRAME_HAS_MINIBUF_P (f1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1693 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1694 frame_with_minibuf = this;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1695 if (FRAME_MINIBUF_ONLY_P (f1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1696 goto double_break_2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1697 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1698
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1699 frame_on_same_console = this;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1700 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1701 double_break_2:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1702
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1703 if (!NILP (frame_on_same_console))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1704 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1705 /* We know that there must be some frame with a minibuffer out
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1706 there. If this were not true, all of the frames present
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1707 would have to be minibuffer-less, which implies that at some
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1708 point their minibuffer frames must have been deleted, but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1709 that is prohibited at the top; you can't delete surrogate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1710 minibuffer frames. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1711 if (NILP (frame_with_minibuf))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1712 abort ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1713
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1714 con->default_minibuffer_frame = frame_with_minibuf;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1715 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1716 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1717 /* No frames left on this console--say no minibuffer either. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1718 con->default_minibuffer_frame = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1719 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1720
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
1721 /* Nobody should be accessing anything in this object any more, and
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
1722 making all Lisp_Objects Qnil allows for better GC'ing in case a
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
1723 pointer to the dead frame continues to hang around. Zero all
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
1724 other structs in case someone tries to access something through
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
1725 them. */
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
1726
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
1727 nuke_all_frame_slots (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1728 f->framemeths = dead_console_methods;
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
1729
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
1730 note_object_deleted (frame);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
1731
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1732 UNGCPRO;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1733 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1734
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1735 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1736 io_error_delete_frame (Lisp_Object frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1737 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1738 delete_frame_internal (XFRAME (frame), 1, 0, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1739 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1740
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1741 DEFUN ("delete-frame", Fdelete_frame, 0, 2, "", /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1742 Delete FRAME, permanently eliminating it from use.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1743 If omitted, FRAME defaults to the selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1744 A frame may not be deleted if its minibuffer is used by other frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1745 Normally, you cannot delete the last non-minibuffer-only frame (you must
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1746 use `save-buffers-kill-emacs' or `kill-emacs'). However, if optional
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1747 second argument FORCE is non-nil, you can delete the last frame. (This
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1748 will automatically call `save-buffers-kill-emacs'.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1749 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1750 (frame, force))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1751 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1752 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1753 struct frame *f;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1754
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1755 if (NILP (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1756 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1757 f = selected_frame ();
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1758 frame = wrap_frame (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1759 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1760 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1761 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1762 CHECK_FRAME (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1763 f = XFRAME (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1764 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1765
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1766 delete_frame_internal (f, !NILP (force), 0, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1767 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1768 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1769
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1770
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1771 /* Return mouse position in character cell units. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1772
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1773 static int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1774 mouse_pixel_position_1 (struct device *d, Lisp_Object *frame,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1775 int *x, int *y)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1776 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1777 switch (DEVMETH_OR_GIVEN (d, get_mouse_position, (d, frame, x, y), -1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1778 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1779 case 1:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1780 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1781
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1782 case 0:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1783 *frame = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1784 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1785
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1786 case -1:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1787 *frame = DEVICE_SELECTED_FRAME (d);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1788 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1789
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1790 default:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1791 abort (); /* method is incorrectly written */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1792 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1793
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1794 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1795 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1796
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1797 DEFUN ("mouse-pixel-position", Fmouse_pixel_position, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1798 Return a list (WINDOW X . Y) giving the current mouse window and position.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1799 The position is given in pixel units, where (0, 0) is the upper-left corner
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1800 of the window.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1801
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1802 When the cursor is not over a window, the return value is a list (nil nil).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1803
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1804 DEVICE specifies the device on which to read the mouse position, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1805 defaults to the selected device. If the device is a mouseless terminal
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1806 or XEmacs hasn't been programmed to read its mouse position, it returns
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1807 the device's selected window for WINDOW and nil for X and Y.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1808 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1809 (device))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1810 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1811 struct device *d = decode_device (device);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1812 Lisp_Object frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1813 Lisp_Object window = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1814 Lisp_Object x = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1815 Lisp_Object y = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1816 int intx, inty;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1817
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1818 if (mouse_pixel_position_1 (d, &frame, &intx, &inty) > 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1819 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1820 struct window *w =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1821 find_window_by_pixel_pos (intx, inty, XFRAME (frame)->root_window);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1822 if (w)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1823 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1824 window = wrap_window (w);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1825
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1826 /* Adjust the position to be relative to the window. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1827 intx -= w->pixel_left;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1828 inty -= w->pixel_top;
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1829 x = make_int (intx);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1830 y = make_int (inty);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1831 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1832 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1833 else if (FRAMEP (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1834 window = FRAME_SELECTED_WINDOW (XFRAME (frame));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1835
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1836 return Fcons (window, Fcons (x, y));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1837 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1838
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1839 DEFUN ("mouse-position", Fmouse_position, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1840 Return a list (WINDOW X . Y) giving the current mouse window and position.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1841 The position is of a character under cursor, where (0, 0) is the upper-left
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1842 corner of the window.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1843
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1844 When the cursor is not over a character, or not over a window, the return
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1845 value is a list (nil nil).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1846
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1847 DEVICE specifies the device on which to read the mouse position, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1848 defaults to the selected device. If the device is a mouseless terminal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1849 or Emacs hasn't been programmed to read its mouse position, it returns
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1850 the device's selected window for WINDOW and nil for X and Y.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1851 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1852 (device))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1853 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1854 struct device *d = decode_device (device);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1855 struct window *w;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1856 Lisp_Object frame, window = Qnil, lisp_x = Qnil, lisp_y = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1857 int x, y, obj_x, obj_y;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 617
diff changeset
1858 Charbpos charbpos, closest;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1859 Charcount modeline_closest;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1860 Lisp_Object obj1, obj2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1861
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1862 if (mouse_pixel_position_1 (d, &frame, &x, &y) > 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1863 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1864 int res = pixel_to_glyph_translation (XFRAME (frame), x, y, &x, &y,
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 617
diff changeset
1865 &obj_x, &obj_y, &w, &charbpos,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1866 &closest, &modeline_closest,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1867 &obj1, &obj2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1868 if (res == OVER_TEXT)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1869 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1870 lisp_x = make_int (x);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1871 lisp_y = make_int (y);
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1872 window = wrap_window (w);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1873 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1874 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1875 else if (FRAMEP (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1876 window = FRAME_SELECTED_WINDOW (XFRAME (frame));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1877
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1878 return Fcons (window, Fcons (lisp_x, lisp_y));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1879 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1880
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1881 DEFUN ("mouse-position-as-motion-event", Fmouse_position_as_motion_event, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1882 Return the current mouse position as a motion event.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1883 This allows you to call the standard event functions such as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1884 `event-over-toolbar-p' to determine where the mouse is.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1885
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1886 DEVICE specifies the device on which to read the mouse position, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1887 defaults to the selected device. If the mouse position can't be determined
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1888 \(e.g. DEVICE is a TTY device), nil is returned instead of an event.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1889 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1890 (device))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1891 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1892 struct device *d = decode_device (device);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1893 Lisp_Object frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1894 int intx, inty;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1895
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1896 if (mouse_pixel_position_1 (d, &frame, &intx, &inty))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1897 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1898 Lisp_Object event = Fmake_event (Qnil, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1899 XEVENT (event)->event_type = pointer_motion_event;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1900 XEVENT (event)->channel = frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1901 XEVENT (event)->event.motion.x = intx;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1902 XEVENT (event)->event.motion.y = inty;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1903 return event;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1904 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1905 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1906 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1907 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1908
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1909 DEFUN ("set-mouse-position", Fset_mouse_position, 3, 3, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1910 Move the mouse pointer to the center of character cell (X,Y) in WINDOW.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1911 Note, this is a no-op for an X frame that is not visible.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1912 If you have just created a frame, you must wait for it to become visible
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1913 before calling this function on it, like this.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1914 (while (not (frame-visible-p frame)) (sleep-for .5))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1915 Note also: Warping the mouse is contrary to the ICCCM, so be very sure
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1916 that the behavior won't end up being obnoxious!
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1917 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1918 (window, x, y))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1919 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1920 struct window *w;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1921 int pix_x, pix_y;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1922
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1923 CHECK_LIVE_WINDOW (window);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1924 CHECK_INT (x);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1925 CHECK_INT (y);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1926
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1927 /* Warping the mouse will cause EnterNotify and Focus events under X. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1928 w = XWINDOW (window);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1929 glyph_to_pixel_translation (w, XINT (x), XINT (y), &pix_x, &pix_y);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1930
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1931 MAYBE_FRAMEMETH (XFRAME (w->frame), set_mouse_position, (w, pix_x, pix_y));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1932
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1933 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1934 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1935
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1936 DEFUN ("set-mouse-pixel-position", Fset_mouse_pixel_position, 3, 3, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1937 Move the mouse pointer to pixel position (X,Y) in WINDOW.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1938 Note, this is a no-op for an X frame that is not visible.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1939 If you have just created a frame, you must wait for it to become visible
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1940 before calling this function on it, like this.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1941 (while (not (frame-visible-p frame)) (sleep-for .5))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1942 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1943 (window, x, y))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1944 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1945 struct window *w;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1946
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1947 CHECK_LIVE_WINDOW (window);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1948 CHECK_INT (x);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1949 CHECK_INT (y);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1950
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1951 /* Warping the mouse will cause EnterNotify and Focus events under X. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1952 w = XWINDOW (window);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1953 FRAMEMETH (XFRAME (w->frame), set_mouse_position, (w, XINT (x), XINT (y)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1954
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1955 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1956 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1957
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1958 DEFUN ("make-frame-visible", Fmake_frame_visible, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1959 Make the frame FRAME visible (assuming it is an X-window).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1960 If omitted, FRAME defaults to the currently selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1961 Also raises the frame so that nothing obscures it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1962 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1963 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1964 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1965 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1966
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1967 MAYBE_FRAMEMETH (f, make_frame_visible, (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1968 return frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1969 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1970
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1971 DEFUN ("make-frame-invisible", Fmake_frame_invisible, 0, 2, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1972 Unconditionally removes frame from the display (assuming it is an X-window).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1973 If omitted, FRAME defaults to the currently selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1974 If what you want to do is iconify the frame (if the window manager uses
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1975 icons) then you should call `iconify-frame' instead.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1976 Normally you may not make FRAME invisible if all other frames are invisible
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1977 and uniconified, but if the second optional argument FORCE is non-nil,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1978 you may do so.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1979 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1980 (frame, force))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1981 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1982 struct frame *f, *sel_frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1983 struct device *d;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1984
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1985 f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1986 d = XDEVICE (FRAME_DEVICE (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1987 sel_frame = XFRAME (DEVICE_SELECTED_FRAME (d));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1988
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1989 if (NILP (force) && !other_visible_frames (f))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
1990 invalid_operation ("Attempt to make invisible the sole visible or iconified frame", Qunbound);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1991
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1992 /* Don't allow minibuf_window to remain on a deleted frame. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1993 if (EQ (f->minibuffer_window, minibuf_window))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1994 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1995 Fset_window_buffer (sel_frame->minibuffer_window,
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1996 XWINDOW (minibuf_window)->buffer, Qt);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1997 minibuf_window = sel_frame->minibuffer_window;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1998 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1999
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2000 MAYBE_FRAMEMETH (f, make_frame_invisible, (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2001
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2002 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2003 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2004
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2005 DEFUN ("iconify-frame", Ficonify_frame, 0, 1, "", /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2006 Make the frame FRAME into an icon, if the window manager supports icons.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2007 If omitted, FRAME defaults to the currently selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2008 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2009 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2010 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2011 struct frame *f, *sel_frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2012 struct device *d;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2013
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2014 f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2015 d = XDEVICE (FRAME_DEVICE (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2016 sel_frame = XFRAME (DEVICE_SELECTED_FRAME (d));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2017
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2018 /* Don't allow minibuf_window to remain on a deleted frame. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2019 if (EQ (f->minibuffer_window, minibuf_window))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2020 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2021 Fset_window_buffer (sel_frame->minibuffer_window,
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2022 XWINDOW (minibuf_window)->buffer, Qt);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2023 minibuf_window = sel_frame->minibuffer_window;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2024 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2025
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2026 MAYBE_FRAMEMETH (f, iconify_frame, (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2027
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2028 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2029 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2030
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2031 DEFUN ("deiconify-frame", Fdeiconify_frame, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2032 Open (de-iconify) the iconified frame FRAME.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2033 Under X, this is currently the same as `make-frame-visible'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2034 If omitted, FRAME defaults to the currently selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2035 Also raises the frame so that nothing obscures it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2036 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2037 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2038 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2039 return Fmake_frame_visible (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2040 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2041
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2042 /* FSF returns 'icon for iconized frames. What a crock! */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2043
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2044 DEFUN ("frame-visible-p", Fframe_visible_p, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2045 Return non NIL if FRAME is now "visible" (actually in use for display).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2046 A frame that is not visible is not updated, and, if it works through a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2047 window system, may not show at all.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2048 N.B. Under X "visible" means Mapped. It the window is mapped but not
460
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 450
diff changeset
2049 actually visible on screen then `frame-visible-p' returns 'hidden.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2050 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2051 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2052 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2053 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2054 int visible = FRAMEMETH_OR_GIVEN (f, frame_visible_p, (f), f->visible);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2055 return visible ? ( visible > 0 ? Qt : Qhidden ) : Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2056 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2057
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2058 DEFUN ("frame-totally-visible-p", Fframe_totally_visible_p, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2059 Return t if frame is not obscured by any other window system windows.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2060 Always returns t for tty frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2061 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2062 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2063 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2064 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2065 return (FRAMEMETH_OR_GIVEN (f, frame_totally_visible_p, (f), f->visible)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2066 ? Qt : Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2067 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2068
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2069 DEFUN ("frame-iconified-p", Fframe_iconified_p, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2070 Return t if FRAME is iconified.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2071 Not all window managers use icons; some merely unmap the window, so this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2072 function is not the inverse of `frame-visible-p'. It is possible for a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2073 frame to not be visible and not be iconified either. However, if the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2074 frame is iconified, it will not be visible.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2075 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2076 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2077 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2078 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2079 if (f->visible)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2080 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2081 f->iconified = FRAMEMETH_OR_GIVEN (f, frame_iconified_p, (f), 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2082 return f->iconified ? Qt : Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2083 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2084
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2085 DEFUN ("visible-frame-list", Fvisible_frame_list, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2086 Return a list of all frames now "visible" (being updated).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2087 If DEVICE is specified only frames on that device will be returned.
460
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 450
diff changeset
2088 Note that under virtual window managers not all these frames are
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 450
diff changeset
2089 necessarily really updated.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2090 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2091 (device))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2092 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2093 Lisp_Object devcons, concons;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2094 struct frame *f;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2095 Lisp_Object value;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2096
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2097 value = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2098
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2099 DEVICE_LOOP_NO_BREAK (devcons, concons)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2100 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2101 assert (DEVICEP (XCAR (devcons)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2102
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2103 if (NILP (device) || EQ (device, XCAR (devcons)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2104 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2105 Lisp_Object frmcons;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2106
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2107 DEVICE_FRAME_LOOP (frmcons, XDEVICE (XCAR (devcons)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2108 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2109 Lisp_Object frame = XCAR (frmcons);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2110 f = XFRAME (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2111 if (FRAME_VISIBLE_P(f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2112 value = Fcons (frame, value);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2113 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2114 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2115 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2116
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2117 return value;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2118 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2119
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2120
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2121 DEFUN ("raise-frame", Fraise_frame, 0, 1, "", /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2122 Bring FRAME to the front, so it occludes any frames it overlaps.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2123 If omitted, FRAME defaults to the currently selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2124 If FRAME is invisible, make it visible.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2125 If Emacs is displaying on an ordinary terminal or some other device which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2126 doesn't support multiple overlapping frames, this function does nothing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2127 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2128 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2129 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2130 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2131
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2132 /* Do like the documentation says. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2133 Fmake_frame_visible (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2134 MAYBE_FRAMEMETH (f, raise_frame, (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2135 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2136 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2137
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2138 DEFUN ("lower-frame", Flower_frame, 0, 1, "", /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2139 Send FRAME to the back, so it is occluded by any frames that overlap it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2140 If omitted, FRAME defaults to the currently selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2141 If Emacs is displaying on an ordinary terminal or some other device which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2142 doesn't support multiple overlapping frames, this function does nothing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2143 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2144 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2145 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2146 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2147
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2148 MAYBE_FRAMEMETH (f, lower_frame, (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2149 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2150 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2151
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2152
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2153 DEFUN ("disable-frame", Fdisable_frame, 1, 1, 0, /*
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2154 Disable frame FRAME, so that it cannot have the focus or receive user input.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2155 This is normally used during modal dialog boxes.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2156 WARNING: Be very careful not to wedge XEmacs!
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2157 Use an `unwind-protect' that re-enables the frame to avoid this.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2158 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2159 (frame))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2160 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2161 struct frame *f = decode_frame (frame);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2162
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2163 f->disabled = 1;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2164 MAYBE_FRAMEMETH (f, disable_frame, (f));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2165 return Qnil;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2166 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2167
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2168 DEFUN ("enable-frame", Fenable_frame, 1, 1, 0, /*
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2169 Enable frame FRAME, so that it can have the focus and receive user input.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2170 Frames are normally enabled, unless explicitly disabled using `disable-frame'.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2171 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2172 (frame))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2173 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2174 struct frame *f = decode_frame (frame);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2175 f->disabled = 0;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2176 MAYBE_FRAMEMETH (f, enable_frame, (f));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2177 return Qnil;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2178 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2179
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2180 /* Ben thinks there is no need for `redirect-frame-focus' or `frame-focus',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2181 crockish FSFmacs functions. See summary on focus in event-stream.c. */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2182
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2183 DEFUN ("print-job-page-number", Fprint_job_page_number, 1, 1, 0, /*
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2184 Return current page number for the print job FRAME.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2185 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2186 (frame))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2187 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2188 CHECK_PRINTER_FRAME (frame);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2189 return make_int (FRAME_PAGENUMBER (XFRAME (frame)));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2190 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2191
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2192 DEFUN ("print-job-eject-page", Fprint_job_eject_page, 1, 1, 0, /*
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2193 Eject page in the print job FRAME.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2194 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2195 (frame))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2196 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2197 struct frame *f;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2198
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2199 CHECK_PRINTER_FRAME (frame);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2200 f = XFRAME (frame);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2201 FRAMEMETH (f, eject_page, (f));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2202 FRAME_SET_PAGENUMBER (f, 1 + FRAME_PAGENUMBER (f));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2203 f->clear = 1;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2204
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2205 return Qnil;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2206 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2207
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2208
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2209 /***************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2210 /* frame properties */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2211 /***************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2212
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2213 static void internal_set_frame_size (struct frame *f, int cols, int rows,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2214 int pretend);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2215
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2216 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2217 store_minibuf_frame_prop (struct frame *f, Lisp_Object val)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2218 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2219 Lisp_Object frame = wrap_frame (f);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2220
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2221
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2222 if (WINDOWP (val))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2223 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2224 if (! MINI_WINDOW_P (XWINDOW (val)))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
2225 gui_error
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2226 ("Surrogate minibuffer windows must be minibuffer windows",
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2227 val);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2228
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2229 if (FRAME_HAS_MINIBUF_P (f) || FRAME_MINIBUF_ONLY_P (f))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
2230 gui_error
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2231 ("Can't change the surrogate minibuffer of a frame with its own minibuffer", frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2232
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2233 /* Install the chosen minibuffer window, with proper buffer. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2234 f->minibuffer_window = val;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2235 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2236 else if (EQ (val, Qt))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2237 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2238 if (FRAME_HAS_MINIBUF_P (f) || FRAME_MINIBUF_ONLY_P (f))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
2239 gui_error
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2240 ("Frame already has its own minibuffer", frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2241 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2242 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2243 setup_normal_frame (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2244 f->mirror_dirty = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2245
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2246 update_frame_window_mirror (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2247 internal_set_frame_size (f, f->width, f->height, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2248 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2249 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2250 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2251
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2252 #if 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2253
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2254 /* possible code if you want to have symbols such as `default-background'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2255 map to setting the background of `default', etc. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2256
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2257 static int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2258 dissect_as_face_setting (Lisp_Object sym, Lisp_Object *face_out,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2259 Lisp_Object *face_prop_out)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2260 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2261 Lisp_Object list = Vbuilt_in_face_specifiers;
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2262 Lisp_Object s;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2263
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2264 if (!SYMBOLP (sym))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2265 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2266
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2267 s = symbol_name (XSYMBOL (sym));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2268
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2269 while (!NILP (list))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2270 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2271 Lisp_Object prop = Fcar (list);
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2272 Lisp_Object prop_name;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2273
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2274 if (!SYMBOLP (prop))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2275 continue;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2276 prop_name = symbol_name (XSYMBOL (prop));
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2277 if (XSTRING_LENGTH (s) > XSTRING_LENGTH (prop_name) + 1
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2278 && !memcmp (XSTRING_DATA (prop_name),
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2279 XSTRING_DATA (s) + XSTRING_LENGTH (s)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2280 - XSTRING_LENGTH (prop_name),
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2281 XSTRING_LENGTH (prop_name))
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2282 && XSTRING_DATA (s)[XSTRING_LENGTH (s) - XSTRING_LENGTH (prop_name)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2283 - 1] == '-')
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2284 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2285 Lisp_Object face =
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2286 Ffind_face (make_string (XSTRING_DATA (s),
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2287 XSTRING_LENGTH (s)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2288 - XSTRING_LENGTH (prop_name)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2289 - 1));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2290 if (!NILP (face))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2291 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2292 *face_out = face;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2293 *face_prop_out = prop;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2294 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2295 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2296 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2297
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2298 list = Fcdr (list);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2299 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2300
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2301 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2302 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2303
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2304 #endif /* 0 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2305
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2306 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2307 get_property_alias (Lisp_Object prop)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2308 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2309 while (1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2310 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2311 Lisp_Object alias = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2312
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2313 if (SYMBOLP (prop))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2314 alias = Fget (prop, Qframe_property_alias, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2315 if (NILP (alias))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2316 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2317 prop = alias;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2318 QUIT;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2319 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2320
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2321 return prop;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2322 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2323
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2324 /* #### Using this to modify the internal border width has no effect
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2325 because the change isn't propagated to the windows. Are there
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2326 other properties which this claims to handle, but doesn't?
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2327
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2328 But of course. This stuff needs more work, but it's a lot closer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2329 to sanity now than before with the horrible frame-params stuff. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2330
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2331 DEFUN ("set-frame-properties", Fset_frame_properties, 2, 2, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2332 Change some properties of a frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2333 PLIST is a property list.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2334 You can also change frame properties individually using `set-frame-property',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2335 but it may be more efficient to change many properties at once.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2336
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2337 Frame properties can be retrieved using `frame-property' or `frame-properties'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2338
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2339 The following symbols etc. have predefined meanings:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2340
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2341 name Name of the frame. Used with X resources.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2342 Unchangeable after creation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2343
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2344 height Height of the frame, in lines.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2345
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2346 width Width of the frame, in characters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2347
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2348 minibuffer Gives the minibuffer behavior for this frame. Either
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2349 t (frame has its own minibuffer), `only' (frame is
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2350 a minibuffer-only frame), `none' (frame has no minibuffer)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2351 or a window (frame uses that window, which is on another
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2352 frame, as the minibuffer).
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2353
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2354 unsplittable If non-nil, frame cannot be split by `display-buffer'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2355
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2356 current-display-table, menubar-visible-p, left-margin-width,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2357 right-margin-width, minimum-line-ascent, minimum-line-descent,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2358 use-left-overflow, use-right-overflow, scrollbar-width, scrollbar-height,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2359 default-toolbar, top-toolbar, bottom-toolbar, left-toolbar, right-toolbar,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2360 default-toolbar-height, default-toolbar-width, top-toolbar-height,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2361 bottom-toolbar-height, left-toolbar-width, right-toolbar-width,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2362 default-toolbar-visible-p, top-toolbar-visible-p, bottom-toolbar-visible-p,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2363 left-toolbar-visible-p, right-toolbar-visible-p, toolbar-buttons-captioned-p,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2364 top-toolbar-border-width, bottom-toolbar-border-width,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2365 left-toolbar-border-width, right-toolbar-border-width,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2366 modeline-shadow-thickness, has-modeline-p,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2367 default-gutter, top-gutter, bottom-gutter, left-gutter, right-gutter,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2368 default-gutter-height, default-gutter-width, top-gutter-height,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2369 bottom-gutter-height, left-gutter-width, right-gutter-width,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2370 default-gutter-visible-p, top-gutter-visible-p, bottom-gutter-visible-p,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2371 left-gutter-visible-p, right-gutter-visible-p, top-gutter-border-width,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2372 bottom-gutter-border-width, left-gutter-border-width, right-gutter-border-width,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2373 [Giving the name of any built-in specifier variable is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2374 equivalent to calling `set-specifier' on the specifier,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2375 with a locale of FRAME. Giving the name to `frame-property'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2376 calls `specifier-instance' on the specifier.]
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2377
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2378 text-pointer-glyph, nontext-pointer-glyph, modeline-pointer-glyph,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2379 selection-pointer-glyph, busy-pointer-glyph, toolbar-pointer-glyph,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2380 menubar-pointer-glyph, scrollbar-pointer-glyph, gc-pointer-glyph,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2381 octal-escape-glyph, control-arrow-glyph, invisible-text-glyph,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2382 hscroll-glyph, truncation-glyph, continuation-glyph
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2383 [Giving the name of any glyph variable is equivalent to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2384 calling `set-glyph-image' on the glyph, with a locale
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2385 of FRAME. Giving the name to `frame-property' calls
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2386 `glyph-image-instance' on the glyph.]
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2387
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2388 [default foreground], [default background], [default font],
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2389 [modeline foreground], [modeline background], [modeline font],
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2390 etc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2391 [Giving a vector of a face and a property is equivalent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2392 to calling `set-face-property' on the face and property,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2393 with a locale of FRAME. Giving the vector to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2394 `frame-property' calls `face-property-instance' on the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2395 face and property.]
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2396
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2397 Finally, if a frame property symbol has the property `frame-property-alias'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2398 on it, then the value will be used in place of that symbol when looking
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2399 up and setting frame property values. This allows you to alias one
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2400 frame property name to another.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2401
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2402 See the variables `default-x-frame-plist', `default-tty-frame-plist'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2403 and `default-mswindows-frame-plist' for a description of the properties
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2404 recognized for particular types of frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2405 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2406 (frame, plist))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2407 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2408 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2409 Lisp_Object tail;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2410 Lisp_Object *tailp;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2411 struct gcpro gcpro1, gcpro2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2412
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2413 frame = wrap_frame (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2414 GCPRO2 (frame, plist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2415 Fcheck_valid_plist (plist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2416 plist = Fcopy_sequence (plist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2417 Fcanonicalize_lax_plist (plist, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2418 for (tail = plist; !NILP (tail); tail = Fcdr (Fcdr (tail)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2419 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2420 Lisp_Object prop = Fcar (tail);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2421 Lisp_Object val = Fcar (Fcdr (tail));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2422
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2423 prop = get_property_alias (prop);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2424
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2425 #if 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2426 /* mly wants this, but it's not reasonable to change the name of a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2427 frame after it has been created, because the old name was used
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2428 for resource lookup. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2429 if (EQ (prop, Qname))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2430 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2431 CHECK_STRING (val);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2432 f->name = val;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2433 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2434 #endif /* 0 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2435 if (EQ (prop, Qminibuffer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2436 store_minibuf_frame_prop (f, val);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2437 if (EQ (prop, Qunsplittable))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2438 f->no_split = !NILP (val);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2439 if (EQ (prop, Qbuffer_predicate))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2440 f->buffer_predicate = val;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2441 if (SYMBOLP (prop) && EQ (Fbuilt_in_variable_type (prop),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2442 Qconst_specifier))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2443 call3 (Qset_specifier, Fsymbol_value (prop), val, frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2444 if (SYMBOLP (prop) && !NILP (Fget (prop, Qconst_glyph_variable, Qnil)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2445 call3 (Qset_glyph_image, Fsymbol_value (prop), val, frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2446 if (VECTORP (prop) && XVECTOR_LENGTH (prop) == 2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2447 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2448 Lisp_Object face_prop = XVECTOR_DATA (prop)[1];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2449 CHECK_SYMBOL (face_prop);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2450 call4 (Qset_face_property,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2451 Fget_face (XVECTOR_DATA (prop)[0]),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2452 face_prop, val, frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2453 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2454 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2455
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2456 MAYBE_FRAMEMETH (f, set_frame_properties, (f, plist));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2457 for (tailp = &plist; !NILP (*tailp);)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2458 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2459 Lisp_Object *next_tailp;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2460 Lisp_Object next;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2461 Lisp_Object prop;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2462
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2463 next = Fcdr (*tailp);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2464 CHECK_CONS (next);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2465 next_tailp = &XCDR (next);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2466 prop = Fcar (*tailp);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2467
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2468 prop = get_property_alias (prop);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2469
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2470 if (EQ (prop, Qminibuffer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2471 || EQ (prop, Qunsplittable)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2472 || EQ (prop, Qbuffer_predicate)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2473 || EQ (prop, Qheight)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2474 || EQ (prop, Qwidth)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2475 || (SYMBOLP (prop) && EQ (Fbuilt_in_variable_type (prop),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2476 Qconst_specifier))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2477 || (SYMBOLP (prop) && !NILP (Fget (prop, Qconst_glyph_variable,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2478 Qnil)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2479 || (VECTORP (prop) && XVECTOR_LENGTH (prop) == 2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2480 || FRAMEMETH_OR_GIVEN (f, internal_frame_property_p, (f, prop), 0))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2481 *tailp = *next_tailp;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2482 tailp = next_tailp;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2483 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2484
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2485 f->plist = nconc2 (plist, f->plist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2486 Fcanonicalize_lax_plist (f->plist, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2487 UNGCPRO;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2488 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2489 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2490
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2491 DEFUN ("frame-property", Fframe_property, 2, 3, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2492 Return FRAME's value for property PROPERTY.
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2493 Return DEFAULT if there is no such property.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2494 See `set-frame-properties' for the built-in property names.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2495 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2496 (frame, property, default_))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2497 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2498 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2499 Lisp_Object value;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2500
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2501 frame = wrap_frame (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2502
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2503 property = get_property_alias (property);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2504
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2505 if (EQ (Qname, property)) return f->name;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2506
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2507 if (EQ (Qheight, property) || EQ (Qwidth, property))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2508 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2509 if (window_system_pixelated_geometry (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2510 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2511 int width, height;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2512 pixel_to_real_char_size (f, FRAME_PIXWIDTH (f), FRAME_PIXHEIGHT (f),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2513 &width, &height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2514 return make_int (EQ (Qheight, property) ? height: width);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2515 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2516 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2517 return make_int (EQ (Qheight, property) ?
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2518 FRAME_HEIGHT (f) :
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2519 FRAME_WIDTH (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2520 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2521
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2522 /* NOTE: FSF returns Qnil instead of Qt for FRAME_HAS_MINIBUF_P.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2523 This is over-the-top bogosity, because it's inconsistent with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2524 the semantics of `minibuffer' when passed to `make-frame'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2525 Returning Qt makes things consistent. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2526 if (EQ (Qminibuffer, property))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2527 return (FRAME_MINIBUF_ONLY_P (f) ? Qonly :
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2528 FRAME_HAS_MINIBUF_P (f) ? Qt :
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2529 FRAME_MINIBUF_WINDOW (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2530 if (EQ (Qunsplittable, property))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2531 return FRAME_NO_SPLIT_P (f) ? Qt : Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2532 if (EQ (Qbuffer_predicate, property))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2533 return f->buffer_predicate;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2534
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2535 if (SYMBOLP (property))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2536 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2537 if (EQ (Fbuilt_in_variable_type (property), Qconst_specifier))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2538 return Fspecifier_instance (Fsymbol_value (property),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2539 frame, default_, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2540 if (!NILP (Fget (property, Qconst_glyph_variable, Qnil)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2541 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2542 Lisp_Object glyph = Fsymbol_value (property);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2543 CHECK_GLYPH (glyph);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2544 return Fspecifier_instance (XGLYPH_IMAGE (glyph),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2545 frame, default_, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2546 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2547 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2548
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2549 if (VECTORP (property) && XVECTOR_LENGTH (property) == 2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2550 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2551 Lisp_Object face_prop = XVECTOR_DATA (property)[1];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2552 CHECK_SYMBOL (face_prop);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2553 return call3 (Qface_property_instance,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2554 Fget_face (XVECTOR_DATA (property)[0]),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2555 face_prop, frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2556 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2557
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2558 if (HAS_FRAMEMETH_P (f, frame_property))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2559 if (!UNBOUNDP (value = FRAMEMETH (f, frame_property, (f, property))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2560 return value;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2561
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2562 if (!UNBOUNDP (value = external_plist_get (&f->plist, property, 1, ERROR_ME)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2563 return value;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2564
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2565 return default_;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2566 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2567
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2568 DEFUN ("frame-properties", Fframe_properties, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2569 Return a property list of the properties of FRAME.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2570 Do not modify this list; use `set-frame-property' instead.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2571 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2572 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2573 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2574 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2575 Lisp_Object result = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2576 struct gcpro gcpro1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2577
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2578 GCPRO1 (result);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2579
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2580 frame = wrap_frame (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2581
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2582 /* #### for the moment (since old code uses `frame-parameters'),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2583 we call `copy-sequence' on f->plist. That allows frame-parameters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2584 to destructively convert the plist into an alist, which is more
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2585 efficient than doing it non-destructively. At some point we
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2586 should remove the call to copy-sequence. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2587 result = Fcopy_sequence (f->plist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2588
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2589 /* #### should we be adding all the specifiers and glyphs?
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2590 That would entail having a list of them all. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2591 if (HAS_FRAMEMETH_P (f, frame_properties))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2592 result = nconc2 (FRAMEMETH (f, frame_properties, (f)), result);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2593
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2594 if (!NILP (f->buffer_predicate))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2595 result = cons3 (Qbuffer_predicate, f->buffer_predicate, result);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2596
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2597 if (FRAME_NO_SPLIT_P (f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2598 result = cons3 (Qunsplittable, Qt, result);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2599
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2600 /* NOTE: FSF returns Qnil instead of Qt for FRAME_HAS_MINIBUF_P.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2601 This is over-the-top bogosity, because it's inconsistent with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2602 the semantics of `minibuffer' when passed to `make-frame'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2603 Returning Qt makes things consistent. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2604 result = cons3 (Qminibuffer,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2605 (FRAME_MINIBUF_ONLY_P (f) ? Qonly :
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2606 FRAME_HAS_MINIBUF_P (f) ? Qt :
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2607 FRAME_MINIBUF_WINDOW (f)),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2608 result);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2609 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2610 int width, height;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2611
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2612 if (window_system_pixelated_geometry (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2613 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2614 pixel_to_real_char_size (f, FRAME_PIXWIDTH (f), FRAME_PIXHEIGHT (f),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2615 &width, &height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2616 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2617 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2618 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2619 height = FRAME_HEIGHT (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2620 width = FRAME_WIDTH (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2621 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2622 result = cons3 (Qwidth , make_int (width), result);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2623 result = cons3 (Qheight, make_int (height), result);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2624 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2625
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2626 result = cons3 (Qname, f->name, result);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2627
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2628 UNGCPRO;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2629 return result;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2630 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2631
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2632
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2633 DEFUN ("frame-pixel-height", Fframe_pixel_height, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2634 Return the height in pixels of FRAME.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2635 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2636 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2637 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2638 return make_int (decode_frame (frame)->pixheight);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2639 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2640
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2641 DEFUN ("frame-pixel-width", Fframe_pixel_width, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2642 Return the width in pixels of FRAME.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2643 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2644 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2645 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2646 return make_int (decode_frame (frame)->pixwidth);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2647 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2648
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2649 DEFUN ("frame-name", Fframe_name, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2650 Return the name of FRAME (defaulting to the selected frame).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2651 This is not the same as the `title' of the frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2652 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2653 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2654 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2655 return decode_frame (frame)->name;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2656 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2657
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2658 DEFUN ("frame-modified-tick", Fframe_modified_tick, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2659 Return FRAME's tick counter, incremented for each change to the frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2660 Each frame has a tick counter which is incremented each time the frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2661 is resized, a window is resized, added, or deleted, a face is changed,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2662 `set-window-buffer' or `select-window' is called on a window in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2663 frame, the window-start of a window in the frame has changed, or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2664 anything else interesting has happened. It wraps around occasionally.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2665 No argument or nil as argument means use selected frame as FRAME.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2666 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2667 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2668 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2669 return make_int (decode_frame (frame)->modiff);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2670 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2671
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2672 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2673 internal_set_frame_size (struct frame *f, int cols, int rows, int pretend)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2674 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2675 /* An explicit size change cancels any pending frame size adjustment */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2676 CLEAR_FRAME_SIZE_SLIPPED(f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2677
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2678 if (pretend || !HAS_FRAMEMETH_P (f, set_frame_size))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2679 change_frame_size (f, rows, cols, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2680 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2681 FRAMEMETH (f, set_frame_size, (f, cols, rows));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2682 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2683
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2684 DEFUN ("set-frame-height", Fset_frame_height, 2, 3, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2685 Specify that the frame FRAME has LINES lines.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2686 Optional third arg non-nil means that redisplay should use LINES lines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2687 but that the idea of the actual height of the frame should not be changed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2688 */
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2689 (frame, lines, pretend))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2690 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2691 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2692 int height, width;
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2693 frame = wrap_frame (f);
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2694 CHECK_INT (lines);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2695
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2696 if (window_system_pixelated_geometry (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2697 {
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2698 char_to_real_pixel_size (f, 0, XINT (lines), 0, &height);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2699 width = FRAME_PIXWIDTH (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2700 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2701 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2702 {
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2703 height = XINT (lines);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2704 width = FRAME_WIDTH (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2705 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2706
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2707 internal_set_frame_size (f, width, height, !NILP (pretend));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2708 return frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2709 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2710
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2711 DEFUN ("set-frame-pixel-height", Fset_frame_pixel_height, 2, 3, 0, /*
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2712 Specify that the frame FRAME is HEIGHT pixels tall.
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2713 Optional third arg non-nil means that redisplay should be HEIGHT pixels tall
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2714 but that the idea of the actual height of the frame should not be changed.
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2715 */
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2716 (frame, height, pretend))
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2717 {
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2718 struct frame *f = decode_frame (frame);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2719 int pheight, width;
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2720 frame = wrap_frame (f);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2721 CHECK_INT (height);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2722
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2723 if (!window_system_pixelated_geometry (frame))
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2724 {
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2725 int h = XINT (height);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2726 width = FRAME_WIDTH (f);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2727 /* Simply using pixel_to_real_char_size here is not good
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2728 enough since we end up with a total frame size of HEIGHT
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2729 rather than a displayable height of HEIGHT. */
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2730 frame_conversion_internal (f, 2, 0, &h, 0, &pheight, 0);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2731 }
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2732 else
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2733 {
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2734 width = FRAME_PIXWIDTH (f);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2735 pheight = XINT (height);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2736 }
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2737
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2738 internal_set_frame_size (f, width, pheight, !NILP (pretend));
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2739 return frame;
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2740 }
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2741
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2742 DEFUN ("set-frame-width", Fset_frame_width, 2, 3, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2743 Specify that the frame FRAME has COLS columns.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2744 Optional third arg non-nil means that redisplay should use COLS columns
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2745 but that the idea of the actual width of the frame should not be changed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2746 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2747 (frame, cols, pretend))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2748 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2749 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2750 int width, height;
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2751 frame = wrap_frame (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2752 CHECK_INT (cols);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2753
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2754 if (window_system_pixelated_geometry (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2755 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2756 char_to_real_pixel_size (f, XINT (cols), 0, &width, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2757 height = FRAME_PIXHEIGHT (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2758 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2759 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2760 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2761 width = XINT (cols);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2762 height = FRAME_HEIGHT (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2763 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2764
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2765 internal_set_frame_size (f, width, height, !NILP (pretend));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2766 return frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2767 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2768
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2769 DEFUN ("set-frame-pixel-width", Fset_frame_pixel_width, 2, 3, 0, /*
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2770 Specify that the frame FRAME is WIDTH pixels wide.
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2771 Optional third arg non-nil means that redisplay should be WIDTH wide
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2772 but that the idea of the actual height of the frame should not be changed.
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2773 */
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2774 (frame, width, pretend))
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2775 {
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2776 struct frame *f = decode_frame (frame);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2777 int height, pwidth;
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2778 frame = wrap_frame (f);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2779 CHECK_INT (width);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2780
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2781 if (!window_system_pixelated_geometry (frame))
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2782 {
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2783 int w = XINT (width);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2784 height = FRAME_HEIGHT (f);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2785 /* Simply using pixel_to_real_char_size here is not good
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2786 enough since we end up with a total frame size of WIDTH
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2787 rather than a displayable height of WIDTH. */
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2788 frame_conversion_internal (f, 2, &w, 0, &pwidth, 0, 0);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2789 }
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2790 else
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2791 {
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2792 height = FRAME_PIXHEIGHT (f);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2793 pwidth = XINT (width);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2794 }
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2795
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2796 internal_set_frame_size (f, pwidth, height, !NILP (pretend));
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2797 return frame;
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2798 }
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2799
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2800 DEFUN ("set-frame-size", Fset_frame_size, 3, 4, 0, /*
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2801 Set the size of FRAME to COLS by ROWS, measured in characters.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2802 Optional fourth arg non-nil means that redisplay should use COLS by ROWS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2803 but that the idea of the actual size of the frame should not be changed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2804 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2805 (frame, cols, rows, pretend))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2806 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2807 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2808 int height, width;
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2809 frame = wrap_frame (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2810 CHECK_INT (cols);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2811 CHECK_INT (rows);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2812
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2813 if (window_system_pixelated_geometry (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2814 char_to_real_pixel_size (f, XINT (cols), XINT (rows), &width, &height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2815 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2816 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2817 height = XINT (rows);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2818 width = XINT (cols);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2819 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2820
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2821 internal_set_frame_size (f, width, height, !NILP (pretend));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2822 return frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2823 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2824
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2825 DEFUN ("set-frame-pixel-size", Fset_frame_pixel_size, 3, 4, 0, /*
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2826 Set the size of FRAME to WIDTH by HEIGHT, measured in pixels.
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2827 Optional fourth arg non-nil means that redisplay should use WIDTH by HEIGHT
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2828 but that the idea of the actual size of the frame should not be changed.
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2829 */
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2830 (frame, width, height, pretend))
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2831 {
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2832 struct frame *f = decode_frame (frame);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2833 int pheight, pwidth;
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2834 frame = wrap_frame (f);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2835 CHECK_INT (width);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2836 CHECK_INT (height);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2837
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2838 if (!window_system_pixelated_geometry (frame))
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2839 {
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2840 int w = XINT (width);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2841 int h = XINT (height);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2842 /* Simply using pixel_to_real_char_size here is not good enough
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2843 since we end up with a total frame size of WIDTH x HEIGHT
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2844 rather than a displayable height of WIDTH x HEIGHT. */
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2845 frame_conversion_internal (f, 2, &w, &h, &pwidth, &pheight, 0);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2846 }
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2847 else
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2848 {
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2849 pheight = XINT (height);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2850 pwidth = XINT (width);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2851 }
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2852
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2853 internal_set_frame_size (f, pwidth, pheight, !NILP (pretend));
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2854 return frame;
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2855 }
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2856
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2857 DEFUN ("set-frame-position", Fset_frame_position, 3, 3, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2858 Set position of FRAME in pixels to XOFFSET by YOFFSET.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2859 This is actually the position of the upper left corner of the frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2860 Negative values for XOFFSET or YOFFSET are interpreted relative to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2861 the rightmost or bottommost possible position (that stays within the screen).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2862 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2863 (frame, xoffset, yoffset))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2864 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2865 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2866 CHECK_INT (xoffset);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2867 CHECK_INT (yoffset);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2868
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2869 MAYBE_FRAMEMETH (f, set_frame_position, (f, XINT (xoffset), XINT (yoffset)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2870
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2871 return Qt;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2872 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2873
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2874
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2875
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2876 /* Frame size conversion functions moved here from EmacsFrame.c
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2877 because they're generic and really don't belong in that file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2878 Function get_default_char_pixel_size() removed because it's
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2879 exactly the same as default_face_height_and_width(). */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2880 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2881 frame_conversion_internal (struct frame *f, int pixel_to_char,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2882 int *pixel_width, int *pixel_height,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2883 int *char_width, int *char_height,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2884 int real_face)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2885 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2886 int cpw;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2887 int cph;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2888 int egw;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2889 int obw, obh, bdr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2890 Lisp_Object frame, window;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2891
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2892 frame = wrap_frame (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2893 if (real_face)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2894 default_face_height_and_width (frame, &cph, &cpw);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2895 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2896 default_face_height_and_width_1 (frame, &cph, &cpw);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2897
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2898 window = FRAME_SELECTED_WINDOW (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2899
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
2900 egw = max (glyph_width (Vcontinuation_glyph, window),
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
2901 glyph_width (Vtruncation_glyph, window));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2902 egw = max (egw, cpw);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2903 bdr = 2 * f->internal_border_width;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2904 obw = FRAME_SCROLLBAR_WIDTH (f) + FRAME_THEORETICAL_LEFT_TOOLBAR_WIDTH (f) +
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2905 FRAME_THEORETICAL_RIGHT_TOOLBAR_WIDTH (f) +
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2906 2 * FRAME_THEORETICAL_LEFT_TOOLBAR_BORDER_WIDTH (f) +
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2907 2 * FRAME_THEORETICAL_RIGHT_TOOLBAR_BORDER_WIDTH (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2908 obh = FRAME_SCROLLBAR_HEIGHT (f) + FRAME_THEORETICAL_TOP_TOOLBAR_HEIGHT (f) +
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2909 FRAME_THEORETICAL_BOTTOM_TOOLBAR_HEIGHT (f) +
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2910 2 * FRAME_THEORETICAL_TOP_TOOLBAR_BORDER_WIDTH (f) +
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2911 2 * FRAME_THEORETICAL_BOTTOM_TOOLBAR_BORDER_WIDTH (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2912
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2913 /* Convert to chars so that the displayable area is pixel_width x
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2914 pixel_height.
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2915
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2916 #### Consider rounding up to 0.5 characters to avoid adding too
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2917 much space. */
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2918 if (pixel_to_char > 1)
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2919 {
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2920 if (char_width)
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2921 *char_width = ROUND_UP (*pixel_width, cpw) / cpw;
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2922 if (char_height)
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2923 *char_height = ROUND_UP (*pixel_height, cph) / cph;
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2924 }
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2925 /* Convert to chars so that the total frame size is pixel_width x
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2926 pixel_height. */
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2927 else if (pixel_to_char)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2928 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2929 if (char_width)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2930 *char_width = 1 + ((*pixel_width - egw) - bdr - obw) / cpw;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2931 if (char_height)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2932 *char_height = (*pixel_height - bdr - obh) / cph;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2933 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2934 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2935 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2936 if (pixel_width)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2937 *pixel_width = (*char_width - 1) * cpw + egw + bdr + obw;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2938 if (pixel_height)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2939 *pixel_height = *char_height * cph + bdr + obh;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2940 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2941 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2942
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2943 /* This takes the size in pixels of the text area, and returns the number
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2944 of characters that will fit there, taking into account the internal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2945 border width, and the pixel width of the line terminator glyphs (which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2946 always count as one "character" wide, even if they are not the same size
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2947 as the default character size of the default font). The frame scrollbar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2948 width and left and right toolbar widths are also subtracted out of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2949 available width. The frame scrollbar height and top and bottom toolbar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2950 heights are subtracted out of the available height.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2951
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2952 Therefore the result is not necessarily a multiple of anything in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2953 particular. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2954 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2955 pixel_to_char_size (struct frame *f, int pixel_width, int pixel_height,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2956 int *char_width, int *char_height)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2957 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2958 frame_conversion_internal (f, 1, &pixel_width, &pixel_height, char_width,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2959 char_height, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2960 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2961
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2962 /* Given a character size, this returns the minimum number of pixels
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2963 necessary to display that many characters, taking into account the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2964 internal border width, scrollbar height and width, toolbar heights and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2965 widths and the size of the line terminator glyphs (assuming the line
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2966 terminators take up exactly one character position).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2967
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2968 Therefore the result is not necessarily a multiple of anything in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2969 particular. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2970 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2971 char_to_pixel_size (struct frame *f, int char_width, int char_height,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2972 int *pixel_width, int *pixel_height)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2973 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2974 frame_conversion_internal (f, 0, pixel_width, pixel_height, &char_width,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2975 &char_height, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2976 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2977
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2978 /* Given a pixel size, rounds DOWN to the smallest size in pixels necessary
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2979 to display the same number of characters as are displayable now.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2980 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2981 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2982 round_size_to_char (struct frame *f, int in_width, int in_height,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2983 int *out_width, int *out_height)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2984 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2985 int char_width;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2986 int char_height;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2987 pixel_to_char_size (f, in_width, in_height, &char_width, &char_height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2988 char_to_pixel_size (f, char_width, char_height, out_width, out_height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2989 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2990
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2991 /* Versions of the above which always account for real font metrics.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2992 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2993 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2994 pixel_to_real_char_size (struct frame *f, int pixel_width, int pixel_height,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2995 int *char_width, int *char_height)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2996 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2997 frame_conversion_internal (f, 1, &pixel_width, &pixel_height, char_width,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2998 char_height, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2999 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3000
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3001 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3002 char_to_real_pixel_size (struct frame *f, int char_width, int char_height,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3003 int *pixel_width, int *pixel_height)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3004 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3005 frame_conversion_internal (f, 0, pixel_width, pixel_height, &char_width,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3006 &char_height, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3007 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3008
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3009 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3010 round_size_to_real_char (struct frame *f, int in_width, int in_height,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3011 int *out_width, int *out_height)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3012 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3013 int char_width;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3014 int char_height;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3015 pixel_to_real_char_size (f, in_width, in_height, &char_width, &char_height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3016 char_to_real_pixel_size (f, char_width, char_height, out_width, out_height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3017 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3018
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3019 /* Change the frame height and/or width. Values may be given as zero to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3020 indicate no change is to take place. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3021 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3022 change_frame_size_1 (struct frame *f, int newheight, int newwidth)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3023 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3024 Lisp_Object frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3025 int new_pixheight, new_pixwidth;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3026 int font_height, real_font_height, font_width;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3027
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3028 /* #### Chuck -- shouldn't we be checking to see if the frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3029 is being "changed" to its existing size, and do nothing if so? */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3030 /* No, because it would hose toolbar updates. The toolbar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3031 update code relies on this function to cause window `top' and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3032 `left' coordinates to be recomputed even though no frame size
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3033 change occurs. --kyle */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3034 if (in_display)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3035 abort ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3036
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
3037 frame = wrap_frame (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3038
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3039 default_face_height_and_width (frame, &real_font_height, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3040 default_face_height_and_width_1 (frame, &font_height, &font_width);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3041
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3042 /* This size-change overrides any pending one for this frame. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3043 FRAME_NEW_HEIGHT (f) = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3044 FRAME_NEW_WIDTH (f) = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3045
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3046 new_pixheight = newheight * font_height;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3047 new_pixwidth = (newwidth - 1) * font_width;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3048
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3049 /* #### dependency on FRAME_WIN_P should be removed. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3050 if (FRAME_WIN_P (f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3051 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3052 new_pixheight += FRAME_SCROLLBAR_HEIGHT (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3053 new_pixwidth += FRAME_SCROLLBAR_WIDTH (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3054 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3055
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3056 /* when frame_conversion_internal() calculated the number of rows/cols
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3057 in the frame, the theoretical toolbar sizes were subtracted out.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3058 The calculations below adjust for real toolbar height/width in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3059 frame, which may be different from frame spec, taking the above
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3060 fact into account */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3061 new_pixheight +=
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3062 + FRAME_THEORETICAL_TOP_TOOLBAR_HEIGHT (f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3063 + 2 * FRAME_THEORETICAL_TOP_TOOLBAR_BORDER_WIDTH (f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3064 - FRAME_REAL_TOP_TOOLBAR_HEIGHT (f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3065 - 2 * FRAME_REAL_TOP_TOOLBAR_BORDER_WIDTH (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3066
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3067 new_pixheight +=
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3068 + FRAME_THEORETICAL_BOTTOM_TOOLBAR_HEIGHT (f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3069 + 2 * FRAME_THEORETICAL_BOTTOM_TOOLBAR_BORDER_WIDTH (f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3070 - FRAME_REAL_BOTTOM_TOOLBAR_HEIGHT (f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3071 - 2 * FRAME_REAL_BOTTOM_TOOLBAR_BORDER_WIDTH (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3072
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3073 new_pixwidth +=
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3074 + FRAME_THEORETICAL_LEFT_TOOLBAR_WIDTH (f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3075 + 2 * FRAME_THEORETICAL_LEFT_TOOLBAR_BORDER_WIDTH (f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3076 - FRAME_REAL_LEFT_TOOLBAR_WIDTH (f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3077 - 2 * FRAME_REAL_LEFT_TOOLBAR_BORDER_WIDTH (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3078
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3079 new_pixwidth +=
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3080 + FRAME_THEORETICAL_RIGHT_TOOLBAR_WIDTH (f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3081 + 2 * FRAME_THEORETICAL_RIGHT_TOOLBAR_BORDER_WIDTH (f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3082 - FRAME_REAL_RIGHT_TOOLBAR_WIDTH (f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3083 - 2 * FRAME_REAL_RIGHT_TOOLBAR_BORDER_WIDTH (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3084
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3085 /* Adjust the width for the end glyph which may be a different width
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3086 than the default character width. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3087 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3088 int adjustment, trunc_width, cont_width;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3089
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
3090 trunc_width = glyph_width (Vtruncation_glyph,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3091 FRAME_SELECTED_WINDOW (f));
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
3092 cont_width = glyph_width (Vcontinuation_glyph,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3093 FRAME_SELECTED_WINDOW (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3094 adjustment = max (trunc_width, cont_width);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3095 adjustment = max (adjustment, font_width);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3096
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3097 new_pixwidth += adjustment;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3098 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3099
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3100 /* If we don't have valid values, exit. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3101 if (!new_pixheight && !new_pixwidth)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3102 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3103
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3104 if (new_pixheight)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3105 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3106 /* Adjust for gutters here so that we always get set
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3107 properly. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3108 new_pixheight -=
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3109 (FRAME_TOP_GUTTER_BOUNDS (f)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3110 + FRAME_BOTTOM_GUTTER_BOUNDS (f));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3111
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3112 XWINDOW (FRAME_ROOT_WINDOW (f))->pixel_top
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3113 = FRAME_TOP_BORDER_END (f) + FRAME_TOP_GUTTER_BOUNDS (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3114
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3115 if (FRAME_HAS_MINIBUF_P (f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3116 && ! FRAME_MINIBUF_ONLY_P (f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3117 /* Frame has both root and minibuffer. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3118 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3119 /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3120 * Leave the minibuffer height the same if the frame has
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3121 * been initialized, and the minibuffer height is tall
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3122 * enough to display at least one line of text in the default
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3123 * font, and the old minibuffer height is a multiple of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3124 * default font height. This should cause the minibuffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3125 * height to be recomputed on font changes but not for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3126 * other frame size changes, which seems reasonable.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3127 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3128 int old_minibuf_height =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3129 XWINDOW(FRAME_MINIBUF_WINDOW(f))->pixel_height;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3130 int minibuf_height =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3131 f->init_finished && (old_minibuf_height % real_font_height) == 0 ?
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3132 max(old_minibuf_height, real_font_height) :
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3133 real_font_height;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3134 set_window_pixheight (FRAME_ROOT_WINDOW (f),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3135 /* - font_height for minibuffer */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3136 new_pixheight - minibuf_height, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3137
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3138 XWINDOW (FRAME_MINIBUF_WINDOW (f))->pixel_top =
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3139 FRAME_TOP_BORDER_END (f) +
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3140 FRAME_TOP_GUTTER_BOUNDS (f) +
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3141 FRAME_BOTTOM_GUTTER_BOUNDS (f) +
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3142 new_pixheight - minibuf_height;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3143
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3144 set_window_pixheight (FRAME_MINIBUF_WINDOW (f), minibuf_height, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3145 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3146 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3147 /* Frame has just one top-level window. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3148 set_window_pixheight (FRAME_ROOT_WINDOW (f), new_pixheight, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3149
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3150 FRAME_HEIGHT (f) = newheight;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3151 if (FRAME_TTY_P (f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3152 f->pixheight = newheight;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3153 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3154
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3155 if (new_pixwidth)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3156 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3157 /* Adjust for gutters here so that we always get set
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3158 properly. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3159 new_pixwidth -=
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3160 (FRAME_LEFT_GUTTER_BOUNDS (f)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3161 + FRAME_RIGHT_GUTTER_BOUNDS (f));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3162
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3163 XWINDOW (FRAME_ROOT_WINDOW (f))->pixel_left =
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3164 FRAME_LEFT_BORDER_END (f) + FRAME_LEFT_GUTTER_BOUNDS (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3165 set_window_pixwidth (FRAME_ROOT_WINDOW (f), new_pixwidth, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3166
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3167 if (FRAME_HAS_MINIBUF_P (f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3168 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3169 XWINDOW (FRAME_MINIBUF_WINDOW (f))->pixel_left =
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3170 FRAME_LEFT_BORDER_END (f) + FRAME_LEFT_GUTTER_BOUNDS (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3171 set_window_pixwidth (FRAME_MINIBUF_WINDOW (f), new_pixwidth, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3172 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3173
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3174 FRAME_WIDTH (f) = newwidth;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3175 if (FRAME_TTY_P (f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3176 f->pixwidth = newwidth;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3177 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3178
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3179 if (window_system_pixelated_geometry (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3180 pixel_to_real_char_size (f, FRAME_PIXWIDTH (f), FRAME_PIXHEIGHT (f),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3181 &FRAME_CHARWIDTH (f), &FRAME_CHARHEIGHT (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3182 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3183 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3184 FRAME_CHARWIDTH (f) = FRAME_WIDTH (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3185 FRAME_CHARHEIGHT (f) = FRAME_HEIGHT (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3186 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3187
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3188 MARK_FRAME_TOOLBARS_CHANGED (f);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3189 MARK_FRAME_GUTTERS_CHANGED (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3190 MARK_FRAME_CHANGED (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3191 f->echo_area_garbaged = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3192 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3193
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3194 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3195 change_frame_size (struct frame *f, int newheight, int newwidth, int delay)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3196 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3197 /* sometimes we get passed a size that's too small (esp. when a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3198 client widget gets resized, since we have no control over this).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3199 So deal. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3200 check_frame_size (f, &newheight, &newwidth);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3201
450
98528da0b7fc Import from CVS: tag r21-2-40
cvs
parents: 444
diff changeset
3202 /* Unconditionally mark that the frame has changed size. This is
98528da0b7fc Import from CVS: tag r21-2-40
cvs
parents: 444
diff changeset
3203 because many things need to know after the
98528da0b7fc Import from CVS: tag r21-2-40
cvs
parents: 444
diff changeset
3204 fact. f->size_change_pending will get reset below. The most that
98528da0b7fc Import from CVS: tag r21-2-40
cvs
parents: 444
diff changeset
3205 can happen is that we will cycle through redisplay once more
98528da0b7fc Import from CVS: tag r21-2-40
cvs
parents: 444
diff changeset
3206 --andy. */
98528da0b7fc Import from CVS: tag r21-2-40
cvs
parents: 444
diff changeset
3207 MARK_FRAME_SIZE_CHANGED (f);
98528da0b7fc Import from CVS: tag r21-2-40
cvs
parents: 444
diff changeset
3208
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3209 if (delay || in_display || gc_in_progress)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3210 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3211 f->new_width = newwidth;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3212 f->new_height = newheight;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3213 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3214 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3215
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3216 f->size_change_pending = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3217 /* For TTY frames, it's like one, like all ...
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3218 Can't have two TTY frames of different sizes on the same device. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3219 if (FRAME_TTY_P (f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3220 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3221 Lisp_Object frmcons;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3222
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3223 DEVICE_FRAME_LOOP (frmcons, XDEVICE (FRAME_DEVICE (f)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3224 change_frame_size_1 (XFRAME (XCAR (frmcons)), newheight, newwidth);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3225 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3226 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3227 change_frame_size_1 (f, newheight, newwidth);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3228 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3229
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3230
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3231 /* The caller is responsible for freeing the returned string. */
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
3232 static Ibyte *
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3233 generate_title_string (struct window *w, Lisp_Object format_str,
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3234 face_index findex, int type)
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3235 {
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3236 struct display_line *dl;
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3237 struct display_block *db;
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3238 int elt = 0;
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3239
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3240 dl = &title_string_display_line;
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3241 db = get_display_block_from_line (dl, TEXT);
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3242 Dynarr_reset (db->runes);
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3243
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3244 generate_formatted_string_db (format_str, Qnil, w, dl, db, findex, 0,
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3245 -1, type);
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3246
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
3247 Dynarr_reset (title_string_ichar_dynarr);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3248 while (elt < Dynarr_length (db->runes))
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3249 {
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3250 if (Dynarr_atp (db->runes, elt)->type == RUNE_CHAR)
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
3251 Dynarr_add (title_string_ichar_dynarr,
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3252 Dynarr_atp (db->runes, elt)->object.chr.ch);
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3253 elt++;
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3254 }
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3255
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3256 return
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
3257 convert_ichar_string_into_malloced_string
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
3258 (Dynarr_atp (title_string_ichar_dynarr, 0),
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
3259 Dynarr_length (title_string_ichar_dynarr), 0);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3260 }
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3261
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3262 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3263 update_frame_title (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3264 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3265 struct window *w = XWINDOW (FRAME_SELECTED_WINDOW (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3266 Lisp_Object title_format;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3267 Lisp_Object icon_format;
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
3268 Ibyte *title;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3269
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3270 /* We don't change the title for the minibuffer unless the frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3271 only has a minibuffer. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3272 if (MINI_WINDOW_P (w) && !FRAME_MINIBUF_ONLY_P (f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3273 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3274
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3275 /* And we don't want dead buffers to blow up on us. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3276 if (!BUFFER_LIVE_P (XBUFFER (w->buffer)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3277 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3278
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3279 title = NULL;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3280 title_format = symbol_value_in_buffer (Qframe_title_format, w->buffer);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3281 icon_format = symbol_value_in_buffer (Qframe_icon_title_format, w->buffer);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3282
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
3283 if (HAS_FRAMEMETH_P (f, set_title_from_ibyte))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3284 {
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3285 title = generate_title_string (w, title_format,
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3286 DEFAULT_INDEX, CURRENT_DISP);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
3287 FRAMEMETH (f, set_title_from_ibyte, (f, title));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3288 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3289
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
3290 if (HAS_FRAMEMETH_P (f, set_icon_name_from_ibyte))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3291 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3292 if (!EQ (icon_format, title_format) || !title)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3293 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3294 if (title)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3295 xfree (title);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3296
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3297 title = generate_title_string (w, icon_format,
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3298 DEFAULT_INDEX, CURRENT_DISP);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3299 }
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
3300 FRAMEMETH (f, set_icon_name_from_ibyte, (f, title));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3301 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3302
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3303 if (title)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3304 xfree (title);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3305 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3306
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3307
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3308 DEFUN ("set-frame-pointer", Fset_frame_pointer, 2, 2, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3309 Set the mouse pointer of FRAME to the given pointer image instance.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3310 You should not call this function directly. Instead, set one of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3311 the variables `text-pointer-glyph', `nontext-pointer-glyph',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3312 `modeline-pointer-glyph', `selection-pointer-glyph',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3313 `busy-pointer-glyph', or `toolbar-pointer-glyph'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3314 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3315 (frame, image_instance))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3316 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3317 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3318 CHECK_POINTER_IMAGE_INSTANCE (image_instance);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3319 if (!EQ (f->pointer, image_instance))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3320 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3321 f->pointer = image_instance;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3322 MAYBE_FRAMEMETH (f, set_frame_pointer, (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3323 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3324 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3325 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3326
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3327
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3328 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3329 update_frame_icon (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3330 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3331 if (f->icon_changed || f->windows_changed)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3332 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3333 Lisp_Object frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3334 Lisp_Object new_icon;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3335
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
3336 frame = wrap_frame (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3337 new_icon = glyph_image_instance (Vframe_icon_glyph, frame,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3338 ERROR_ME_WARN, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3339 if (!EQ (new_icon, f->icon))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3340 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3341 f->icon = new_icon;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3342 MAYBE_FRAMEMETH (f, set_frame_icon, (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3343 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3344 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3345
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3346 f->icon_changed = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3347 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3348
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3349 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3350 icon_glyph_changed (Lisp_Object glyph, Lisp_Object property,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3351 Lisp_Object locale)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3352 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3353 MARK_ICON_CHANGED;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3354 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3355
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3356
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3357 /***************************************************************************/
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3358 /* */
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3359 /* initialization */
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3360 /* */
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3361 /***************************************************************************/
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3362
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3363 void
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3364 init_frame (void)
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3365 {
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3366 #ifndef PDUMP
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3367 if (!initialized)
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3368 #endif
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3369 {
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
3370 title_string_ichar_dynarr = Dynarr_new (Ichar);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3371 xzero (title_string_display_line);
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3372 }
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3373 }
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3374
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3375 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3376 syms_of_frame (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3377 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3378 INIT_LRECORD_IMPLEMENTATION (frame);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3379
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3380 DEFSYMBOL (Qdelete_frame_hook);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3381 DEFSYMBOL (Qselect_frame_hook);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3382 DEFSYMBOL (Qdeselect_frame_hook);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3383 DEFSYMBOL (Qcreate_frame_hook);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3384 DEFSYMBOL (Qcustom_initialize_frame);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3385 DEFSYMBOL (Qmouse_enter_frame_hook);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3386 DEFSYMBOL (Qmouse_leave_frame_hook);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3387 DEFSYMBOL (Qmap_frame_hook);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3388 DEFSYMBOL (Qunmap_frame_hook);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3389
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3390 DEFSYMBOL (Qframep);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3391 DEFSYMBOL (Qframe_live_p);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3392 DEFSYMBOL (Qdelete_frame);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3393 DEFSYMBOL (Qsynchronize_minibuffers);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3394 DEFSYMBOL (Qbuffer_predicate);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3395 DEFSYMBOL (Qframe_being_created);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3396 DEFSYMBOL (Qmake_initial_minibuffer_frame);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3397
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3398 DEFSYMBOL (Qframe_title_format);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3399 DEFSYMBOL (Qframe_icon_title_format);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3400
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3401 DEFSYMBOL (Qhidden);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3402 DEFSYMBOL (Qvisible);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3403 DEFSYMBOL (Qiconic);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3404 DEFSYMBOL (Qinvisible);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3405 DEFSYMBOL (Qvisible_iconic);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3406 DEFSYMBOL (Qinvisible_iconic);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3407 DEFSYMBOL (Qnomini);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3408 DEFSYMBOL (Qvisible_nomini);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3409 DEFSYMBOL (Qiconic_nomini);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3410 DEFSYMBOL (Qinvisible_nomini);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3411 DEFSYMBOL (Qvisible_iconic_nomini);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3412 DEFSYMBOL (Qinvisible_iconic_nomini);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3413
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3414 DEFSYMBOL (Qminibuffer);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3415 DEFSYMBOL (Qunsplittable);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3416 DEFSYMBOL (Qinternal_border_width);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3417 DEFSYMBOL (Qtop_toolbar_shadow_color);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3418 DEFSYMBOL (Qbottom_toolbar_shadow_color);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3419 DEFSYMBOL (Qbackground_toolbar_color);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3420 DEFSYMBOL (Qtop_toolbar_shadow_pixmap);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3421 DEFSYMBOL (Qbottom_toolbar_shadow_pixmap);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3422 DEFSYMBOL (Qtoolbar_shadow_thickness);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3423 DEFSYMBOL (Qscrollbar_placement);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3424 DEFSYMBOL (Qinter_line_space);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3425 /* Qiconic already in this function. */
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3426 DEFSYMBOL (Qvisual_bell);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3427 DEFSYMBOL (Qbell_volume);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3428 DEFSYMBOL (Qpointer_background);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3429 DEFSYMBOL (Qpointer_color);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3430 DEFSYMBOL (Qtext_pointer);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3431 DEFSYMBOL (Qspace_pointer);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3432 DEFSYMBOL (Qmodeline_pointer);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3433 DEFSYMBOL (Qgc_pointer);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3434 DEFSYMBOL (Qinitially_unmapped);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3435 DEFSYMBOL (Quse_backing_store);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3436 DEFSYMBOL (Qborder_color);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3437 DEFSYMBOL (Qborder_width);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3438 /* Qwidth, Qheight, Qleft, Qtop in general.c */
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3439 DEFSYMBOL (Qset_specifier);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3440 DEFSYMBOL (Qset_face_property);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3441 DEFSYMBOL (Qface_property_instance);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3442 DEFSYMBOL (Qframe_property_alias);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3443
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3444 DEFSUBR (Fmake_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3445 DEFSUBR (Fframep);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3446 DEFSUBR (Fframe_live_p);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3447 #if 0 /* FSFmacs */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3448 DEFSUBR (Fignore_event);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3449 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3450 DEFSUBR (Ffocus_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3451 DEFSUBR (Fselect_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3452 DEFSUBR (Fselected_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3453 DEFSUBR (Factive_minibuffer_window);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3454 DEFSUBR (Flast_nonminibuf_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3455 DEFSUBR (Fframe_root_window);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3456 DEFSUBR (Fframe_selected_window);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3457 DEFSUBR (Fset_frame_selected_window);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3458 DEFSUBR (Fframe_device);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3459 DEFSUBR (Fnext_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3460 DEFSUBR (Fprevious_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3461 DEFSUBR (Fdelete_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3462 DEFSUBR (Fmouse_position);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3463 DEFSUBR (Fmouse_pixel_position);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3464 DEFSUBR (Fmouse_position_as_motion_event);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3465 DEFSUBR (Fset_mouse_position);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3466 DEFSUBR (Fset_mouse_pixel_position);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3467 DEFSUBR (Fmake_frame_visible);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3468 DEFSUBR (Fmake_frame_invisible);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3469 DEFSUBR (Ficonify_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3470 DEFSUBR (Fdeiconify_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3471 DEFSUBR (Fframe_visible_p);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3472 DEFSUBR (Fframe_totally_visible_p);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3473 DEFSUBR (Fframe_iconified_p);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3474 DEFSUBR (Fvisible_frame_list);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3475 DEFSUBR (Fraise_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3476 DEFSUBR (Flower_frame);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3477 DEFSUBR (Fdisable_frame);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3478 DEFSUBR (Fenable_frame);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3479 DEFSUBR (Fframe_property);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3480 DEFSUBR (Fframe_properties);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3481 DEFSUBR (Fset_frame_properties);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3482 DEFSUBR (Fframe_pixel_height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3483 DEFSUBR (Fframe_pixel_width);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3484 DEFSUBR (Fframe_name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3485 DEFSUBR (Fframe_modified_tick);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3486 DEFSUBR (Fset_frame_height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3487 DEFSUBR (Fset_frame_width);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3488 DEFSUBR (Fset_frame_size);
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3489 DEFSUBR (Fset_frame_pixel_height);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3490 DEFSUBR (Fset_frame_pixel_width);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3491 DEFSUBR (Fset_frame_pixel_size);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3492 DEFSUBR (Fset_frame_position);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3493 DEFSUBR (Fset_frame_pointer);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3494 DEFSUBR (Fprint_job_page_number);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3495 DEFSUBR (Fprint_job_eject_page);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3496 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3497
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3498 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3499 vars_of_frame (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3500 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3501 /* */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3502 Vframe_being_created = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3503 staticpro (&Vframe_being_created);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3504
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3505 #ifdef HAVE_CDE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3506 Fprovide (intern ("cde"));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3507 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3508
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3509 #ifdef HAVE_OFFIX_DND
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3510 Fprovide (intern ("offix"));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3511 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3512
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3513 #if 0 /* FSFmacs stupidity */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3514 xxDEFVAR_LISP ("emacs-iconified", &Vemacs_iconified /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3515 Non-nil if all of emacs is iconified and frame updates are not needed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3516 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3517 Vemacs_iconified = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3518 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3519
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3520 DEFVAR_LISP ("select-frame-hook", &Vselect_frame_hook /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3521 Function or functions to run just after a new frame is given the focus.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3522 Note that calling `select-frame' does not necessarily set the focus:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3523 The actual window-system focus will not be changed until the next time
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3524 that XEmacs is waiting for an event, and even then, the window manager
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3525 may refuse the focus-change request.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3526 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3527 Vselect_frame_hook = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3528
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3529 DEFVAR_LISP ("deselect-frame-hook", &Vdeselect_frame_hook /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3530 Function or functions to run just before a frame loses the focus.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3531 See `select-frame-hook'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3532 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3533 Vdeselect_frame_hook = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3534
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3535 DEFVAR_LISP ("delete-frame-hook", &Vdelete_frame_hook /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3536 Function or functions to call when a frame is deleted.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3537 One argument, the about-to-be-deleted frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3538 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3539 Vdelete_frame_hook = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3540
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3541 DEFVAR_LISP ("create-frame-hook", &Vcreate_frame_hook /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3542 Function or functions to call when a frame is created.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3543 One argument, the newly-created frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3544 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3545 Vcreate_frame_hook = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3546
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3547 DEFVAR_LISP ("mouse-enter-frame-hook", &Vmouse_enter_frame_hook /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3548 Function or functions to call when the mouse enters a frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3549 One argument, the frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3550 Be careful not to make assumptions about the window manager's focus model.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3551 In most cases, the `deselect-frame-hook' is more appropriate.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3552 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3553 Vmouse_enter_frame_hook = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3554
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3555 DEFVAR_LISP ("mouse-leave-frame-hook", &Vmouse_leave_frame_hook /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3556 Function or functions to call when the mouse leaves a frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3557 One argument, the frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3558 Be careful not to make assumptions about the window manager's focus model.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3559 In most cases, the `select-frame-hook' is more appropriate.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3560 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3561 Vmouse_leave_frame_hook = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3562
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3563 DEFVAR_LISP ("map-frame-hook", &Vmap_frame_hook /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3564 Function or functions to call when a frame is mapped.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3565 One argument, the frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3566 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3567 Vmap_frame_hook = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3568
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3569 DEFVAR_LISP ("unmap-frame-hook", &Vunmap_frame_hook /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3570 Function or functions to call when a frame is unmapped.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3571 One argument, the frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3572 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3573 Vunmap_frame_hook = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3574
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3575 DEFVAR_BOOL ("allow-deletion-of-last-visible-frame",
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3576 &allow_deletion_of_last_visible_frame /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3577 *Non-nil means to assume the force option to delete-frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3578 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3579 allow_deletion_of_last_visible_frame = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3580
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3581 DEFVAR_LISP ("adjust-frame-function", &Vadjust_frame_function /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3582 Function or constant controlling adjustment of frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3583 When scrollbars, toolbars, default font etc. change in frame, the frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3584 needs to be adjusted. The adjustment is controlled by this variable.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3585 Legal values are:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3586 nil to keep character frame size unchanged when possible (resize)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3587 t to keep pixel size unchanged (never resize)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3588 function symbol or lambda form. This function must return boolean
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3589 value which is treated as above. Function is passed one parameter,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3590 the frame being adjusted. It function should not modify or delete
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3591 the frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3592 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3593 Vadjust_frame_function = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3594
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3595 DEFVAR_LISP ("mouse-motion-handler", &Vmouse_motion_handler /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3596 Handler for motion events. One arg, the event.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3597 For most applications, you should use `mode-motion-hook' instead of this.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3598 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3599 Vmouse_motion_handler = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3600
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3601 DEFVAR_LISP ("synchronize-minibuffers",&Vsynchronize_minibuffers /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3602 Set to t if all minibuffer windows are to be synchronized.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3603 This will cause echo area messages to appear in the minibuffers of all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3604 visible frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3605 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3606 Vsynchronize_minibuffers = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3607
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3608 DEFVAR_LISP ("frame-title-format", &Vframe_title_format /*
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3609 Controls the title of the window-system window of the selected frame.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3610 This is the same format as `modeline-format' with the exception that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3611 %- is ignored.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3612 */ );
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3613 /* #### I would change this unilaterally but for the wrath of the Kyles
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3614 of the world. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3615 #ifdef WIN32_NATIVE
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3616 Vframe_title_format = build_string ("%b - XEmacs");
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3617 #else
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3618 Vframe_title_format = build_string ("%S: %b");
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3619 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3620
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3621 DEFVAR_LISP ("frame-icon-title-format", &Vframe_icon_title_format /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3622 Controls the title of the icon corresponding to the selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3623 See also the variable `frame-title-format'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3624 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3625 Vframe_icon_title_format = build_string ("%b");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3626
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3627 DEFVAR_LISP ("default-frame-name", &Vdefault_frame_name /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3628 The default name to assign to newly-created frames.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3629 This can be overridden by arguments to `make-frame'. This must be a string.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3630 This is used primarily for picking up X resources, and is *not* the title
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3631 of the frame. (See `frame-title-format'.)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3632 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3633 #ifndef INFODOCK
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3634 Vdefault_frame_name = build_string ("emacs");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3635 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3636 Vdefault_frame_name = build_string ("InfoDock");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3637 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3638
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3639 DEFVAR_LISP ("default-frame-plist", &Vdefault_frame_plist /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3640 Plist of default values for frame creation, other than the first one.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3641 These may be set in your init file, like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3642
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3643 \(setq default-frame-plist '(width 80 height 55))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3644
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3645 The properties may be in alist format for backward compatibility
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3646 but you should not rely on this behavior.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3647
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3648 These override values given in window system configuration data,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3649 including X Windows' defaults database.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3650
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3651 Since the first X frame is created before loading your .emacs file,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3652 you must use the X resource database for that.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3653
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3654 For values specific to the first Emacs frame, see `initial-frame-plist'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3655 For values specific to the separate minibuffer frame, see
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3656 `minibuffer-frame-plist'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3657
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3658 See also the variables `default-x-frame-plist' and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3659 `default-tty-frame-plist', which are like `default-frame-plist'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3660 except that they apply only to X or tty frames, respectively
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3661 \(whereas `default-frame-plist' applies to all types of frames).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3662 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3663 Vdefault_frame_plist = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3664
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3665 DEFVAR_LISP ("frame-icon-glyph", &Vframe_icon_glyph /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3666 Icon glyph used to iconify a frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3667 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3668 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3669
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3670 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3671 complex_vars_of_frame (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3672 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3673 Vframe_icon_glyph = allocate_glyph (GLYPH_ICON, icon_glyph_changed);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3674 }