annotate src/frame.c @ 3767:6b2ef948e140

[xemacs-hg @ 2006-12-29 18:09:38 by aidan] etc/ChangeLog addition: 2006-12-21 Aidan Kehoe <kehoea@parhasard.net> * unicode/unicode-consortium/8859-7.TXT: Update the mapping to the 2003 version of ISO 8859-7. lisp/ChangeLog addition: 2006-12-21 Aidan Kehoe <kehoea@parhasard.net> * mule/cyrillic.el: * mule/cyrillic.el (iso-8859-5): * mule/cyrillic.el (cyrillic-koi8-r-encode-table): Add syntax, case support for Cyrillic; make some parentheses more Lispy. * mule/european.el: Content moved to latin.el, file deleted. * mule/general-late.el: If Unicode tables are to be loaded at dump time, do it here, not in loadup.el. * mule/greek.el: Add syntax, case support for Greek. * mule/latin.el: Move the content of european.el here. Change the case table mappings to use hexadecimal codes, to make cross reference to the standards easier. In all cases, take character syntax from similar characters in Latin-1 , rather than deciding separately what syntax they should take. Add (incomplete) support for case with Turkish. Remove description of the character sets used from the language environments' doc strings, since now that we create variant language environments on the fly, such descriptions will often be inaccurate. Set the native-coding-system language info property while setting the other coding-system properties of the language. * mule/misc-lang.el (ipa): Remove the language environment. The International Phonetic _Alphabet_ is not a language, it's inane to have a corresponding language environment in XEmacs. * mule/mule-cmds.el (create-variant-language-environment): Also modify the coding-priority when creating a new language environment; document that. * mule/mule-cmds.el (get-language-environment-from-locale): Recognise that the 'native-coding-system language-info property can be a list, interpret it correctly when it is one. 2006-12-21 Aidan Kehoe <kehoea@parhasard.net> * coding.el (coding-system-category): Use the new 'unicode-type property for finding what sort of Unicode coding system subtype a coding system is, instead of the overshadowed 'type property. * dumped-lisp.el (preloaded-file-list): mule/european.el has been removed. * loadup.el (really-early-error-handler): Unicode tables loaded at dump time are now in mule/general-late.el. * simple.el (count-lines): Add some backslashes to to parentheses in docstrings to help fontification along. * simple.el (what-cursor-position): Wrap a line to fit in 80 characters. * unicode.el: Use the 'unicode-type property, not 'type, for setting the Unicode coding-system subtype. src/ChangeLog addition: 2006-12-21 Aidan Kehoe <kehoea@parhasard.net> * file-coding.c: Update the make-coding-system docstring to reflect unicode-type * general-slots.h: New symbol, unicode-type, since 'type was being overridden when accessing a coding system's Unicode subtype. * intl-win32.c: Backslash a few parentheses, to help fontification along. * intl-win32.c (complex_vars_of_intl_win32): Use the 'unicode-type symbol, not 'type, when creating the Microsoft Unicode coding system. * unicode.c (unicode_putprop): * unicode.c (unicode_getprop): * unicode.c (unicode_print): Using 'type as the property name when working out what Unicode subtype a given coding system is was broken, since there's a general coding system property called 'type. Change the former to use 'unicode-type instead.
author aidan
date Fri, 29 Dec 2006 18:09:51 +0000
parents 91950589598c
children 62d532188a28
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.
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 3017
diff changeset
3 Copyright (C) 1995, 1996, 2002, 2003, 2005 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"
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 2552
diff changeset
40 #include "process.h" /* for egetenv */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 #include "redisplay.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 #include "scrollbar.h"
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
43 #include "toolbar.h"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 #include "window.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 Lisp_Object Vselect_frame_hook, Qselect_frame_hook;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 Lisp_Object Vdeselect_frame_hook, Qdeselect_frame_hook;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 Lisp_Object Vcreate_frame_hook, Qcreate_frame_hook;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 Lisp_Object Vdelete_frame_hook, Qdelete_frame_hook;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 Lisp_Object Vmouse_enter_frame_hook, Qmouse_enter_frame_hook;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 Lisp_Object Vmouse_leave_frame_hook, Qmouse_leave_frame_hook;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 Lisp_Object Vmap_frame_hook, Qmap_frame_hook;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 Lisp_Object Vunmap_frame_hook, Qunmap_frame_hook;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 int allow_deletion_of_last_visible_frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 Lisp_Object Vadjust_frame_function;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 Lisp_Object Vmouse_motion_handler;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 Lisp_Object Vsynchronize_minibuffers;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 Lisp_Object Qsynchronize_minibuffers;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 Lisp_Object Qbuffer_predicate;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 Lisp_Object Qmake_initial_minibuffer_frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 Lisp_Object Qcustom_initialize_frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 /* We declare all these frame properties here even though many of them
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 are currently only used in frame-x.c, because we should generalize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 them. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 Lisp_Object Qminibuffer;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 Lisp_Object Qunsplittable;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 Lisp_Object Qinternal_border_width;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 Lisp_Object Qtop_toolbar_shadow_color;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 Lisp_Object Qbottom_toolbar_shadow_color;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 Lisp_Object Qbackground_toolbar_color;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 Lisp_Object Qtop_toolbar_shadow_pixmap;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 Lisp_Object Qbottom_toolbar_shadow_pixmap;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 Lisp_Object Qtoolbar_shadow_thickness;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 Lisp_Object Qscrollbar_placement;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 Lisp_Object Qinter_line_space;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 Lisp_Object Qvisual_bell;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 Lisp_Object Qbell_volume;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 Lisp_Object Qpointer_background;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 Lisp_Object Qpointer_color;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 Lisp_Object Qtext_pointer;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 Lisp_Object Qspace_pointer;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 Lisp_Object Qmodeline_pointer;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 Lisp_Object Qgc_pointer;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 Lisp_Object Qinitially_unmapped;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 Lisp_Object Quse_backing_store;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 Lisp_Object Qborder_color;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 Lisp_Object Qborder_width;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 Lisp_Object Qframep, Qframe_live_p;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 Lisp_Object Qdelete_frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 Lisp_Object Qframe_title_format, Vframe_title_format;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 Lisp_Object Qframe_icon_title_format, Vframe_icon_title_format;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 Lisp_Object Vdefault_frame_name;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 Lisp_Object Vdefault_frame_plist;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 Lisp_Object Vframe_icon_glyph;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 Lisp_Object Qhidden;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 Lisp_Object Qvisible, Qiconic, Qinvisible, Qvisible_iconic, Qinvisible_iconic;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 Lisp_Object Qnomini, Qvisible_nomini, Qiconic_nomini, Qinvisible_nomini;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 Lisp_Object Qvisible_iconic_nomini, Qinvisible_iconic_nomini;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
108 Lisp_Object Qset_specifier, Qset_face_property;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 Lisp_Object Qface_property_instance;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 Lisp_Object Qframe_property_alias;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113 /* 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
114 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
115 debugger goes off because it would try and display to it. However,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 there are some places which need to reference it which have no
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 other way of getting it if it isn't the selected frame. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 Lisp_Object Vframe_being_created;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 Lisp_Object Qframe_being_created;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 static void store_minibuf_frame_prop (struct frame *f, Lisp_Object val);
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
122
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
123 typedef enum {
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
124 DISPLAYABLE_PIXEL_TO_CHAR,
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
125 TOTAL_PIXEL_TO_CHAR,
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
126 CHAR_TO_TOTAL_PIXEL,
1429
969b7290edca [xemacs-hg @ 2003-04-24 05:33:43 by youngs]
youngs
parents: 1318
diff changeset
127 CHAR_TO_DISPLAYABLE_PIXEL
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
128 } pixel_to_char_mode_t;
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
129
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
130 static void frame_conversion_internal (struct frame *f,
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
131 pixel_to_char_mode_t pixel_to_char,
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
132 int *pixel_width, int *pixel_height,
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
133 int *char_width, int *char_height,
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
134 int real_face);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
135 static struct display_line title_string_display_line;
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
136 /* 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
137 the dynamic allocation time adds up. */
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
138 static Ichar_dynarr *title_string_ichar_dynarr;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
141
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
142 #ifndef NEW_GC
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
143 extern const struct sized_memory_description gtk_frame_data_description;
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
144 extern const struct sized_memory_description mswindows_frame_data_description;
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
145 extern const struct sized_memory_description x_frame_data_description;
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
146 #endif /* not NEW_GC */
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
147
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
148 static const struct memory_description frame_data_description_1 []= {
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
149 #ifdef NEW_GC
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
150 #ifdef HAVE_GTK
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
151 { XD_LISP_OBJECT, gtk_console },
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
152 #endif
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
153 #ifdef HAVE_MS_WINDOWS
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
154 { XD_LISP_OBJECT, mswindows_console },
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
155 #endif
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
156 #ifdef HAVE_X_WINDOWS
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
157 { XD_LISP_OBJECT, x_console },
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
158 #endif
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
159 #else /* not NEW_GC */
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
160 #ifdef HAVE_GTK
2551
9f70af3ac939 [xemacs-hg @ 2005-02-03 16:14:02 by james]
james
parents: 2500
diff changeset
161 { XD_BLOCK_PTR, gtk_console, 1, { &gtk_frame_data_description} },
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
162 #endif
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
163 #ifdef HAVE_MS_WINDOWS
2551
9f70af3ac939 [xemacs-hg @ 2005-02-03 16:14:02 by james]
james
parents: 2500
diff changeset
164 { XD_BLOCK_PTR, mswindows_console, 1, { &mswindows_frame_data_description} },
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
165 #endif
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
166 #ifdef HAVE_X_WINDOWS
2551
9f70af3ac939 [xemacs-hg @ 2005-02-03 16:14:02 by james]
james
parents: 2500
diff changeset
167 { XD_BLOCK_PTR, x_console, 1, { &x_frame_data_description} },
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
168 #endif
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
169 #endif /* not NEW_GC */
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
170 { XD_END }
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
171 };
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
172
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
173 static const struct sized_memory_description frame_data_description = {
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
174 sizeof (void *), frame_data_description_1
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
175 };
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
176
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
177 #ifdef NEW_GC
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
178 static const struct memory_description expose_ignore_description_1 [] = {
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
179 { XD_LISP_OBJECT, offsetof (struct expose_ignore, next) },
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
180 { XD_END }
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
181 };
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
182
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
183 DEFINE_LRECORD_IMPLEMENTATION ("expose-ignore",
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
184 expose_ignore,
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
185 1, /*dumpable-flag*/
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
186 0, 0, 0, 0, 0,
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
187 expose_ignore_description_1,
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
188 struct expose_ignore);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
189 #else /* not NEW_GC */
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
190 extern const struct sized_memory_description expose_ignore_description;
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
191
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
192 static const struct memory_description expose_ignore_description_1 [] = {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
193 { XD_BLOCK_PTR, offsetof (struct expose_ignore, next),
2551
9f70af3ac939 [xemacs-hg @ 2005-02-03 16:14:02 by james]
james
parents: 2500
diff changeset
194 1, { &expose_ignore_description } },
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
195 { XD_END }
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
196 };
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
197
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
198 const struct sized_memory_description expose_ignore_description = {
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
199 sizeof (struct expose_ignore),
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
200 expose_ignore_description_1
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
201 };
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
202 #endif /* not NEW_GC */
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
203
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
204 static const struct memory_description display_line_dynarr_pointer_description_1 []= {
2551
9f70af3ac939 [xemacs-hg @ 2005-02-03 16:14:02 by james]
james
parents: 2500
diff changeset
205 { XD_BLOCK_PTR, 0, 1, { &display_line_dynarr_description} },
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
206 { XD_END }
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
207 };
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
208
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
209 static const struct sized_memory_description display_line_dynarr_pointer_description = {
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
210 sizeof (display_line_dynarr *), display_line_dynarr_pointer_description_1
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
211 };
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
212
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
213 static const struct memory_description frame_description [] = {
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
214 { XD_INT, offsetof (struct frame, frametype) },
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
215 #define MARKED_SLOT(x) { XD_LISP_OBJECT, offsetof (struct frame, x) },
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
216 #define MARKED_SLOT_ARRAY(slot, size) \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
217 { XD_LISP_OBJECT_ARRAY, offsetof (struct frame, slot), size },
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
218 #include "frameslots.h"
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
219
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
220 #ifdef NEW_GC
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
221 { XD_LISP_OBJECT, offsetof (struct frame, subwindow_exposures) },
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
222 { XD_LISP_OBJECT, offsetof (struct frame, subwindow_exposures_tail) },
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
223 #else /* not NEW_GC */
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
224 { XD_BLOCK_PTR, offsetof (struct frame, subwindow_exposures),
2551
9f70af3ac939 [xemacs-hg @ 2005-02-03 16:14:02 by james]
james
parents: 2500
diff changeset
225 1, { &expose_ignore_description } },
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
226 { XD_BLOCK_PTR, offsetof (struct frame, subwindow_exposures_tail),
2551
9f70af3ac939 [xemacs-hg @ 2005-02-03 16:14:02 by james]
james
parents: 2500
diff changeset
227 1, { &expose_ignore_description } },
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
228 #endif /* not NEW_GC */
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
229
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
230 #ifdef HAVE_SCROLLBARS
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
231 { XD_LISP_OBJECT, offsetof (struct frame, sb_vcache) },
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
232 { XD_LISP_OBJECT, offsetof (struct frame, sb_hcache) },
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
233 #endif /* HAVE_SCROLLBARS */
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
234
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
235 { XD_BLOCK_ARRAY, offsetof (struct frame, current_display_lines),
2551
9f70af3ac939 [xemacs-hg @ 2005-02-03 16:14:02 by james]
james
parents: 2500
diff changeset
236 4, { &display_line_dynarr_pointer_description } },
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
237 { XD_BLOCK_ARRAY, offsetof (struct frame, desired_display_lines),
2551
9f70af3ac939 [xemacs-hg @ 2005-02-03 16:14:02 by james]
james
parents: 2500
diff changeset
238 4, { &display_line_dynarr_pointer_description } },
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
239
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
240 { XD_BLOCK_PTR, offsetof (struct frame, framemeths), 1,
2551
9f70af3ac939 [xemacs-hg @ 2005-02-03 16:14:02 by james]
james
parents: 2500
diff changeset
241 { &console_methods_description } },
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
242 { XD_UNION, offsetof (struct frame, frame_data),
2551
9f70af3ac939 [xemacs-hg @ 2005-02-03 16:14:02 by james]
james
parents: 2500
diff changeset
243 XD_INDIRECT (0, 0), { &frame_data_description } },
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
244 { XD_END }
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
245 };
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
246
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 mark_frame (Lisp_Object obj)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 struct frame *f = XFRAME (obj);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
252 #define MARKED_SLOT(x) mark_object (f->x);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 #include "frameslots.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 if (FRAME_LIVE_P (f)) /* device is nil for a dead frame */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 MAYBE_FRAMEMETH (f, mark_frame, (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
258 #ifdef HAVE_SCROLLBARS
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
259 if (f->sb_vcache)
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
260 mark_object (wrap_scrollbar_instance (f->sb_vcache));
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
261 if (f->sb_hcache)
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
262 mark_object (wrap_scrollbar_instance (f->sb_hcache));
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
263 #endif
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
264
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
265 mark_gutters (f);
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
266
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 }
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
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1726
diff changeset
271 print_frame (Lisp_Object obj, Lisp_Object printcharfun,
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1726
diff changeset
272 int UNUSED (escapeflag))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 struct frame *frm = XFRAME (obj);
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 (print_readably)
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
277 printing_unreadable_object ("#<frame %s 0x%x>",
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
278 XSTRING_DATA (frm->name), frm->header.uid);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
280 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
281 FRAME_TYPE_NAME (frm));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282 print_internal (frm->name, printcharfun, 1);
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
283 write_fmt_string (printcharfun, " 0x%x>", frm->header.uid);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285
934
c925bacdda60 [xemacs-hg @ 2002-07-29 09:21:12 by michaels]
michaels
parents: 872
diff changeset
286 DEFINE_LRECORD_IMPLEMENTATION ("frame", frame,
c925bacdda60 [xemacs-hg @ 2002-07-29 09:21:12 by michaels]
michaels
parents: 872
diff changeset
287 0, /*dumpable-flag*/
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
288 mark_frame, print_frame, 0, 0, 0,
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
289 frame_description,
934
c925bacdda60 [xemacs-hg @ 2002-07-29 09:21:12 by michaels]
michaels
parents: 872
diff changeset
290 struct frame);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293 nuke_all_frame_slots (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294 {
3017
1e7cc382eb16 [xemacs-hg @ 2005-10-24 10:07:26 by ben]
ben
parents: 2747
diff changeset
295 ZERO_LCRECORD (f);
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
296
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
297 #define MARKED_SLOT(x) f->x = Qnil;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298 #include "frameslots.h"
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 /* Allocate a new frame object and set all its fields to reasonable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 values. The root window is created but the minibuffer will be done
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303 later. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 static struct frame *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306 allocate_frame_core (Lisp_Object device)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 Lisp_Object frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 Lisp_Object root_window;
3017
1e7cc382eb16 [xemacs-hg @ 2005-10-24 10:07:26 by ben]
ben
parents: 2747
diff changeset
311 struct frame *f = ALLOC_LCRECORD_TYPE (struct frame, &lrecord_frame);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313 nuke_all_frame_slots (f);
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
314 frame = wrap_frame (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 f->device = device;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317 f->framemeths = XDEVICE (device)->devmeths;
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
318 f->frametype = get_console_variant (XDEVICE_TYPE (device));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319 f->buffer_alist = Fcopy_sequence (Vbuffer_alist);
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 root_window = allocate_window ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322 XWINDOW (root_window)->frame = frame;
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 /* 10 is arbitrary,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 Just so that there is "something there."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 Correct size will be set up later with change_frame_size. */
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 f->width = 10;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 f->height = 10;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 XWINDOW (root_window)->pixel_width = 10;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 XWINDOW (root_window)->pixel_height = 9;
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 f->root_window = root_window;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 f->selected_window = root_window;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 f->last_nonminibuf_window = root_window;
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 /* cache of subwindows visible on frame */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
339 f->subwindow_instance_cache = make_weak_list (WEAK_LIST_SIMPLE);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 /* associated exposure ignore list */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 f->subwindow_exposures = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 f->subwindow_exposures_tail = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
345 FRAME_SET_PAGENUMBER (f, 1);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
346
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
347 note_object_created (root_window);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
348
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 /* Choose a buffer for the frame's root window. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 XWINDOW (root_window)->buffer = Qt;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 Lisp_Object buf;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 buf = Fcurrent_buffer ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 /* 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
356 a space), try to find another one. */
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
357 if (string_ichar (Fbuffer_name (buf), 0) == ' ')
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 buf = Fother_buffer (buf, Qnil, Qnil);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
359 Fset_window_buffer (root_window, buf, Qnil);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362 return f;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 setup_normal_frame (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 Lisp_Object mini_window;
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
369 Lisp_Object frame = wrap_frame (f);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
370
428
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 mini_window = allocate_window ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373 XWINDOW (f->root_window)->next = mini_window;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 XWINDOW (mini_window)->prev = f->root_window;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 XWINDOW (mini_window)->mini_p = Qt;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 XWINDOW (mini_window)->frame = frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 f->minibuffer_window = mini_window;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 f->has_minibuffer = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
380 note_object_created (mini_window);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
381
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382 XWINDOW (mini_window)->buffer = Qt;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
383 Fset_window_buffer (mini_window, Vminibuffer_zero, Qt);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
384 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386 /* Make a frame using a separate minibuffer window on another frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387 MINI_WINDOW is the minibuffer window to use. nil means use the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
388 default-minibuffer-frame. */
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 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391 setup_frame_without_minibuffer (struct frame *f, Lisp_Object mini_window)
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 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394 Lisp_Object device = f->device;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396 if (!NILP (mini_window))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
397 CHECK_LIVE_WINDOW (mini_window);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399 if (!NILP (mini_window)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400 && !EQ (DEVICE_CONSOLE (XDEVICE (device)),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 FRAME_CONSOLE (XFRAME (XWINDOW (mini_window)->frame))))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
402 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
403
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
404 /* Do not create a default minibuffer frame on printer devices. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
405 if (NILP (mini_window)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
406 && DEVICE_DISPLAY_P (XDEVICE (FRAME_DEVICE (f))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
407 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408 struct console *con = XCONSOLE (FRAME_CONSOLE (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 /* Use default-minibuffer-frame if possible. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410 if (!FRAMEP (con->default_minibuffer_frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 || ! FRAME_LIVE_P (XFRAME (con->default_minibuffer_frame)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 /* If there's no minibuffer frame to use, create one. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414 con->default_minibuffer_frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415 = call1 (Qmake_initial_minibuffer_frame, device);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
416 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417 mini_window = XFRAME (con->default_minibuffer_frame)->minibuffer_window;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420 /* Install the chosen minibuffer window, with proper buffer. */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
421 if (!NILP (mini_window))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
422 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
423 store_minibuf_frame_prop (f, mini_window);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
424 Fset_window_buffer (mini_window, Vminibuffer_zero, Qt);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
425 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
426 else
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
427 f->minibuffer_window = Qnil;
428
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 /* Make a frame containing only a minibuffer window. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
432 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433 setup_minibuffer_frame (struct frame *f)
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 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
436 /* First make a frame containing just a root window, no minibuffer. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437 Lisp_Object mini_window;
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
438 Lisp_Object frame = wrap_frame (f);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
439
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
440
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441 f->no_split = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442 f->has_minibuffer = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444 /* Now label the root window as also being the minibuffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445 Avoid infinite looping on the window chain by marking next pointer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 as nil. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
447
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
448 mini_window = f->minibuffer_window = f->root_window;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
449 XWINDOW (mini_window)->mini_p = Qt;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450 XWINDOW (mini_window)->next = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
451 XWINDOW (mini_window)->prev = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452 XWINDOW (mini_window)->frame = frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 /* Put the proper buffer in that window. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
456 Fset_window_buffer (mini_window, Vminibuffer_zero, Qt);
428
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
459 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
460 make_sure_its_a_fresh_plist (Lisp_Object foolist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
461 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
462 if (CONSP (Fcar (foolist)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
463 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464 /* looks like an alist to me. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
465 foolist = Fcopy_alist (foolist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
466 foolist = Fdestructive_alist_to_plist (foolist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
467 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
468 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
469 foolist = Fcopy_sequence (foolist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
470
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471 return foolist;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473
558
ed498ef2108b [xemacs-hg @ 2001-05-23 09:59:33 by ben]
ben
parents: 546
diff changeset
474 static Lisp_Object
546
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
475 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
476 {
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
477 Lisp_Object lissed = XCDR (kawnz);
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
478 if (!EQ (lissed, Qunbound))
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
479 DEVICE_FRAME_LIST (XDEVICE (XCAR (kawnz))) = lissed;
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
480 return Qnil;
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
481 }
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
482
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
483 DEFUN ("make-frame", Fmake_frame, 0, 2, "", /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
484 Create and return a new frame, displaying the current buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485 Runs the functions listed in `create-frame-hook' after frame creation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487 Optional argument PROPS is a property list (a list of alternating
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488 keyword-value specifications) of properties for the new frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489 \(An alist is accepted for backward compatibility but should not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490 be passed in.)
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 See `set-frame-properties', `default-x-frame-plist', and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493 `default-tty-frame-plist' for the specially-recognized properties.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
495 (props, device))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
497 struct frame *f;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498 struct device *d;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499 Lisp_Object frame = Qnil, name = Qnil, minibuf;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500 struct gcpro gcpro1, gcpro2, gcpro3;
546
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
501 int speccount = specpdl_depth (), speccount2;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
502 int first_frame_on_device = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
503 int first_frame_on_console = 0;
546
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
504 Lisp_Object besmirched_cons = Qnil;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
505 int frame_name_is_defaulted = 1;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
506
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
507 d = decode_device (device);
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
508 device = wrap_device (d);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
510 /* PROPS and NAME may be freshly-created, so make sure to GCPRO. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
511 GCPRO3 (frame, props, name);
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 props = make_sure_its_a_fresh_plist (props);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514 if (DEVICE_SPECIFIC_FRAME_PROPS (d))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515 /* Put the device-specific props before the more general ones so
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516 that they override them. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517 props = nconc2 (props,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
518 make_sure_its_a_fresh_plist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
519 (*DEVICE_SPECIFIC_FRAME_PROPS (d)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
520 props = nconc2 (props, make_sure_its_a_fresh_plist (Vdefault_frame_plist));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
521 Fcanonicalize_lax_plist (props, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
522
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
523 name = Flax_plist_get (props, Qname, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
524 if (!NILP (name))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
525 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
526 CHECK_STRING (name);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
527 frame_name_is_defaulted = 0;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
528 }
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 2552
diff changeset
529 else if (!initialized)
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 2552
diff changeset
530 {
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 2552
diff changeset
531 /* We leave Vdefault_frame_name alone here so that it'll remain Qnil
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 2552
diff changeset
532 in the dumped executable, and we can choose it at runtime. */
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 2552
diff changeset
533 name = build_string("XEmacs");
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 2552
diff changeset
534 }
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 2552
diff changeset
535 else if (NILP (Vdefault_frame_name))
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 2552
diff changeset
536 {
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 2552
diff changeset
537 if (egetenv ("USE_EMACS_AS_DEFAULT_APPLICATION_CLASS"))
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 2552
diff changeset
538 {
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 2552
diff changeset
539 Vdefault_frame_name = build_string ("emacs");
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 2552
diff changeset
540 }
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 2552
diff changeset
541 else
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 2552
diff changeset
542 {
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 2552
diff changeset
543 Vdefault_frame_name = build_string ("XEmacs");
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 2552
diff changeset
544 }
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 2552
diff changeset
545 }
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 2552
diff changeset
546
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 2552
diff changeset
547 if (NILP(name) && STRINGP(Vdefault_frame_name))
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 2552
diff changeset
548 {
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 2552
diff changeset
549 name = Vdefault_frame_name;
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 2552
diff changeset
550 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
551
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
552 if (!NILP (Fstring_match (make_string ((const Ibyte *) "\\.", 2), name,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
553 Qnil, Qnil)))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
554 syntax_error (". not allowed in frame names", name);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
555
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
556 f = allocate_frame_core (device);
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
557 frame = wrap_frame (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
558
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
559 specbind (Qframe_being_created, name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
560 f->name = name;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
561
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
562 FRAMEMETH (f, init_frame_1, (f, props, frame_name_is_defaulted));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
563
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
564 minibuf = Flax_plist_get (props, Qminibuffer, Qunbound);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
565 if (UNBOUNDP (minibuf))
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 /* If minibuf is unspecified, then look for a minibuffer X resource. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
568 /* #### Not implemented any more. We need to fix things up so
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
569 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
570 props, above. This is the only way in general to assure
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
571 coherent behavior for all frame properties/resources/etc. */
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 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
574 props = Flax_plist_remprop (props, Qminibuffer);
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 if (EQ (minibuf, Qnone) || NILP (minibuf))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
577 setup_frame_without_minibuffer (f, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
578 else if (EQ (minibuf, Qonly))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
579 setup_minibuffer_frame (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
580 else if (WINDOWP (minibuf))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
581 setup_frame_without_minibuffer (f, minibuf);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
582 else if (EQ (minibuf, Qt) || UNBOUNDP (minibuf))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
583 setup_normal_frame (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
584 else
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
585 invalid_argument ("Invalid value for `minibuffer'", minibuf);
428
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 update_frame_window_mirror (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
588
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
589 if (initialized && !DEVICE_STREAM_P (d))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
590 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
591 if (!NILP (f->minibuffer_window))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
592 reset_face_cachels (XWINDOW (f->minibuffer_window));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
593 reset_face_cachels (XWINDOW (f->root_window));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
594 }
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 /* If no frames on this device formerly existed, say this is the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
597 first frame. It kind of assumes that frameless devices don't
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
598 exist, but it shouldn't be too harmful. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
599 if (NILP (DEVICE_FRAME_LIST (d)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
600 first_frame_on_device = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
601
546
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
602 /* 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
603 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
604 having a half-initialized frame attached to it */
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
605 speccount2 = specpdl_depth ();
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
606 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
607 besmirched_cons =
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
608 Fcons (device, DEVICE_FRAME_LIST (d)));
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
609
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
610 /* This *must* go before the init_*() methods. Those functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
611 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
612 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
613 the frame-specific version of the buffer-alist unless the frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
614 is accessible from the device. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
615
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
616 #if 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
617 DEVICE_FRAME_LIST (d) = nconc2 (DEVICE_FRAME_LIST (d), Fcons (frame, Qnil));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
618 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
619 DEVICE_FRAME_LIST (d) = Fcons (frame, DEVICE_FRAME_LIST (d));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
620 RESET_CHANGED_SET_FLAGS;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
621
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
622 note_object_created (frame);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
623
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
624 /* Now make sure that the initial cached values are set correctly.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
625 Do this after the init_frame method is called because that may
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
626 do things (e.g. create widgets) that are necessary for the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
627 specifier value-changed methods to work OK. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
628 recompute_all_cached_specifiers_in_frame (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
629
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
630 if (!DEVICE_STREAM_P (d))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
631 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
632 init_frame_faces (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
633
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
634 #ifdef HAVE_SCROLLBARS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
635 /* Finish up resourcing the scrollbars. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
636 init_frame_scrollbars (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
637 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
638
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
639 #ifdef HAVE_TOOLBARS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
640 /* Create the initial toolbars. We have to do this after the frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
641 methods are called because it may potentially call some things itself
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
642 which depend on the normal frame methods having initialized
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
643 things. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
644 init_frame_toolbars (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
645 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
646 reset_face_cachels (XWINDOW (FRAME_SELECTED_WINDOW (f)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
647 reset_glyph_cachels (XWINDOW (FRAME_SELECTED_WINDOW (f)));
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
648
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
649 change_frame_size (f, f->height, f->width, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
650 }
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 MAYBE_FRAMEMETH (f, init_frame_2, (f, props));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
653 Fset_frame_properties (frame, props);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
654 MAYBE_FRAMEMETH (f, init_frame_3, (f));
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 /* Hallelujah, praise the lord. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
657 f->init_finished = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
658
546
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
659 XCDR (besmirched_cons) = Qunbound;
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
660
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
661 unbind_to (speccount2);
546
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 545
diff changeset
662
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
663 /* 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
664 if (first_frame_on_device && NILP (DEVICE_SELECTED_FRAME (d)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
665 set_device_selected_frame (d, frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
666
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
667 /* If at startup or if the current console is a stream console
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
668 (usually also at startup), make this console the selected one
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
669 so that messages show up on it. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
670 if (NILP (Fselected_console ()) ||
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
671 CONSOLE_STREAM_P (XCONSOLE (Fselected_console ())))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
672 Fselect_console (DEVICE_CONSOLE (d));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
673
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
674 first_frame_on_console =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
675 (first_frame_on_device &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
676 XINT (Flength (CONSOLE_DEVICE_LIST (XCONSOLE (DEVICE_CONSOLE (d)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
677 == 1);
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 /* #### all this calling of frame methods at various odd times
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
680 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
681 to strange console-type-specific things that need to be done. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
682 MAYBE_FRAMEMETH (f, after_init_frame, (f, first_frame_on_device,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
683 first_frame_on_console));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
684
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
685 if (!DEVICE_STREAM_P (d))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
686 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
687 /* Now initialise the gutters. This won't change the frame size,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
688 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
689 will eventually do. Unfortunately gutter sizing code relies
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
690 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
691 earlier. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
692 init_frame_gutters (f);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
693
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
694 change_frame_size (f, f->height, f->width, 0);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
695 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
696
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
697 if (first_frame_on_device)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
698 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
699 if (first_frame_on_console)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
700 va_run_hook_with_args (Qcreate_console_hook, 1, DEVICE_CONSOLE (d));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
701 va_run_hook_with_args (Qcreate_device_hook, 1, device);
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 va_run_hook_with_args (Qcreate_frame_hook, 1, frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
704
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
705 /* Initialize custom-specific stuff. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
706 if (!UNBOUNDP (symbol_function (XSYMBOL (Qcustom_initialize_frame))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
707 call1 (Qcustom_initialize_frame, frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
708
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
709 UNGCPRO;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
710 unbind_to (speccount);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
711
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
712 return frame;
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
715
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
716 /* 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
717 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
718 (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
719 allow dead frames. Note that very few functions should accept dead
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
720 frames. It could be argued that functions should just do nothing when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
721 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
722 an oversight in the Lisp code that could potentially lead to strange
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
723 results and so it is better to catch the error early.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
724
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
725 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
726 function does but also makes sure the frame is an X frame. */
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 struct frame *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
729 decode_frame (Lisp_Object frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
730 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
731 if (NILP (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
732 return selected_frame ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
733
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
734 CHECK_LIVE_FRAME (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
735 return XFRAME (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
736 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
737
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
738 struct frame *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
739 decode_frame_or_selected (Lisp_Object cdf)
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 if (CONSOLEP (cdf))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
742 cdf = CONSOLE_SELECTED_DEVICE (decode_console (cdf));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
743 if (DEVICEP (cdf))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
744 cdf = DEVICE_SELECTED_FRAME (decode_device (cdf));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
745 return decode_frame (cdf);
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
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
748 Lisp_Object
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
749 frame_device (struct frame *f)
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
750 {
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
751 return FRAME_DEVICE (f);
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
752 }
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
753
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
754 int
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
755 frame_live_p (struct frame *f)
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
756 {
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
757 return FRAME_LIVE_P (f);
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
758 }
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
759
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
760
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
761 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
762 invalidate_vertical_divider_cache_in_frame (struct frame *f)
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 /* Invalidate cached value of needs_vertical_divider_p in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
765 every and all windows */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
766 map_windows (f, invalidate_vertical_divider_cache_in_window, 0);
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
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 * Frame size may change due to changes in scrollbars, toolbars,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
771 * default font etc. These changes are applied early in redisplay
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
772 * frame.
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 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
775 adjust_frame_size (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
776 {
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1313
diff changeset
777 /* This can call Lisp. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
778 int keep_char_size = 0;
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
779 Lisp_Object frame = wrap_frame (f);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
780
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
781 if (!f->size_slipped)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
782 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
783
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
784 /* Don't adjust tty frames. #### May break when TTY have menubars.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
785 Then, write an Vadjust_frame_function which will return t for TTY
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
786 frames. Another solution is frame_size_fixed_p method for TTYs,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
787 which always returned yes it's fixed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
788 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
789 if (!FRAME_WIN_P (f))
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 CLEAR_FRAME_SIZE_SLIPPED (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
792 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
793 }
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 /* frame_size_fixed_p tells that frame size cannot currently
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
796 be changed change due to external conditions */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
797 if (!FRAMEMETH_OR_GIVEN (f, frame_size_fixed_p, (f), 0))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
798 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
799 if (NILP (Vadjust_frame_function))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
800 keep_char_size = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
801 else if (EQ (Vadjust_frame_function, Qt))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
802 keep_char_size = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
803 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
804 keep_char_size =
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
805 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
806 Vadjust_frame_function, frame,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
807 0));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
808
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
809 if (keep_char_size)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
810 Fset_frame_size (frame, make_int (FRAME_CHARWIDTH(f)),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
811 make_int (FRAME_CHARHEIGHT(f)), Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
812 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
813
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
814 if (!keep_char_size)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
815 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
816 int height, width;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
817 pixel_to_char_size (f, FRAME_PIXWIDTH(f), FRAME_PIXHEIGHT(f),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
818 &width, &height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
819 change_frame_size (f, height, width, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
820 CLEAR_FRAME_SIZE_SLIPPED (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
821 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
822 }
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 /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
825 * This is a "specifier changed in frame" handler for various specifiers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
826 * changing which causes frame size adjustment
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 void
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1726
diff changeset
829 frame_size_slipped (Lisp_Object UNUSED (specifier), struct frame *f,
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1726
diff changeset
830 Lisp_Object UNUSED (oldval))
428
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 MARK_FRAME_SIZE_SLIPPED(f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
833 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
834
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
835 DEFUN ("framep", Fframep, 1, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
836 Return non-nil if OBJECT is a frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
837 Also see `frame-live-p'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
838 Note that FSF Emacs kludgily returns a value indicating what type of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
839 frame this is. Use the cleaner function `frame-type' for that.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
840 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
841 (object))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
842 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
843 return FRAMEP (object) ? Qt : Qnil;
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
846 DEFUN ("frame-live-p", Fframe_live_p, 1, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
847 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
848 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
849 (object))
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 return FRAMEP (object) && FRAME_LIVE_P (XFRAME (object)) ? Qt : Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
852 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
853
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
854
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
855 DEFUN ("focus-frame", Ffocus_frame, 1, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
856 Select FRAME and give it the window system focus.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
857 This function is not affected by the value of `focus-follows-mouse'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
858 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
859 (frame))
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 CHECK_LIVE_FRAME (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
862
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
863 MAYBE_DEVMETH (XDEVICE (FRAME_DEVICE (XFRAME (frame))), focus_on_frame,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
864 (XFRAME (frame)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
865 /* FRAME will be selected by the time we receive the next event.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
866 However, it is better to select it explicitly now, in case the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
867 Lisp code depends on frame being selected. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
868 Fselect_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
869 return Qnil;
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
872 /* Called from Fselect_window() */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
873 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
874 select_frame_1 (Lisp_Object frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
875 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
876 struct frame *f = XFRAME (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
877 Lisp_Object old_selected_frame = Fselected_frame (Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
878
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
879 if (EQ (frame, old_selected_frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
880 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
881
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
882 /* now select the frame's device */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
883 set_device_selected_frame (XDEVICE (FRAME_DEVICE (f)), frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
884 select_device_1 (FRAME_DEVICE (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
885
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
886 update_frame_window_mirror (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
887 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
888
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
889 DEFUN ("select-frame", Fselect_frame, 1, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
890 Select the frame FRAME.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
891 Subsequent editing commands apply to its selected window.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
892 The selection of FRAME lasts until the next time the user does
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
893 something to select a different frame, or until the next time this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
894 function is called.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
895
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
896 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
897 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
898 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
899
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
900 Also note that when focus-follows-mouse is non-nil, the frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
901 selection is temporary and is reverted when the current command
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
902 terminates, much like the buffer selected by `set-buffer'. In order
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
903 to effect a permanent focus change, use `focus-frame'.
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 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
906 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
907 CHECK_LIVE_FRAME (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
908
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
909 /* select the frame's selected window. This will call
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
910 selected_frame_1(). */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
911 Fselect_window (FRAME_SELECTED_WINDOW (XFRAME (frame)), Qnil);
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 /* Nothing should be depending on the return value of this function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
914 But, of course, there is stuff out there which is. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
915 return frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
916 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
917
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
918 /* use this to retrieve the currently selected frame. You should use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
919 this in preference to Fselected_frame (Qnil) unless you are prepared
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
920 to handle the possibility of there being no selected frame (this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
921 happens at some points during startup). */
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 struct frame *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
924 selected_frame (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
925 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
926 Lisp_Object device = Fselected_device (Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
927 Lisp_Object frame = DEVICE_SELECTED_FRAME (XDEVICE (device));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
928 if (NILP (frame))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
929 gui_error ("No frames exist on device", device);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
930 return XFRAME (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
931 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
932
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
933 /* use this instead of XFRAME (DEVICE_SELECTED_FRAME (d)) to catch
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
934 the possibility of there being no frames on the device (just created).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
935 There is no point doing this inside of redisplay because errors
2500
3d8143fc88e1 [xemacs-hg @ 2005-01-24 23:33:30 by ben]
ben
parents: 2367
diff changeset
936 cause an ABORT(), indicating a flaw in the logic, and error_check_frame()
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
937 will catch this just as well. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
938
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
939 struct frame *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
940 device_selected_frame (struct device *d)
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 Lisp_Object frame = DEVICE_SELECTED_FRAME (d);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
943 if (NILP (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
944 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
945 Lisp_Object device = wrap_device (d);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
946
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
947 gui_error ("No frames exist on device", device);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
948 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
949 return XFRAME (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
950 }
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 #if 0 /* FSFmacs */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
953
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 800
diff changeset
954 DEFUN ("handle-switch-frame", Fhandle_switch_frame, 1, 2, "e", /*
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
955 Handle a switch-frame event EVENT.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
956 Switch-frame events are usually bound to this function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
957 A switch-frame event tells Emacs that the window manager has requested
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
958 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
959 This function selects the selected window of the frame of EVENT.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
960
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
961 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
962 to that frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
963 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
964 (frame, no_enter))
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 /* Preserve prefix arg that the command loop just cleared. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
967 XCONSOLE (Vselected_console)->prefix_arg = Vcurrent_prefix_arg;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
968 #if 0 /* unclean! */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
969 run_hook (Qmouse_leave_buffer_hook);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
970 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
971 return do_switch_frame (frame, no_enter, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
972 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
973
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
974 /* A load of garbage. */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 800
diff changeset
975 DEFUN ("ignore-event", Fignore_event, 0, 0, "", /*
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
976 Do nothing, but preserve any prefix argument already specified.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
977 This is a suitable binding for iconify-frame and make-frame-visible.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
978 */
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 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
981 struct console *c = XCONSOLE (Vselected_console);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
982
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
983 c->prefix_arg = Vcurrent_prefix_arg;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
984 return Qnil;
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
987 #endif /* 0 */
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 DEFUN ("selected-frame", Fselected_frame, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
990 Return the frame that is now selected on device DEVICE.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
991 If DEVICE is not specified, the selected device will be used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
992 If no frames exist on the device, nil is returned.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
993 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
994 (device))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
995 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
996 if (NILP (device) && NILP (Fselected_device (Qnil)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
997 return Qnil; /* happens early in temacs */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
998 return DEVICE_SELECTED_FRAME (decode_device (device));
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1001 Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1002 frame_first_window (struct frame *f)
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 Lisp_Object w = f->root_window;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1005
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1006 while (1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1007 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1008 if (! NILP (XWINDOW (w)->hchild))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1009 w = XWINDOW (w)->hchild;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1010 else if (! NILP (XWINDOW (w)->vchild))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1011 w = XWINDOW (w)->vchild;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1012 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1013 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1014 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1015
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1016 return w;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1017 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1018
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1019 DEFUN ("active-minibuffer-window", Factive_minibuffer_window, 0, 0, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1020 Return the currently active minibuffer window, or nil if none.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1021 */
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 return minibuf_level ? minibuf_window : Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1025 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1026
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1027 DEFUN ("last-nonminibuf-frame", Flast_nonminibuf_frame, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1028 Return the most-recently-selected non-minibuffer-only frame on CONSOLE.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1029 This will always be the same as (selected-frame device) unless the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1030 selected frame is a minibuffer-only frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1031 CONSOLE defaults to the selected console if omitted.
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 (console))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1034 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1035 Lisp_Object result;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1036
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1037 console = wrap_console (decode_console (console));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1038 /* Just in case the machinations in delete_frame_internal() resulted
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1039 in the last-nonminibuf-frame getting out of sync, make sure and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1040 return the selected frame if it's acceptable. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1041 result = Fselected_frame (CONSOLE_SELECTED_DEVICE (XCONSOLE (console)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1042 if (!NILP (result) && !FRAME_MINIBUF_ONLY_P (XFRAME (result)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1043 return result;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1044 return CONSOLE_LAST_NONMINIBUF_FRAME (XCONSOLE (console));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1045 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1046
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1047 DEFUN ("frame-root-window", Fframe_root_window, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1048 Return the root-window of FRAME.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1049 If omitted, FRAME defaults to the currently selected frame.
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 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1052 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1053 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1054 return FRAME_ROOT_WINDOW (f);
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1057 DEFUN ("frame-selected-window", Fframe_selected_window, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1058 Return the selected window of frame object FRAME.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1059 If omitted, FRAME defaults to the currently selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1060 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1061 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1062 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1063 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1064 return FRAME_SELECTED_WINDOW (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1065 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1066
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1067 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1068 set_frame_selected_window (struct frame *f, Lisp_Object window)
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 assert (XFRAME (WINDOW_FRAME (XWINDOW (window))) == f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1071 f->selected_window = window;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1072 if (!MINI_WINDOW_P (XWINDOW (window)) || FRAME_MINIBUF_ONLY_P (f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1073 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1074 if (!EQ (f->last_nonminibuf_window, window))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1075 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1076 #ifdef HAVE_TOOLBARS
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1077 MARK_TOOLBAR_CHANGED;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1078 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1079 MARK_GUTTER_CHANGED;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1080 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1081 f->last_nonminibuf_window = window;
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 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1084
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1085 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
1086 Set the selected window of FRAME to WINDOW.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1087 If FRAME is nil, the selected frame is used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1088 If FRAME is the selected frame, this makes WINDOW the selected window.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1089 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1090 (frame, window))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1091 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1092 frame = wrap_frame (decode_frame (frame));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1093 CHECK_LIVE_WINDOW (window);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1094
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1095 if (! EQ (frame, WINDOW_FRAME (XWINDOW (window))))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
1096 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
1097
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1098 if (XFRAME (frame) == selected_frame ())
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1099 return Fselect_window (window, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1100
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1101 set_frame_selected_window (XFRAME (frame), window);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1102 return window;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1103 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1104
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1105
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1106 DEFUN ("frame-device", Fframe_device, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1107 Return the device that FRAME is on.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1108 If omitted, FRAME defaults to the currently selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1109 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1110 (frame))
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 return FRAME_DEVICE (decode_frame (frame));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1113 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1114
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1115 int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1116 is_surrogate_for_selected_frame (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1117 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1118 struct device *d = XDEVICE (f->device);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1119 struct frame *dsf = device_selected_frame (d);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1120
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1121 /* Can't be a surrogate for ourselves. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1122 if (f == dsf)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1123 return 0;
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 if (!FRAME_HAS_MINIBUF_P (dsf) &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1126 f == XFRAME (WINDOW_FRAME (XWINDOW (FRAME_MINIBUF_WINDOW (dsf)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1127 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1128 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1129 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1130 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1131
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1132 static int
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1133 frame_matches_frame_spec (Lisp_Object frame, Lisp_Object type)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1134 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1135 struct frame *f = XFRAME (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1136
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1137 if (WINDOWP (type))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1138 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1139 CHECK_LIVE_WINDOW (type);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1140
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1141 if (EQ (FRAME_MINIBUF_WINDOW (f), type)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1142 /* Check that F either is, or has forwarded
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1143 its focus to, TYPE's frame. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1144 && (EQ (WINDOW_FRAME (XWINDOW (type)), frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1145 || EQ (WINDOW_FRAME (XWINDOW (type)),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1146 FRAME_FOCUS_FRAME (f))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1147 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1148 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1149 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1150 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1151
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1152 #if 0 /* FSFmacs */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1153 if (EQ (type, Qvisible) || EQ (type, Qiconic) || EQ (type, Qvisible_iconic)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1154 || EQ (type, Qvisible_nomini) || EQ (type, Qiconic_nomini)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1155 || EQ (type, Qvisible_iconic_nomini))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1156 FRAME_SAMPLE_VISIBILITY (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1157 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1158
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1159 if (NILP (type))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1160 type = Qnomini;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1161 if (ZEROP (type))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1162 type = Qvisible_iconic;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1163
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1164 if (EQ (type, Qvisible))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1165 return FRAME_VISIBLE_P (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1166 if (EQ (type, Qiconic))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1167 return FRAME_ICONIFIED_P (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1168 if (EQ (type, Qinvisible))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1169 return !FRAME_VISIBLE_P (f) && !FRAME_ICONIFIED_P (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1170 if (EQ (type, Qvisible_iconic))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1171 return FRAME_VISIBLE_P (f) || FRAME_ICONIFIED_P (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1172 if (EQ (type, Qinvisible_iconic))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1173 return !FRAME_VISIBLE_P (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1174
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1175 if (EQ (type, Qnomini))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1176 return !FRAME_MINIBUF_ONLY_P (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1177 if (EQ (type, Qvisible_nomini))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1178 return FRAME_VISIBLE_P (f) && !FRAME_MINIBUF_ONLY_P (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1179 if (EQ (type, Qiconic_nomini))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1180 return FRAME_ICONIFIED_P (f) && !FRAME_MINIBUF_ONLY_P (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1181 if (EQ (type, Qinvisible_nomini))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1182 return !FRAME_VISIBLE_P (f) && !FRAME_ICONIFIED_P (f) &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1183 !FRAME_MINIBUF_ONLY_P (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1184 if (EQ (type, Qvisible_iconic_nomini))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1185 return ((FRAME_VISIBLE_P (f) || FRAME_ICONIFIED_P (f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1186 && !FRAME_MINIBUF_ONLY_P (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1187 if (EQ (type, Qinvisible_iconic_nomini))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1188 return !FRAME_VISIBLE_P (f) && !FRAME_MINIBUF_ONLY_P (f);
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 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1191 }
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 int
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1194 device_matches_device_spec (Lisp_Object device, Lisp_Object device_spec)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1195 {
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1196 if (EQ (device_spec, Qwindow_system))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1197 return DEVICE_WIN_P (XDEVICE (device));
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1198 if (DEVICEP (device_spec))
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1199 return EQ (device, device_spec);
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1200 if (CONSOLEP (device_spec))
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1201 return EQ (DEVICE_CONSOLE (XDEVICE (device)), device_spec);
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1202 if (valid_console_type_p (device_spec))
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1203 return EQ (DEVICE_TYPE (XDEVICE (device)), device_spec);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1204 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1205 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1206
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1207 /* Return the next frame in the frame list after FRAME.
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1208 WHICH-FRAMES and WHICH-DEVICES control which frames and devices
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1209 are considered; see `next-frame'. */
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 Lisp_Object
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1212 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
1213 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1214 Lisp_Object first = Qnil;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1215 Lisp_Object devcons, concons;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1216 int passed = 0;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1217
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1218 CHECK_LIVE_FRAME (frame);
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 DEVICE_LOOP_NO_BREAK (devcons, concons)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1221 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1222 Lisp_Object device = XCAR (devcons);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1223 Lisp_Object frmcons;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1224
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1225 if (!device_matches_device_spec (device, which_devices))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1226 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1227 if (EQ (device, FRAME_DEVICE (XFRAME (frame))))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1228 passed = 1;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1229 continue;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1230 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1231
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1232 DEVICE_FRAME_LOOP (frmcons, XDEVICE (device))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1233 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1234 Lisp_Object f = XCAR (frmcons);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1235
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1236 if (passed)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1237 {
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1238 if (frame_matches_frame_spec (f, which_frames))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1239 return f;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1240 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1241 else
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1242 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1243 if (EQ (frame, f))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1244 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1245 passed = 1;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1246 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1247 else
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1248 {
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1249 if (NILP (first) && frame_matches_frame_spec (f, which_frames))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1250 first = f;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1251 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1252 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1253 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1254 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1255
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1256 if (NILP (first))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1257 /* We went through the whole frame list without finding a single
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1258 acceptable frame. Return the original frame. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1259 return frame;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1260 else
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1261 /* There were no acceptable frames in the list after FRAME; otherwise,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1262 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
1263 acceptable frame in the list, return it. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1264 return first;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1265 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1266
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1267 /* Return the previous frame in the frame list before FRAME.
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1268 WHICH-FRAMES and WHICH-DEVICES control which frames and devices
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1269 are considered; see `next-frame'. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1270
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1271 Lisp_Object
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1272 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
1273 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1274 Lisp_Object devcons, concons;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1275 Lisp_Object last = Qnil;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1276
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1277 CHECK_LIVE_FRAME (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1278
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1279 DEVICE_LOOP_NO_BREAK (devcons, concons)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1280 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1281 Lisp_Object device = XCAR (devcons);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1282 Lisp_Object frmcons;
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 if (!device_matches_device_spec (device, which_devices))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1285 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1286 if (EQ (device, FRAME_DEVICE (XFRAME (frame)))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1287 && !NILP (last))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1288 return last;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1289 continue;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1290 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1291
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1292 DEVICE_FRAME_LOOP (frmcons, XDEVICE (device))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1293 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1294 Lisp_Object f = XCAR (frmcons);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1295
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1296 if (EQ (frame, f))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1297 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1298 if (!NILP (last))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1299 return last;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1300 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1301 else
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1302 {
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1303 if (frame_matches_frame_spec (f, which_frames))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1304 last = f;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1305 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1306 }
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
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1309 if (NILP (last))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1310 /* We went through the whole frame list without finding a single
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1311 acceptable frame. Return the original frame. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1312 return frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1313 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1314 /* 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
1315 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
1316 acceptable frame in the list, return it. */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1317 return last;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1318 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1319
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1320 DEFUN ("next-frame", Fnext_frame, 0, 3, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1321 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
1322 WHICH-FRAMES controls which frames are eligible to be returned; all
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1323 others will be skipped. Note that if there is only one eligible
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1324 frame, then `next-frame' called repeatedly will always return
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1325 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
1326 returned.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1327
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1328 Possible values for WHICH-FRAMES are
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1329
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 3017
diff changeset
1330 `visible' Consider only frames that are visible.
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 3017
diff changeset
1331 `iconic' Consider only frames that are iconic.
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 3017
diff changeset
1332 `invisible' Consider only frames that are invisible
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 3017
diff changeset
1333 (this is different from iconic).
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 3017
diff changeset
1334 `visible-iconic' Consider frames that are visible or iconic.
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 3017
diff changeset
1335 `invisible-iconic' Consider frames that are invisible or iconic.
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 3017
diff changeset
1336 `nomini' Consider all frames except minibuffer-only ones.
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 3017
diff changeset
1337 `visible-nomini' Like `visible' but omits minibuffer-only frames.
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 3017
diff changeset
1338 `iconic-nomini' Like `iconic' but omits minibuffer-only frames.
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 3017
diff changeset
1339 `invisible-nomini' Like `invisible' but omits minibuffer-only frames.
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 3017
diff changeset
1340 `visible-iconic-nomini' Like `visible-iconic' but omits minibuffer-only
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 3017
diff changeset
1341 frames.
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 3017
diff changeset
1342 `invisible-iconic-nomini' Like `invisible-iconic' but omits minibuffer-only
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 3017
diff changeset
1343 frames.
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 3017
diff changeset
1344 any other value Consider all frames.
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 3017
diff changeset
1345
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 3017
diff changeset
1346 If WHICH-FRAMES is omitted, `nomini' is used. A value for WHICH-FRAMES
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 3017
diff changeset
1347 of 0 (a number) is treated like `iconic', for backwards compatibility.
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1348
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1349 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
1350 now using that window as the minibuffer.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1351
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1352 The optional third argument WHICH-DEVICES further clarifies on which
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1353 devices to search for frames as specified by WHICH-FRAMES.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1354 If nil or omitted, search all devices on FRAME's console.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1355 If a device, only search that device.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1356 If a console, search all devices on that console.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1357 If a device type, search all devices of that type.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1358 If `window-system', search all window-system devices.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1359 Any other non-nil value means search all devices.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1360 */
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1361 (frame, which_frames, which_devices))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1362 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1363 frame = wrap_frame (decode_frame (frame));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1364
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1365 return next_frame (frame, which_frames, which_devices);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1366 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1367
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1368 DEFUN ("previous-frame", Fprevious_frame, 0, 3, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1369 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
1370 WHICH-FRAMES controls which frames are eligible to be returned; all
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1371 others will be skipped. Note that if there is only one eligible
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1372 frame, then `previous-frame' called repeatedly will always return
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1373 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
1374 returned.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1375
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1376 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
1377 arguments.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1378 */
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1379 (frame, which_frames, which_devices))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1380 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1381 frame = wrap_frame (decode_frame (frame));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1382
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1383 return previous_frame (frame, which_frames, which_devices);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1384 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1385
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1386 /* Return any frame for which PREDICATE is non-zero, or return Qnil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1387 if there aren't any. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1388
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1389 Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1390 find_some_frame (int (*predicate) (Lisp_Object, void *),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1391 void *closure)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1392 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1393 Lisp_Object framecons, devcons, concons;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1394
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1395 FRAME_LOOP_NO_BREAK (framecons, devcons, concons)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1396 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1397 Lisp_Object frame = XCAR (framecons);
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 if ((predicate) (frame, closure))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1400 return frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1401 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1402
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1403 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1404 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1405
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1406
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1407
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1408 /* extern void free_line_insertion_deletion_costs (struct frame *f); */
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 /* Return 1 if it is ok to delete frame F;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1411 0 if all frames aside from F are invisible.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1412 (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
1413 any other frames exist.) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1414
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1415 int
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1416 other_visible_frames (struct frame *f)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1417 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1418 Lisp_Object frame = wrap_frame (f);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1419
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1420 if (FRAME_STREAM_P (f))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1421 return !EQ (frame, next_frame (frame, Qt, Qt));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1422 return !EQ (frame, next_frame (frame, Qvisible_iconic_nomini, Qt));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1423 }
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 /* Delete frame F.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1426
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1427 If FORCE is non-zero, allow deletion of the only frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1429 If CALLED_FROM_DELETE_DEVICE is non-zero, then, if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1430 deleting the last frame on a device, just delete it,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1431 instead of calling `delete-device'.
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 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
1434 to an I/O error. This affects what happens if we exit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1435 (we do an emergency exit instead of `save-buffers-kill-emacs'.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1436 */
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 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1439 delete_frame_internal (struct frame *f, int force,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1440 int called_from_delete_device,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1441 int from_io_error)
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 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1444 int minibuffer_selected;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1445 struct device *d;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1446 struct console *con;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1447 Lisp_Object frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1448 Lisp_Object device;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1449 Lisp_Object console;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1450 struct gcpro gcpro1;
1313
671b65f2b075 [xemacs-hg @ 2003-02-20 01:12:25 by ben]
ben
parents: 1204
diff changeset
1451 int depth;
428
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 /* OK to delete an already deleted frame. */
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
1454 if (!FRAME_LIVE_P (f))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1455 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1456
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1457 frame = wrap_frame (f);
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
1458
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
1459 if (!force)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
1460 check_allowed_operation (OPERATION_DELETE_OBJECT, frame, Qnil);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
1461
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1462 GCPRO1 (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1463
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1464 device = FRAME_DEVICE (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1465 d = XDEVICE (device);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1466 console = DEVICE_CONSOLE (d);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1467 con = XCONSOLE (console);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1468
545
9a775fb11bb7 [xemacs-hg @ 2001-05-18 04:39:39 by kkm]
kkm
parents: 460
diff changeset
1469 if (!called_from_delete_device
9a775fb11bb7 [xemacs-hg @ 2001-05-18 04:39:39 by kkm]
kkm
parents: 460
diff changeset
1470 && !DEVICE_IMPL_FLAG (d, XDEVIMPF_FRAMELESS_OK))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1471 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1472 /* If we're deleting the only non-minibuffer frame on the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1473 device, delete the device. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1474 if (EQ (frame, next_frame (frame, Qnomini, FRAME_DEVICE (f))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1475 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1476 delete_device_internal (d, force, 0, from_io_error);
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1482 /* In FSF, delete-frame will not normally allow you to delete the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1483 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
1484 only frame. However, this would let people shoot themselves by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1485 deleting all frames which were either visible or iconified and thus
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1486 losing any way of communicating with the still running XEmacs process.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1487 So we put it back. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1488 if (!force && !allow_deletion_of_last_visible_frame &&
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1489 !other_visible_frames (f))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
1490 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
1491
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1492 /* Does this frame have a minibuffer, and is it the surrogate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1493 minibuffer for any other frame? */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1494 if (FRAME_HAS_MINIBUF_P (f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1495 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1496 Lisp_Object frmcons, devcons, concons;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1497
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1498 FRAME_LOOP_NO_BREAK (frmcons, devcons, concons)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1499 {
2552
166ed8151e62 [xemacs-hg @ 2005-02-03 16:30:33 by james]
james
parents: 2551
diff changeset
1500 Lisp_Object this_frame = XCAR (frmcons);
166ed8151e62 [xemacs-hg @ 2005-02-03 16:30:33 by james]
james
parents: 2551
diff changeset
1501
166ed8151e62 [xemacs-hg @ 2005-02-03 16:30:33 by james]
james
parents: 2551
diff changeset
1502 if (! EQ (this_frame, frame)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1503 && EQ (frame, (WINDOW_FRAME
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1504 (XWINDOW
2552
166ed8151e62 [xemacs-hg @ 2005-02-03 16:30:33 by james]
james
parents: 2551
diff changeset
1505 (FRAME_MINIBUF_WINDOW (XFRAME (this_frame)))))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1506 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1507 /* We've found another frame whose minibuffer is on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1508 this frame. */
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
1509 gui_error
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1510 ("Attempt to delete a surrogate minibuffer frame", frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1511 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1512 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1513 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1514
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1515 /* Test for popup frames hanging around. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1516 /* Deletion of a parent frame with popups is deadly. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1517 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1518 Lisp_Object frmcons, devcons, concons;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1519
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1520 FRAME_LOOP_NO_BREAK (frmcons, devcons, concons)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1521 {
2552
166ed8151e62 [xemacs-hg @ 2005-02-03 16:30:33 by james]
james
parents: 2551
diff changeset
1522 Lisp_Object this_frame = XCAR (frmcons);
166ed8151e62 [xemacs-hg @ 2005-02-03 16:30:33 by james]
james
parents: 2551
diff changeset
1523
166ed8151e62 [xemacs-hg @ 2005-02-03 16:30:33 by james]
james
parents: 2551
diff changeset
1524
166ed8151e62 [xemacs-hg @ 2005-02-03 16:30:33 by james]
james
parents: 2551
diff changeset
1525 if (! EQ (this_frame, frame))
428
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 struct device *devcons_d = XDEVICE (XCAR (devcons));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1528 if (EQ (frame, DEVMETH_OR_GIVEN (devcons_d, get_frame_parent,
2552
166ed8151e62 [xemacs-hg @ 2005-02-03 16:30:33 by james]
james
parents: 2551
diff changeset
1529 (XFRAME (this_frame)),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1530 Qnil)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1531 /* 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
1532 gui_error
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1533 ("Attempt to delete a frame with live popups", frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1534 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1535 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1536 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1537
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1538 /* Before here, we haven't made any dangerous changes (just checked for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1539 error conditions). Now run the delete-frame-hook. Remember that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1540 user code there could do any number of dangerous things, including
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1541 signalling an error. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1542
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1543 va_run_hook_with_args (Qdelete_frame_hook, 1, frame);
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 (!FRAME_LIVE_P (f)) /* Make sure the delete-frame-hook didn't */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1546 { /* go ahead and delete anything. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1547 UNGCPRO;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1548 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1549 }
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 /* Call the delete-device-hook and delete-console-hook now if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1552 appropriate, before we do any dangerous things -- they too could
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1553 signal an error. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1554 if (XINT (Flength (DEVICE_FRAME_LIST (d))) == 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1555 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1556 va_run_hook_with_args (Qdelete_device_hook, 1, device);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1557 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
1558 { /* go ahead and delete anything. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1559 UNGCPRO;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1560 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1561 }
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 (XINT (Flength (CONSOLE_DEVICE_LIST (con))) == 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1564 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1565 va_run_hook_with_args (Qdelete_console_hook, 1, console);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1566 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
1567 { /* go ahead and delete anything. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1568 UNGCPRO;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1569 return;
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 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1572 }
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 minibuffer_selected = EQ (minibuf_window, Fselected_window (Qnil));
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 /* 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
1577 Assume that we lost the focus; that way, the call to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1578 Fselect_frame() below won't end up making us explicitly
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1579 focus on another frame, which is generally undesirable in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1580 a point-to-type world. If our mouse ends up sitting over
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1581 another frame, we will receive a FocusIn event and end up
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1582 making that frame the selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1583
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1584 #### This may not be an ideal solution in a click-to-type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1585 world (in that case, we might want to explicitly choose
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1586 another frame to have the focus, rather than relying on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1587 the WM, which might focus on a frame in a different app
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1588 or focus on nothing at all). But there's no easy way
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1589 to detect which focus model we're running on, and the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1590 alternative is more heinous. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1591
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1592 if (EQ (frame, DEVICE_FRAME_WITH_FOCUS_REAL (d)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1593 DEVICE_FRAME_WITH_FOCUS_REAL (d) = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1594 if (EQ (frame, DEVICE_FRAME_WITH_FOCUS_FOR_HOOKS (d)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1595 DEVICE_FRAME_WITH_FOCUS_FOR_HOOKS (d) = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1596 if (EQ (frame, DEVICE_FRAME_THAT_OUGHT_TO_HAVE_FOCUS (d)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1597 DEVICE_FRAME_THAT_OUGHT_TO_HAVE_FOCUS (d) = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1598
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1599 /* Don't allow the deleted frame to remain selected.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1600 Note that in the former scheme of things, this would
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1601 have caused us to regain the focus. This no longer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1602 applies (see above); I think the new behavior is more
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1603 logical. If someone disagrees, it can always be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1604 changed (or a new user variable can be introduced, ugh.) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1605 if (EQ (frame, DEVICE_SELECTED_FRAME (d)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1606 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1607 Lisp_Object next;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1608
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1609 /* If this is a popup frame, select its parent if possible.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1610 Otherwise, find another visible frame; if none, just take any frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1611 First try the same device, then the same console. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1612
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1613 next = DEVMETH_OR_GIVEN (d, get_frame_parent, (f), Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1614 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
1615 next = next_frame (frame, Qvisible, device);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1616 if (NILP (next) || EQ (next, frame))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1617 next = next_frame (frame, Qvisible, console);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1618 if (NILP (next) || EQ (next, frame))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1619 next = next_frame (frame, Qvisible, Qt);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1620 if (NILP (next) || EQ (next, frame))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1621 next = next_frame (frame, Qt, device);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1622 if (NILP (next) || EQ (next, frame))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1623 next = next_frame (frame, Qt, console);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1624 if (NILP (next) || EQ (next, frame))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1625 next = next_frame (frame, Qt, Qt);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1626
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1627 /* if we haven't found another frame at this point
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1628 then there aren't any. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1629 if (NILP (next) || EQ (next, frame))
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 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1632 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1633 int did_select = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1634 /* if this is the global selected frame, select another one. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1635 if (EQ (frame, Fselected_frame (Qnil)))
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 Fselect_frame (next);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1638 did_select = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1639 }
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 * If the new frame we just selected is on a different
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1642 * device then we still need to change DEVICE_SELECTED_FRAME(d)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1643 * to a live frame, if there are any left on this device.
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 if (!EQ (device, FRAME_DEVICE(XFRAME(next))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1646 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1647 Lisp_Object next_f = next_frame (frame, Qt, device);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1648 if (NILP (next_f) || EQ (next_f, frame))
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1649 set_device_selected_frame (d, Qnil);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1650 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1651 set_device_selected_frame (d, next_f);
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 else if (! did_select)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1654 set_device_selected_frame (d, next);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1655
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 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1658
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1659 /* Don't allow minibuf_window to remain on a deleted frame. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1660 if (EQ (f->minibuffer_window, minibuf_window))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1661 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1662 struct frame *sel_frame = selected_frame ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1663 Fset_window_buffer (sel_frame->minibuffer_window,
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1664 XWINDOW (minibuf_window)->buffer, Qt);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1665 minibuf_window = sel_frame->minibuffer_window;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1666
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1667 /* If the dying minibuffer window was selected,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1668 select the new one. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1669 if (minibuffer_selected)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1670 Fselect_window (minibuf_window, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1671 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1672
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1673 /* After this point, no errors must be allowed to occur. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1674
1313
671b65f2b075 [xemacs-hg @ 2003-02-20 01:12:25 by ben]
ben
parents: 1204
diff changeset
1675 /* Checking for QUIT can run all sorts of weird code and may be deadly
671b65f2b075 [xemacs-hg @ 2003-02-20 01:12:25 by ben]
ben
parents: 1204
diff changeset
1676 so don't let it happen. */
671b65f2b075 [xemacs-hg @ 2003-02-20 01:12:25 by ben]
ben
parents: 1204
diff changeset
1677 depth = begin_dont_check_for_quit ();
671b65f2b075 [xemacs-hg @ 2003-02-20 01:12:25 by ben]
ben
parents: 1204
diff changeset
1678
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1679 #ifdef HAVE_MENUBARS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1680 free_frame_menubars (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1681 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1682 #ifdef HAVE_SCROLLBARS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1683 free_frame_scrollbars (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1684 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1685 #ifdef HAVE_TOOLBARS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1686 free_frame_toolbars (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1687 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1688 free_frame_gutters (f);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1689 /* Unfortunately deleting the frame will also delete the parent of
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1690 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
1691 can lead to bad things when trying to finalize the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1692 instances. Thus we loop over all instance caches calling the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1693 finalize method for each instance. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1694 free_frame_subwindow_instances (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1695
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1696 /* This must be done before the window and window_mirror structures
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1697 are freed. The scrollbar information is attached to them. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1698 MAYBE_FRAMEMETH (f, delete_frame, (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1699
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1700 /* 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
1701 remove the reference to them. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1702 delete_all_subwindows (XWINDOW (f->root_window));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1703 f->root_window = Qnil;
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 /* clear out the cached glyph information */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1706 f->subwindow_instance_cache = Qnil;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1707
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1708 /* Remove the frame now from the list. This way, any events generated
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1709 on this frame by the maneuvers below will disperse themselves. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1710
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1711 /* 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
1712 QUIT checker happens to get invoked, because the frame list is in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1713 an inconsistent state. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1714 d->frame_list = delq_no_quit (frame, d->frame_list);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1715 RESET_CHANGED_SET_FLAGS;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1716
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1717 f->visible = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1718
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
1719 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
1720
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1721 /* free_line_insertion_deletion_costs (f); */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1722
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1723 /* 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
1724 another one. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1725 if (EQ (frame, CONSOLE_LAST_NONMINIBUF_FRAME (con)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1726 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1727 Lisp_Object frmcons, devcons;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1728
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1729 set_console_last_nonminibuf_frame (con, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1730
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1731 CONSOLE_FRAME_LOOP_NO_BREAK (frmcons, devcons, con)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1732 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1733 Lisp_Object ecran = XCAR (frmcons);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1734 if (!FRAME_MINIBUF_ONLY_P (XFRAME (ecran)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1735 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1736 set_console_last_nonminibuf_frame (con, ecran);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1737 goto double_break_1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1738 }
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 double_break_1:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1742
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1743 #if 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1744 /* The following test is degenerate FALSE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1745 if (called_from_delete_device < 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1746 /* then we're being called from delete-console, and we shouldn't
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1747 try to find another default-minibuffer frame for the console.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1748 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1749 con->default_minibuffer_frame = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1750 #endif
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 /* If we've deleted this console's default_minibuffer_frame, try to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1753 find another one. Prefer minibuffer-only frames, but also notice
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1754 frames with other windows. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1755 if (EQ (frame, con->default_minibuffer_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 Lisp_Object frmcons, devcons;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1758 /* The last frame we saw with a minibuffer, minibuffer-only or not. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1759 Lisp_Object frame_with_minibuf;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1760 /* 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
1761 Lisp_Object frame_on_same_console;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1762
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1763 frame_on_same_console = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1764 frame_with_minibuf = Qnil;
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 set_console_last_nonminibuf_frame (con, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1767
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1768 CONSOLE_FRAME_LOOP_NO_BREAK (frmcons, devcons, con)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1769 {
2552
166ed8151e62 [xemacs-hg @ 2005-02-03 16:30:33 by james]
james
parents: 2551
diff changeset
1770 Lisp_Object this_frame;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1771 struct frame *f1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1772
2552
166ed8151e62 [xemacs-hg @ 2005-02-03 16:30:33 by james]
james
parents: 2551
diff changeset
1773 this_frame = XCAR (frmcons);
166ed8151e62 [xemacs-hg @ 2005-02-03 16:30:33 by james]
james
parents: 2551
diff changeset
1774 f1 = XFRAME (this_frame);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1775
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1776 /* Consider only frames on the same console
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1777 and only those with minibuffers. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1778 if (FRAME_HAS_MINIBUF_P (f1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1779 {
2552
166ed8151e62 [xemacs-hg @ 2005-02-03 16:30:33 by james]
james
parents: 2551
diff changeset
1780 frame_with_minibuf = this_frame;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1781 if (FRAME_MINIBUF_ONLY_P (f1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1782 goto double_break_2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1783 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1784
2552
166ed8151e62 [xemacs-hg @ 2005-02-03 16:30:33 by james]
james
parents: 2551
diff changeset
1785 frame_on_same_console = this_frame;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1786 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1787 double_break_2:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1788
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1789 if (!NILP (frame_on_same_console))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1790 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1791 /* We know that there must be some frame with a minibuffer out
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1792 there. If this were not true, all of the frames present
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1793 would have to be minibuffer-less, which implies that at some
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1794 point their minibuffer frames must have been deleted, but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1795 that is prohibited at the top; you can't delete surrogate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1796 minibuffer frames. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1797 if (NILP (frame_with_minibuf))
2500
3d8143fc88e1 [xemacs-hg @ 2005-01-24 23:33:30 by ben]
ben
parents: 2367
diff changeset
1798 ABORT ();
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1799
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1800 con->default_minibuffer_frame = frame_with_minibuf;
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 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1803 /* No frames left on this console--say no minibuffer either. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1804 con->default_minibuffer_frame = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1805 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1806
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
1807 /* 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
1808 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
1809 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
1810 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
1811 them. */
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
1812
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
1813 nuke_all_frame_slots (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1814 f->framemeths = dead_console_methods;
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
1815 f->frametype = dead_console;
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 563
diff changeset
1816
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
1817 note_object_deleted (frame);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 826
diff changeset
1818
1313
671b65f2b075 [xemacs-hg @ 2003-02-20 01:12:25 by ben]
ben
parents: 1204
diff changeset
1819 unbind_to (depth);
671b65f2b075 [xemacs-hg @ 2003-02-20 01:12:25 by ben]
ben
parents: 1204
diff changeset
1820
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1821 UNGCPRO;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1822 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1823
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1824 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1825 io_error_delete_frame (Lisp_Object frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1826 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1827 delete_frame_internal (XFRAME (frame), 1, 0, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1828 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1829
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1830 DEFUN ("delete-frame", Fdelete_frame, 0, 2, "", /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1831 Delete FRAME, permanently eliminating it from use.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1832 If omitted, FRAME defaults to the selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1833 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
1834 Normally, you cannot delete the last non-minibuffer-only frame (you must
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1835 use `save-buffers-kill-emacs' or `kill-emacs'). However, if optional
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1836 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
1837 will automatically call `save-buffers-kill-emacs'.)
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 (frame, force))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1840 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1841 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1842 struct frame *f;
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 if (NILP (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1845 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1846 f = selected_frame ();
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1847 frame = wrap_frame (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1848 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1849 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1850 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1851 CHECK_FRAME (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1852 f = XFRAME (frame);
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1855 delete_frame_internal (f, !NILP (force), 0, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1856 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1857 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1858
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1859
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1860 /* Return mouse position in character cell units. */
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 static int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1863 mouse_pixel_position_1 (struct device *d, Lisp_Object *frame,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1864 int *x, int *y)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1865 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1866 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
1867 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1868 case 1:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1869 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1870
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1871 case 0:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1872 *frame = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1873 break;
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 case -1:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1876 *frame = DEVICE_SELECTED_FRAME (d);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1877 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1878
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1879 default:
2500
3d8143fc88e1 [xemacs-hg @ 2005-01-24 23:33:30 by ben]
ben
parents: 2367
diff changeset
1880 ABORT (); /* method is incorrectly written */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1881 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1882
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1883 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1884 }
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 DEFUN ("mouse-pixel-position", Fmouse_pixel_position, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1887 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
1888 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
1889 of the window.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1890
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1891 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
1892
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1893 DEVICE specifies the device on which to read the mouse position, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1894 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
1895 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
1896 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
1897 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1898 (device))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1899 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1900 struct device *d = decode_device (device);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1901 Lisp_Object frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1902 Lisp_Object window = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1903 Lisp_Object x = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1904 Lisp_Object y = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1905 int intx, inty;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1906
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1907 if (mouse_pixel_position_1 (d, &frame, &intx, &inty) > 0)
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 struct window *w =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1910 find_window_by_pixel_pos (intx, inty, XFRAME (frame)->root_window);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1911 if (w)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1912 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1913 window = wrap_window (w);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1914
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1915 /* Adjust the position to be relative to the window. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1916 intx -= w->pixel_left;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1917 inty -= w->pixel_top;
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1918 x = make_int (intx);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1919 y = make_int (inty);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1920 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1921 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1922 else if (FRAMEP (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1923 window = FRAME_SELECTED_WINDOW (XFRAME (frame));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1924
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1925 return Fcons (window, Fcons (x, 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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1928 DEFUN ("mouse-position", Fmouse_position, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1929 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
1930 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
1931 corner of the window.
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 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
1934 value is a list (nil nil).
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 DEVICE specifies the device on which to read the mouse position, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1937 defaults to the selected device. If the device is a mouseless terminal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1938 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
1939 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
1940 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1941 (device))
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 struct device *d = decode_device (device);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1944 struct window *w;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1945 Lisp_Object frame, window = Qnil, lisp_x = Qnil, lisp_y = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1946 int x, y, obj_x, obj_y;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 617
diff changeset
1947 Charbpos charbpos, closest;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1948 Charcount modeline_closest;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1949 Lisp_Object obj1, obj2;
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 if (mouse_pixel_position_1 (d, &frame, &x, &y) > 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1952 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1953 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
1954 &obj_x, &obj_y, &w, &charbpos,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1955 &closest, &modeline_closest,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1956 &obj1, &obj2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1957 if (res == OVER_TEXT)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1958 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1959 lisp_x = make_int (x);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1960 lisp_y = make_int (y);
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1961 window = wrap_window (w);
428
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 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1964 else if (FRAMEP (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1965 window = FRAME_SELECTED_WINDOW (XFRAME (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 return Fcons (window, Fcons (lisp_x, lisp_y));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1968 }
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 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
1971 Return the current mouse position as a motion event.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1972 This allows you to call the standard event functions such as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1973 `event-over-toolbar-p' to determine where the mouse is.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1974
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1975 DEVICE specifies the device on which to read the mouse position, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1976 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
1977 \(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
1978 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1979 (device))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1980 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1981 struct device *d = decode_device (device);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1982 Lisp_Object frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1983 int intx, inty;
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 if (mouse_pixel_position_1 (d, &frame, &intx, &inty))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1986 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1987 Lisp_Object event = Fmake_event (Qnil, Qnil);
934
c925bacdda60 [xemacs-hg @ 2002-07-29 09:21:12 by michaels]
michaels
parents: 872
diff changeset
1988 XSET_EVENT_TYPE (event, pointer_motion_event);
c925bacdda60 [xemacs-hg @ 2002-07-29 09:21:12 by michaels]
michaels
parents: 872
diff changeset
1989 XSET_EVENT_CHANNEL (event, frame);
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
1990 XSET_EVENT_MOTION_X (event, intx);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1161
diff changeset
1991 XSET_EVENT_MOTION_Y (event, inty);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1992 return event;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1993 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1994 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1995 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1996 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1997
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1998 DEFUN ("set-mouse-position", Fset_mouse_position, 3, 3, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1999 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
2000 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
2001 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
2002 before calling this function on it, like this.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2003 (while (not (frame-visible-p frame)) (sleep-for .5))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2004 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
2005 that the behavior won't end up being obnoxious!
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2006 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2007 (window, x, y))
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 struct window *w;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2010 int pix_x, pix_y;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2011
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2012 CHECK_LIVE_WINDOW (window);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2013 CHECK_INT (x);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2014 CHECK_INT (y);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2015
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2016 /* Warping the mouse will cause EnterNotify and Focus events under X. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2017 w = XWINDOW (window);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2018 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
2019
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2020 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
2021
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2022 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2023 }
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 DEFUN ("set-mouse-pixel-position", Fset_mouse_pixel_position, 3, 3, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2026 Move the mouse pointer to pixel position (X,Y) in WINDOW.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2027 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
2028 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
2029 before calling this function on it, like this.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2030 (while (not (frame-visible-p frame)) (sleep-for .5))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2031 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2032 (window, x, y))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2033 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2034 struct window *w;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2035
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2036 CHECK_LIVE_WINDOW (window);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2037 CHECK_INT (x);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2038 CHECK_INT (y);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2039
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2040 /* Warping the mouse will cause EnterNotify and Focus events under X. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2041 w = XWINDOW (window);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2042 FRAMEMETH (XFRAME (w->frame), set_mouse_position, (w, XINT (x), XINT (y)));
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 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2045 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2046
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2047 DEFUN ("make-frame-visible", Fmake_frame_visible, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2048 Make the frame FRAME visible (assuming it is an X-window).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2049 If omitted, FRAME defaults to the currently selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2050 Also raises the frame so that nothing obscures it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2051 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2052 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2053 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2054 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2055
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2056 MAYBE_FRAMEMETH (f, make_frame_visible, (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2057 return frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2058 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2059
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2060 DEFUN ("make-frame-invisible", Fmake_frame_invisible, 0, 2, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2061 Unconditionally removes frame from the display (assuming it is an X-window).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2062 If omitted, FRAME defaults to the currently selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2063 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
2064 icons) then you should call `iconify-frame' instead.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2065 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
2066 and uniconified, but if the second optional argument FORCE is non-nil,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2067 you may do so.
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 (frame, force))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2070 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2071 struct frame *f, *sel_frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2072 struct device *d;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2073
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2074 f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2075 d = XDEVICE (FRAME_DEVICE (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2076 sel_frame = XFRAME (DEVICE_SELECTED_FRAME (d));
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 if (NILP (force) && !other_visible_frames (f))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
2079 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
2080
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2081 /* Don't allow minibuf_window to remain on a deleted frame. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2082 if (EQ (f->minibuffer_window, minibuf_window))
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 Fset_window_buffer (sel_frame->minibuffer_window,
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2085 XWINDOW (minibuf_window)->buffer, Qt);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2086 minibuf_window = sel_frame->minibuffer_window;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2087 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2088
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2089 MAYBE_FRAMEMETH (f, make_frame_invisible, (f));
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 return Qnil;
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2094 DEFUN ("iconify-frame", Ficonify_frame, 0, 1, "", /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2095 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
2096 If omitted, FRAME defaults to the currently selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2097 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2098 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2099 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2100 struct frame *f, *sel_frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2101 struct device *d;
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 f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2104 d = XDEVICE (FRAME_DEVICE (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2105 sel_frame = XFRAME (DEVICE_SELECTED_FRAME (d));
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 /* Don't allow minibuf_window to remain on a deleted frame. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2108 if (EQ (f->minibuffer_window, minibuf_window))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2109 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2110 Fset_window_buffer (sel_frame->minibuffer_window,
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2111 XWINDOW (minibuf_window)->buffer, Qt);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2112 minibuf_window = sel_frame->minibuffer_window;
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 MAYBE_FRAMEMETH (f, iconify_frame, (f));
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 Qnil;
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 DEFUN ("deiconify-frame", Fdeiconify_frame, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2121 Open (de-iconify) the iconified frame FRAME.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2122 Under X, this is currently the same as `make-frame-visible'.
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 Also raises the frame so that nothing obscures it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2125 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2126 (frame))
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 return Fmake_frame_visible (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
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 3017
diff changeset
2131 /* FSF returns `icon' for iconized frames. What a crock! */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2132
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2133 DEFUN ("frame-visible-p", Fframe_visible_p, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2134 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
2135 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
2136 window system, may not show at all.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2137 N.B. Under X "visible" means Mapped. It the window is mapped but not
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 3017
diff changeset
2138 actually visible on screen then `frame-visible-p' returns `hidden'.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2139 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2140 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2141 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2142 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2143 int visible = FRAMEMETH_OR_GIVEN (f, frame_visible_p, (f), f->visible);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2144 return visible ? ( visible > 0 ? Qt : Qhidden ) : Qnil;
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2147 DEFUN ("frame-totally-visible-p", Fframe_totally_visible_p, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2148 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
2149 Always returns t for tty frames.
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 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2152 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2153 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2154 return (FRAMEMETH_OR_GIVEN (f, frame_totally_visible_p, (f), f->visible)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2155 ? Qt : Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2156 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2157
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2158 DEFUN ("frame-iconified-p", Fframe_iconified_p, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2159 Return t if FRAME is iconified.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2160 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
2161 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
2162 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
2163 frame is iconified, it will not be visible.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2164 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2165 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2166 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2167 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2168 if (f->visible)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2169 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2170 f->iconified = FRAMEMETH_OR_GIVEN (f, frame_iconified_p, (f), 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2171 return f->iconified ? Qt : Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2172 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2173
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2174 DEFUN ("visible-frame-list", Fvisible_frame_list, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2175 Return a list of all frames now "visible" (being updated).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2176 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
2177 Note that under virtual window managers not all these frames are
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 450
diff changeset
2178 necessarily really updated.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2179 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2180 (device))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2181 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2182 Lisp_Object devcons, concons;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2183 struct frame *f;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2184 Lisp_Object value;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2185
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2186 value = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2187
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2188 DEVICE_LOOP_NO_BREAK (devcons, concons)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2189 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2190 assert (DEVICEP (XCAR (devcons)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2191
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2192 if (NILP (device) || EQ (device, XCAR (devcons)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2193 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2194 Lisp_Object frmcons;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2195
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2196 DEVICE_FRAME_LOOP (frmcons, XDEVICE (XCAR (devcons)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2197 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2198 Lisp_Object frame = XCAR (frmcons);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2199 f = XFRAME (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2200 if (FRAME_VISIBLE_P(f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2201 value = Fcons (frame, value);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2202 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2203 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2204 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2205
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2206 return value;
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 DEFUN ("raise-frame", Fraise_frame, 0, 1, "", /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2211 Bring FRAME to the front, so it occludes any frames it overlaps.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2212 If omitted, FRAME defaults to the currently selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2213 If FRAME is invisible, make it visible.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2214 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
2215 doesn't support multiple overlapping frames, this function does nothing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2216 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2217 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2218 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2219 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2220
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2221 /* Do like the documentation says. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2222 Fmake_frame_visible (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2223 MAYBE_FRAMEMETH (f, raise_frame, (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2224 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2225 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2226
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2227 DEFUN ("lower-frame", Flower_frame, 0, 1, "", /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2228 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
2229 If omitted, FRAME defaults to the currently selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2230 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
2231 doesn't support multiple overlapping frames, this function does nothing.
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 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2234 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2235 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2236
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2237 MAYBE_FRAMEMETH (f, lower_frame, (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2238 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2239 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2240
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2241
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2242 DEFUN ("disable-frame", Fdisable_frame, 1, 1, 0, /*
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2243 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
2244 This is normally used during modal dialog boxes.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2245 WARNING: Be very careful not to wedge XEmacs!
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2246 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
2247 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2248 (frame))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2249 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2250 struct frame *f = decode_frame (frame);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2251
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2252 f->disabled = 1;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2253 MAYBE_FRAMEMETH (f, disable_frame, (f));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2254 return Qnil;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2255 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2256
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2257 DEFUN ("enable-frame", Fenable_frame, 1, 1, 0, /*
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2258 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
2259 Frames are normally enabled, unless explicitly disabled using `disable-frame'.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2260 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2261 (frame))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2262 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2263 struct frame *f = decode_frame (frame);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2264 f->disabled = 0;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2265 MAYBE_FRAMEMETH (f, enable_frame, (f));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2266 return Qnil;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2267 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2268
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2269 /* 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
2270 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
2271
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2272 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
2273 Return current page number for the print job FRAME.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2274 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2275 (frame))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2276 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2277 CHECK_PRINTER_FRAME (frame);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2278 return make_int (FRAME_PAGENUMBER (XFRAME (frame)));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2279 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2280
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2281 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
2282 Eject page in the print job FRAME.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2283 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2284 (frame))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2285 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2286 struct frame *f;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2287
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2288 CHECK_PRINTER_FRAME (frame);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2289 f = XFRAME (frame);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2290 FRAMEMETH (f, eject_page, (f));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2291 FRAME_SET_PAGENUMBER (f, 1 + FRAME_PAGENUMBER (f));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2292 f->clear = 1;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2293
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2294 return Qnil;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2295 }
428
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 /***************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2299 /* frame properties */
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2302 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
2303 int pretend);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2304
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2305 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2306 store_minibuf_frame_prop (struct frame *f, Lisp_Object val)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2307 {
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1313
diff changeset
2308 /* This can call Lisp. */
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2309 Lisp_Object frame = wrap_frame (f);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2310
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2311 if (WINDOWP (val))
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 (! MINI_WINDOW_P (XWINDOW (val)))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
2314 gui_error
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2315 ("Surrogate minibuffer windows must be minibuffer windows",
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2316 val);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2317
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2318 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
2319 gui_error
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2320 ("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
2321
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2322 /* Install the chosen minibuffer window, with proper buffer. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2323 f->minibuffer_window = val;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2324 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2325 else if (EQ (val, Qt))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2326 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2327 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
2328 gui_error
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2329 ("Frame already has its own minibuffer", frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2330 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2331 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2332 setup_normal_frame (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2333 f->mirror_dirty = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2334
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2335 update_frame_window_mirror (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2336 internal_set_frame_size (f, f->width, f->height, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2337 }
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 }
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 #if 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2342
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2343 /* possible code if you want to have symbols such as `default-background'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2344 map to setting the background of `default', etc. */
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 static int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2347 dissect_as_face_setting (Lisp_Object sym, Lisp_Object *face_out,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2348 Lisp_Object *face_prop_out)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2349 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2350 Lisp_Object list = Vbuilt_in_face_specifiers;
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2351 Lisp_Object s;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2352
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2353 if (!SYMBOLP (sym))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2354 return 0;
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 s = symbol_name (XSYMBOL (sym));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2357
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2358 while (!NILP (list))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2359 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2360 Lisp_Object prop = Fcar (list);
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2361 Lisp_Object prop_name;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2362
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2363 if (!SYMBOLP (prop))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2364 continue;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2365 prop_name = symbol_name (XSYMBOL (prop));
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2366 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
2367 && !memcmp (XSTRING_DATA (prop_name),
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2368 XSTRING_DATA (s) + XSTRING_LENGTH (s)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2369 - XSTRING_LENGTH (prop_name),
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2370 XSTRING_LENGTH (prop_name))
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2371 && XSTRING_DATA (s)[XSTRING_LENGTH (s) - XSTRING_LENGTH (prop_name)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2372 - 1] == '-')
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2373 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2374 Lisp_Object face =
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2375 Ffind_face (make_string (XSTRING_DATA (s),
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2376 XSTRING_LENGTH (s)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2377 - XSTRING_LENGTH (prop_name)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2378 - 1));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2379 if (!NILP (face))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2380 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2381 *face_out = face;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2382 *face_prop_out = prop;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2383 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2384 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2385 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2386
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2387 list = Fcdr (list);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2388 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2389
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2390 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2391 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2392
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2393 #endif /* 0 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2394
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2395 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2396 get_property_alias (Lisp_Object prop)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2397 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2398 while (1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2399 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2400 Lisp_Object alias = Qnil;
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 if (SYMBOLP (prop))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2403 alias = Fget (prop, Qframe_property_alias, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2404 if (NILP (alias))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2405 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2406 prop = alias;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2407 QUIT;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2408 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2409
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2410 return prop;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2411 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2412
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2413 /* #### Using this to modify the internal border width has no effect
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2414 because the change isn't propagated to the windows. Are there
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2415 other properties which this claims to handle, but doesn't?
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2416
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2417 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
2418 to sanity now than before with the horrible frame-params stuff. */
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 DEFUN ("set-frame-properties", Fset_frame_properties, 2, 2, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2421 Change some properties of a frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2422 PLIST is a property list.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2423 You can also change frame properties individually using `set-frame-property',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2424 but it may be more efficient to change many properties at once.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2425
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2426 Frame properties can be retrieved using `frame-property' or `frame-properties'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2427
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2428 The following symbols etc. have predefined meanings:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2429
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2430 name Name of the frame. Used with X resources.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2431 Unchangeable after creation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2432
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2433 height Height of the frame, in lines.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2434
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2435 width Width of the frame, in characters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2436
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2437 minibuffer Gives the minibuffer behavior for this frame. Either
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2438 t (frame has its own minibuffer), `only' (frame is
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2439 a minibuffer-only frame), `none' (frame has no minibuffer)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2440 or a window (frame uses that window, which is on another
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2441 frame, as the minibuffer).
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2442
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2443 unsplittable If non-nil, frame cannot be split by `display-buffer'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2444
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2445 current-display-table, menubar-visible-p, left-margin-width,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2446 right-margin-width, minimum-line-ascent, minimum-line-descent,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2447 use-left-overflow, use-right-overflow, scrollbar-width, scrollbar-height,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2448 default-toolbar, top-toolbar, bottom-toolbar, left-toolbar, right-toolbar,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2449 default-toolbar-height, default-toolbar-width, top-toolbar-height,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2450 bottom-toolbar-height, left-toolbar-width, right-toolbar-width,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2451 default-toolbar-visible-p, top-toolbar-visible-p, bottom-toolbar-visible-p,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2452 left-toolbar-visible-p, right-toolbar-visible-p, toolbar-buttons-captioned-p,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2453 top-toolbar-border-width, bottom-toolbar-border-width,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2454 left-toolbar-border-width, right-toolbar-border-width,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2455 modeline-shadow-thickness, has-modeline-p,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2456 default-gutter, top-gutter, bottom-gutter, left-gutter, right-gutter,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2457 default-gutter-height, default-gutter-width, top-gutter-height,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2458 bottom-gutter-height, left-gutter-width, right-gutter-width,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2459 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
2460 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
2461 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
2462 [Giving the name of any built-in specifier variable is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2463 equivalent to calling `set-specifier' on the specifier,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2464 with a locale of FRAME. Giving the name to `frame-property'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2465 calls `specifier-instance' on the specifier.]
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2466
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2467 text-pointer-glyph, nontext-pointer-glyph, modeline-pointer-glyph,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2468 selection-pointer-glyph, busy-pointer-glyph, toolbar-pointer-glyph,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2469 menubar-pointer-glyph, scrollbar-pointer-glyph, gc-pointer-glyph,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2470 octal-escape-glyph, control-arrow-glyph, invisible-text-glyph,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2471 hscroll-glyph, truncation-glyph, continuation-glyph
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2472 [Giving the name of any glyph variable is equivalent to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2473 calling `set-glyph-image' on the glyph, with a locale
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2474 of FRAME. Giving the name to `frame-property' calls
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2475 `glyph-image-instance' on the glyph.]
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2476
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2477 [default foreground], [default background], [default font],
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2478 [modeline foreground], [modeline background], [modeline font],
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2479 etc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2480 [Giving a vector of a face and a property is equivalent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2481 to calling `set-face-property' on the face and property,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2482 with a locale of FRAME. Giving the vector to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2483 `frame-property' calls `face-property-instance' on the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2484 face and property.]
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2485
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2486 Finally, if a frame property symbol has the property `frame-property-alias'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2487 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
2488 up and setting frame property values. This allows you to alias one
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2489 frame property name to another.
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 See the variables `default-x-frame-plist', `default-tty-frame-plist'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2492 and `default-mswindows-frame-plist' for a description of the properties
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2493 recognized for particular types of frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2494 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2495 (frame, plist))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2496 {
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1313
diff changeset
2497 /* This can call Lisp. */
428
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 tail;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2500 Lisp_Object *tailp;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2501 struct gcpro gcpro1, gcpro2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2502
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2503 frame = wrap_frame (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2504 GCPRO2 (frame, plist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2505 Fcheck_valid_plist (plist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2506 plist = Fcopy_sequence (plist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2507 Fcanonicalize_lax_plist (plist, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2508 for (tail = plist; !NILP (tail); tail = Fcdr (Fcdr (tail)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2509 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2510 Lisp_Object prop = Fcar (tail);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2511 Lisp_Object val = Fcar (Fcdr (tail));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2512
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2513 prop = get_property_alias (prop);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2514
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2515 #if 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2516 /* 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
2517 frame after it has been created, because the old name was used
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2518 for resource lookup. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2519 if (EQ (prop, Qname))
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 CHECK_STRING (val);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2522 f->name = val;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2523 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2524 #endif /* 0 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2525 if (EQ (prop, Qminibuffer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2526 store_minibuf_frame_prop (f, val);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2527 if (EQ (prop, Qunsplittable))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2528 f->no_split = !NILP (val);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2529 if (EQ (prop, Qbuffer_predicate))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2530 f->buffer_predicate = val;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2531 if (SYMBOLP (prop) && EQ (Fbuilt_in_variable_type (prop),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2532 Qconst_specifier))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2533 call3 (Qset_specifier, Fsymbol_value (prop), val, frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2534 if (SYMBOLP (prop) && !NILP (Fget (prop, Qconst_glyph_variable, Qnil)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2535 call3 (Qset_glyph_image, Fsymbol_value (prop), val, frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2536 if (VECTORP (prop) && XVECTOR_LENGTH (prop) == 2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2537 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2538 Lisp_Object face_prop = XVECTOR_DATA (prop)[1];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2539 CHECK_SYMBOL (face_prop);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2540 call4 (Qset_face_property,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2541 Fget_face (XVECTOR_DATA (prop)[0]),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2542 face_prop, val, frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2543 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2544 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2545
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2546 MAYBE_FRAMEMETH (f, set_frame_properties, (f, plist));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2547 for (tailp = &plist; !NILP (*tailp);)
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 Lisp_Object *next_tailp;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2550 Lisp_Object next;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2551 Lisp_Object prop;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2552
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2553 next = Fcdr (*tailp);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2554 CHECK_CONS (next);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2555 next_tailp = &XCDR (next);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2556 prop = Fcar (*tailp);
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 prop = get_property_alias (prop);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2559
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2560 if (EQ (prop, Qminibuffer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2561 || EQ (prop, Qunsplittable)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2562 || EQ (prop, Qbuffer_predicate)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2563 || EQ (prop, Qheight)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2564 || EQ (prop, Qwidth)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2565 || (SYMBOLP (prop) && EQ (Fbuilt_in_variable_type (prop),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2566 Qconst_specifier))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2567 || (SYMBOLP (prop) && !NILP (Fget (prop, Qconst_glyph_variable,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2568 Qnil)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2569 || (VECTORP (prop) && XVECTOR_LENGTH (prop) == 2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2570 || FRAMEMETH_OR_GIVEN (f, internal_frame_property_p, (f, prop), 0))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2571 *tailp = *next_tailp;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2572 tailp = next_tailp;
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2575 f->plist = nconc2 (plist, f->plist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2576 Fcanonicalize_lax_plist (f->plist, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2577 UNGCPRO;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2578 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2579 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2580
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2581 DEFUN ("frame-property", Fframe_property, 2, 3, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2582 Return FRAME's value for property PROPERTY.
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2583 Return DEFAULT if there is no such property.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2584 See `set-frame-properties' for the built-in property names.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2585 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2586 (frame, property, default_))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2587 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2588 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2589 Lisp_Object value;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2590
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2591 frame = wrap_frame (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2592
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2593 property = get_property_alias (property);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2594
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2595 if (EQ (Qname, property)) return f->name;
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 (EQ (Qheight, property) || EQ (Qwidth, property))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2598 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2599 if (window_system_pixelated_geometry (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2600 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2601 int width, height;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2602 pixel_to_real_char_size (f, FRAME_PIXWIDTH (f), FRAME_PIXHEIGHT (f),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2603 &width, &height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2604 return make_int (EQ (Qheight, property) ? height: width);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2605 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2606 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2607 return make_int (EQ (Qheight, property) ?
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2608 FRAME_HEIGHT (f) :
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2609 FRAME_WIDTH (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2610 }
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 /* NOTE: FSF returns Qnil instead of Qt for FRAME_HAS_MINIBUF_P.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2613 This is over-the-top bogosity, because it's inconsistent with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2614 the semantics of `minibuffer' when passed to `make-frame'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2615 Returning Qt makes things consistent. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2616 if (EQ (Qminibuffer, property))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2617 return (FRAME_MINIBUF_ONLY_P (f) ? Qonly :
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2618 FRAME_HAS_MINIBUF_P (f) ? Qt :
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2619 FRAME_MINIBUF_WINDOW (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2620 if (EQ (Qunsplittable, property))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2621 return FRAME_NO_SPLIT_P (f) ? Qt : Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2622 if (EQ (Qbuffer_predicate, property))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2623 return f->buffer_predicate;
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 if (SYMBOLP (property))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2626 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2627 if (EQ (Fbuilt_in_variable_type (property), Qconst_specifier))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2628 return Fspecifier_instance (Fsymbol_value (property),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2629 frame, default_, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2630 if (!NILP (Fget (property, Qconst_glyph_variable, Qnil)))
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 Lisp_Object glyph = Fsymbol_value (property);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2633 CHECK_GLYPH (glyph);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2634 return Fspecifier_instance (XGLYPH_IMAGE (glyph),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2635 frame, default_, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2636 }
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2639 if (VECTORP (property) && XVECTOR_LENGTH (property) == 2)
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 Lisp_Object face_prop = XVECTOR_DATA (property)[1];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2642 CHECK_SYMBOL (face_prop);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2643 return call3 (Qface_property_instance,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2644 Fget_face (XVECTOR_DATA (property)[0]),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2645 face_prop, frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2646 }
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 if (HAS_FRAMEMETH_P (f, frame_property))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2649 if (!UNBOUNDP (value = FRAMEMETH (f, frame_property, (f, property))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2650 return value;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2651
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2652 if (!UNBOUNDP (value = external_plist_get (&f->plist, property, 1, ERROR_ME)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2653 return value;
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 default_;
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-properties", Fframe_properties, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2659 Return a property list of the properties of FRAME.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2660 Do not modify this list; use `set-frame-property' instead.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2661 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2662 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2663 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2664 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2665 Lisp_Object result = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2666 struct gcpro gcpro1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2667
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2668 GCPRO1 (result);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2669
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2670 frame = wrap_frame (f);
428
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 /* #### for the moment (since old code uses `frame-parameters'),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2673 we call `copy-sequence' on f->plist. That allows frame-parameters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2674 to destructively convert the plist into an alist, which is more
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2675 efficient than doing it non-destructively. At some point we
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2676 should remove the call to copy-sequence. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2677 result = Fcopy_sequence (f->plist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2678
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2679 /* #### should we be adding all the specifiers and glyphs?
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2680 That would entail having a list of them all. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2681 if (HAS_FRAMEMETH_P (f, frame_properties))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2682 result = nconc2 (FRAMEMETH (f, frame_properties, (f)), result);
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 if (!NILP (f->buffer_predicate))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2685 result = cons3 (Qbuffer_predicate, f->buffer_predicate, result);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2686
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2687 if (FRAME_NO_SPLIT_P (f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2688 result = cons3 (Qunsplittable, Qt, result);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2689
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2690 /* NOTE: FSF returns Qnil instead of Qt for FRAME_HAS_MINIBUF_P.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2691 This is over-the-top bogosity, because it's inconsistent with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2692 the semantics of `minibuffer' when passed to `make-frame'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2693 Returning Qt makes things consistent. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2694 result = cons3 (Qminibuffer,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2695 (FRAME_MINIBUF_ONLY_P (f) ? Qonly :
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2696 FRAME_HAS_MINIBUF_P (f) ? Qt :
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2697 FRAME_MINIBUF_WINDOW (f)),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2698 result);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2699 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2700 int width, height;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2701
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2702 if (window_system_pixelated_geometry (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2703 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2704 pixel_to_real_char_size (f, FRAME_PIXWIDTH (f), FRAME_PIXHEIGHT (f),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2705 &width, &height);
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 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2708 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2709 height = FRAME_HEIGHT (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2710 width = FRAME_WIDTH (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2711 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2712 result = cons3 (Qwidth , make_int (width), result);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2713 result = cons3 (Qheight, make_int (height), result);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2714 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2715
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2716 result = cons3 (Qname, f->name, result);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2717
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2718 UNGCPRO;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2719 return result;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2720 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2721
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2722
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2723 DEFUN ("frame-pixel-height", Fframe_pixel_height, 0, 1, 0, /*
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2724 Return the total height in pixels of FRAME.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2725 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2726 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2727 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2728 return make_int (decode_frame (frame)->pixheight);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2729 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2730
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2731 DEFUN ("frame-displayable-pixel-height", Fframe_displayable_pixel_height, 0, 1, 0, /*
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2732 Return the height of the displayable area in pixels of FRAME.
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2733 */
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2734 (frame))
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2735 {
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2736 struct frame *f = decode_frame (frame);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2737 int height, pheight;
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2738 frame = wrap_frame (f);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2739
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2740 if (!window_system_pixelated_geometry (frame))
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2741 {
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2742 height = FRAME_HEIGHT (f);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2743
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2744 frame_conversion_internal (f, CHAR_TO_DISPLAYABLE_PIXEL,
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2745 0, &pheight, 0, &height, 0);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2746 }
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2747 else
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2748 pheight = FRAME_PIXHEIGHT (f);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2749
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2750 return make_int (pheight);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2751 }
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2752
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2753 DEFUN ("frame-pixel-width", Fframe_pixel_width, 0, 1, 0, /*
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2754 Return the total width in pixels of FRAME.
428
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 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2757 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2758 return make_int (decode_frame (frame)->pixwidth);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2759 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2760
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2761 DEFUN ("frame-displayable-pixel-width", Fframe_displayable_pixel_width, 0, 1, 0, /*
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2762 Return the width of the displayable area in pixels of FRAME.
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2763 */
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2764 (frame))
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2765 {
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2766 struct frame *f = decode_frame (frame);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2767 int width, pwidth;
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2768 frame = wrap_frame (f);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2769
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2770 if (!window_system_pixelated_geometry (frame))
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2771 {
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2772 width = FRAME_WIDTH (f);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2773
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2774 frame_conversion_internal (f, CHAR_TO_DISPLAYABLE_PIXEL,
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2775 &pwidth, 0, &width, 0, 0);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2776 }
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2777 else
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2778 pwidth = FRAME_PIXWIDTH (f);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2779
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2780 return make_int (pwidth);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2781 }
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2782
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2783 DEFUN ("frame-name", Fframe_name, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2784 Return the name of FRAME (defaulting to the selected frame).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2785 This is not the same as the `title' of the frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2786 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2787 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2788 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2789 return decode_frame (frame)->name;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2790 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2791
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2792 DEFUN ("frame-modified-tick", Fframe_modified_tick, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2793 Return FRAME's tick counter, incremented for each change to the frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2794 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
2795 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
2796 `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
2797 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
2798 anything else interesting has happened. It wraps around occasionally.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2799 No argument or nil as argument means use selected frame as FRAME.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2800 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2801 (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2802 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2803 return make_int (decode_frame (frame)->modiff);
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2806 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2807 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
2808 {
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1313
diff changeset
2809 /* This can call Lisp. See mswindows_set_frame_size(). */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2810 /* An explicit size change cancels any pending frame size adjustment */
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1313
diff changeset
2811 CLEAR_FRAME_SIZE_SLIPPED (f);
428
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 (pretend || !HAS_FRAMEMETH_P (f, set_frame_size))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2814 change_frame_size (f, rows, cols, 0);
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 FRAMEMETH (f, set_frame_size, (f, cols, rows));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2817 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2818
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2819 DEFUN ("set-frame-height", Fset_frame_height, 2, 3, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2820 Specify that the frame FRAME has LINES lines.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2821 Optional third arg non-nil means that redisplay should use LINES lines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2822 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
2823 */
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2824 (frame, lines, pretend))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2825 {
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1313
diff changeset
2826 /* This can call Lisp. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2827 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2828 int height, width;
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2829 frame = wrap_frame (f);
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2830 CHECK_INT (lines);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2831
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2832 if (window_system_pixelated_geometry (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2833 {
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2834 char_to_real_pixel_size (f, 0, XINT (lines), 0, &height);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2835 width = FRAME_PIXWIDTH (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2836 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2837 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2838 {
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2839 height = XINT (lines);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2840 width = FRAME_WIDTH (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2841 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2842
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2843 internal_set_frame_size (f, width, height, !NILP (pretend));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2844 return frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2845 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2846
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2847 DEFUN ("set-frame-pixel-height", Fset_frame_pixel_height, 2, 3, 0, /*
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2848 Specify that the frame FRAME is a total of HEIGHT pixels tall.
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2849 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
2850 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
2851 */
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2852 (frame, height, pretend))
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2853 {
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1313
diff changeset
2854 /* This can call Lisp. */
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2855 struct frame *f = decode_frame (frame);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2856 int pheight, width;
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2857 frame = wrap_frame (f);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2858 CHECK_INT (height);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2859
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2860 if (!window_system_pixelated_geometry (frame))
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2861 {
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2862 int h = XINT (height);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2863 width = FRAME_WIDTH (f);
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2864
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2865 frame_conversion_internal (f, TOTAL_PIXEL_TO_CHAR, 0, &h, 0, &pheight, 0);
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2866 }
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2867 else
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2868 {
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2869 width = FRAME_PIXWIDTH (f);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2870 pheight = XINT (height);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2871 }
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2872
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2873 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
2874 return frame;
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2875 }
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2876
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2877 DEFUN ("set-frame-displayable-pixel-height", Fset_frame_displayable_pixel_height, 2, 3, 0, /*
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2878 Specify that the displayable area of frame FRAME is HEIGHT pixels tall.
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2879 Optional third arg non-nil means that redisplay should be HEIGHT pixels tall
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2880 but that the idea of the actual height of the frame should not be changed.
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2881 */
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2882 (frame, height, pretend))
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2883 {
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1313
diff changeset
2884 /* This can call Lisp. */
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2885 struct frame *f = decode_frame (frame);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2886 int pheight, width;
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2887 frame = wrap_frame (f);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2888 CHECK_INT (height);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2889
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2890 if (!window_system_pixelated_geometry (frame))
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2891 {
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2892 int h = XINT (height);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2893 width = FRAME_WIDTH (f);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2894 frame_conversion_internal (f, DISPLAYABLE_PIXEL_TO_CHAR, 0, &h, 0, &pheight, 0);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2895 }
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2896 else
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2897 {
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2898 width = FRAME_PIXWIDTH (f);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2899 pheight = XINT (height);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2900 }
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2901
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2902 internal_set_frame_size (f, width, pheight, !NILP (pretend));
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2903 return frame;
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2904 }
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2905
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2906
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2907 DEFUN ("set-frame-width", Fset_frame_width, 2, 3, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2908 Specify that the frame FRAME has COLS columns.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2909 Optional third arg non-nil means that redisplay should use COLS columns
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2910 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
2911 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2912 (frame, cols, pretend))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2913 {
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1313
diff changeset
2914 /* This can call Lisp. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2915 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2916 int width, height;
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2917 frame = wrap_frame (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2918 CHECK_INT (cols);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2919
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2920 if (window_system_pixelated_geometry (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2921 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2922 char_to_real_pixel_size (f, XINT (cols), 0, &width, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2923 height = FRAME_PIXHEIGHT (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2924 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2925 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2926 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2927 width = XINT (cols);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2928 height = FRAME_HEIGHT (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2929 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2930
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2931 internal_set_frame_size (f, width, height, !NILP (pretend));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2932 return frame;
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
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2935 DEFUN ("set-frame-pixel-width", Fset_frame_pixel_width, 2, 3, 0, /*
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2936 Specify that the frame FRAME is a total of WIDTH pixels wide.
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2937 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
2938 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
2939 */
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2940 (frame, width, pretend))
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2941 {
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1313
diff changeset
2942 /* This can call Lisp. */
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2943 struct frame *f = decode_frame (frame);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2944 int height, pwidth;
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2945 frame = wrap_frame (f);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2946 CHECK_INT (width);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2947
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2948 if (!window_system_pixelated_geometry (frame))
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2949 {
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2950 int w = XINT (width);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2951 height = FRAME_HEIGHT (f);
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2952 frame_conversion_internal (f, TOTAL_PIXEL_TO_CHAR, &w, 0, &pwidth, 0, 0);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2953 }
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2954 else
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2955 {
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2956 height = FRAME_PIXHEIGHT (f);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2957 pwidth = XINT (width);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2958 }
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2959
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2960 internal_set_frame_size (f, pwidth, height, !NILP (pretend));
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2961 return frame;
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2962 }
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2963
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2964 DEFUN ("set-frame-displayable-pixel-width", Fset_frame_displayable_pixel_width, 2, 3, 0, /*
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2965 Specify that the displayable area of frame FRAME is WIDTH pixels wide.
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2966 Optional third arg non-nil means that redisplay should be WIDTH wide
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2967 but that the idea of the actual height of the frame should not be changed.
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2968 */
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2969 (frame, width, pretend))
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2970 {
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1313
diff changeset
2971 /* This can call Lisp. */
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2972 struct frame *f = decode_frame (frame);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2973 int height, pwidth;
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2974 frame = wrap_frame (f);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2975 CHECK_INT (width);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2976
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2977 if (!window_system_pixelated_geometry (frame))
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2978 {
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2979 int w = XINT (width);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2980 height = FRAME_HEIGHT (f);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
2981 frame_conversion_internal (f, DISPLAYABLE_PIXEL_TO_CHAR, &w, 0, &pwidth, 0, 0);
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2982 }
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2983 else
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2984 {
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2985 height = FRAME_PIXHEIGHT (f);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2986 pwidth = XINT (width);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2987 }
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2988
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2989 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
2990 return frame;
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2991 }
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
2992
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2993 DEFUN ("set-frame-size", Fset_frame_size, 3, 4, 0, /*
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
2994 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
2995 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
2996 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
2997 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2998 (frame, cols, rows, pretend))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2999 {
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1313
diff changeset
3000 /* This can call Lisp. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3001 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3002 int height, width;
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
3003 frame = wrap_frame (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3004 CHECK_INT (cols);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3005 CHECK_INT (rows);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3006
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3007 if (window_system_pixelated_geometry (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3008 char_to_real_pixel_size (f, XINT (cols), XINT (rows), &width, &height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3009 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3010 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3011 height = XINT (rows);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3012 width = XINT (cols);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3013 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3014
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3015 internal_set_frame_size (f, width, height, !NILP (pretend));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3016 return frame;
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
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3019 DEFUN ("set-frame-pixel-size", Fset_frame_pixel_size, 3, 4, 0, /*
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3020 Set the total size of FRAME to WIDTH by HEIGHT, measured in pixels.
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3021 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
3022 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
3023 */
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3024 (frame, width, height, pretend))
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3025 {
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1313
diff changeset
3026 /* This can call Lisp. */
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3027 struct frame *f = decode_frame (frame);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3028 int pheight, pwidth;
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3029 frame = wrap_frame (f);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3030 CHECK_INT (width);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3031 CHECK_INT (height);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3032
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3033 if (!window_system_pixelated_geometry (frame))
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3034 {
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3035 int w = XINT (width);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3036 int h = XINT (height);
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3037 frame_conversion_internal (f, TOTAL_PIXEL_TO_CHAR, &w, &h, &pwidth, &pheight, 0);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3038 }
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3039 else
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3040 {
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3041 pheight = XINT (height);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3042 pwidth = XINT (width);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3043 }
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3044
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3045 internal_set_frame_size (f, pwidth, pheight, !NILP (pretend));
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3046 return frame;
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3047 }
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3048
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3049 DEFUN ("set-frame-displayable-pixel-size", Fset_frame_displayable_pixel_size, 3, 4, 0, /*
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3050 Set the displayable size of FRAME to WIDTH by HEIGHT, measured in pixels.
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3051 Optional fourth arg non-nil means that redisplay should use WIDTH by HEIGHT
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3052 but that the idea of the actual size of the frame should not be changed.
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3053 */
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3054 (frame, width, height, pretend))
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3055 {
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1313
diff changeset
3056 /* This can call Lisp. */
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3057 struct frame *f = decode_frame (frame);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3058 int pheight, pwidth;
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3059 frame = wrap_frame (f);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3060 CHECK_INT (width);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3061 CHECK_INT (height);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3062
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3063 if (!window_system_pixelated_geometry (frame))
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3064 {
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3065 int w = XINT (width);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3066 int h = XINT (height);
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3067 frame_conversion_internal (f, DISPLAYABLE_PIXEL_TO_CHAR, &w, &h, &pwidth, &pheight, 0);
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3068 }
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3069 else
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3070 {
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3071 pheight = XINT (height);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3072 pwidth = XINT (width);
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3073 }
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3074
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3075 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
3076 return frame;
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3077 }
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3078
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3079 DEFUN ("set-frame-position", Fset_frame_position, 3, 3, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3080 Set position of FRAME in pixels to XOFFSET by YOFFSET.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3081 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
3082 Negative values for XOFFSET or YOFFSET are interpreted relative to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3083 the rightmost or bottommost possible position (that stays within the screen).
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 (frame, xoffset, yoffset))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3086 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3087 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3088 CHECK_INT (xoffset);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3089 CHECK_INT (yoffset);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3090
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3091 MAYBE_FRAMEMETH (f, set_frame_position, (f, XINT (xoffset), XINT (yoffset)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3092
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3093 return Qt;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3094 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3095
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3098 /* Frame size conversion functions moved here from EmacsFrame.c
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3099 because they're generic and really don't belong in that file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3100 Function get_default_char_pixel_size() removed because it's
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3101 exactly the same as default_face_height_and_width(). */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3102 static void
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3103 frame_conversion_internal (struct frame *f,
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3104 pixel_to_char_mode_t pixel_to_char,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3105 int *pixel_width, int *pixel_height,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3106 int *char_width, int *char_height,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3107 int real_face)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3108 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3109 int cpw;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3110 int cph;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3111 int egw;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3112 int obw, obh, bdr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3113 Lisp_Object frame, window;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3114
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
3115 frame = wrap_frame (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3116 if (real_face)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3117 default_face_height_and_width (frame, &cph, &cpw);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3118 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3119 default_face_height_and_width_1 (frame, &cph, &cpw);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3120
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3121 window = FRAME_SELECTED_WINDOW (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3122
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3123 egw = max (glyph_width (Vcontinuation_glyph, window),
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3124 glyph_width (Vtruncation_glyph, window));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3125 egw = max (egw, cpw);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3126 bdr = 2 * f->internal_border_width;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3127 obw = FRAME_SCROLLBAR_WIDTH (f) + FRAME_THEORETICAL_LEFT_TOOLBAR_WIDTH (f) +
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3128 FRAME_THEORETICAL_RIGHT_TOOLBAR_WIDTH (f) +
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3129 2 * FRAME_THEORETICAL_LEFT_TOOLBAR_BORDER_WIDTH (f) +
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3130 2 * FRAME_THEORETICAL_RIGHT_TOOLBAR_BORDER_WIDTH (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3131 obh = FRAME_SCROLLBAR_HEIGHT (f) + FRAME_THEORETICAL_TOP_TOOLBAR_HEIGHT (f) +
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3132 FRAME_THEORETICAL_BOTTOM_TOOLBAR_HEIGHT (f) +
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3133 2 * FRAME_THEORETICAL_TOP_TOOLBAR_BORDER_WIDTH (f) +
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3134 2 * FRAME_THEORETICAL_BOTTOM_TOOLBAR_BORDER_WIDTH (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3135
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3136 /* 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
3137 pixel_height.
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3138
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3139 #### 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
3140 much space. */
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3141 switch (pixel_to_char)
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3142 {
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3143 case DISPLAYABLE_PIXEL_TO_CHAR:
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3144 if (char_width)
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3145 *char_width = ROUND_UP (*pixel_width, cpw) / cpw;
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3146 if (char_height)
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3147 *char_height = ROUND_UP (*pixel_height, cph) / cph;
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3148 break;
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3149 case TOTAL_PIXEL_TO_CHAR:
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3150 /* Convert to chars so that the total frame size is pixel_width x
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3151 pixel_height. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3152 if (char_width)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3153 *char_width = 1 + ((*pixel_width - egw) - bdr - obw) / cpw;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3154 if (char_height)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3155 *char_height = (*pixel_height - bdr - obh) / cph;
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3156 break;
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3157 case CHAR_TO_TOTAL_PIXEL:
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3158 if (pixel_width)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3159 *pixel_width = (*char_width - 1) * cpw + egw + bdr + obw;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3160 if (pixel_height)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3161 *pixel_height = *char_height * cph + bdr + obh;
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3162 break;
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3163 case CHAR_TO_DISPLAYABLE_PIXEL:
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3164 if (pixel_width)
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3165 *pixel_width = *char_width * cpw;
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3166 if (pixel_height)
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3167 *pixel_height = *char_height * cph;
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3168 break;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3169 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3170 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3171
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3172 /* 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
3173 of characters that will fit there, taking into account the internal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3174 border width, and the pixel width of the line terminator glyphs (which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3175 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
3176 as the default character size of the default font). The frame scrollbar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3177 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
3178 available width. The frame scrollbar height and top and bottom toolbar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3179 heights are subtracted out of the available height.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3180
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3181 Therefore the result is not necessarily a multiple of anything in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3182 particular. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3183 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3184 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
3185 int *char_width, int *char_height)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3186 {
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3187 frame_conversion_internal (f, TOTAL_PIXEL_TO_CHAR,
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3188 &pixel_width, &pixel_height, char_width,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3189 char_height, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3190 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3191
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3192 /* Given a character size, this returns the minimum number of pixels
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3193 necessary to display that many characters, taking into account the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3194 internal border width, scrollbar height and width, toolbar heights and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3195 widths and the size of the line terminator glyphs (assuming the line
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3196 terminators take up exactly one character position).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3197
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3198 Therefore the result is not necessarily a multiple of anything in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3199 particular. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3200 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3201 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
3202 int *pixel_width, int *pixel_height)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3203 {
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3204 frame_conversion_internal (f, CHAR_TO_TOTAL_PIXEL,
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3205 pixel_width, pixel_height, &char_width,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3206 &char_height, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3207 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3208
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3209 /* 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
3210 to display the same number of characters as are displayable now.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3211 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3212 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3213 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
3214 int *out_width, int *out_height)
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 int char_width;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3217 int char_height;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3218 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
3219 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
3220 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3221
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3222 /* Versions of the above which always account for real font metrics.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3223 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3224 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3225 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
3226 int *char_width, int *char_height)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3227 {
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3228 frame_conversion_internal (f, TOTAL_PIXEL_TO_CHAR,
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3229 &pixel_width, &pixel_height, char_width,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3230 char_height, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3231 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3232
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3233 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3234 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
3235 int *pixel_width, int *pixel_height)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3236 {
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3237 frame_conversion_internal (f, CHAR_TO_TOTAL_PIXEL,
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3238 pixel_width, pixel_height, &char_width,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3239 &char_height, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3240 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3241
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3242 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3243 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
3244 int *out_width, int *out_height)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3245 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3246 int char_width;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3247 int char_height;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3248 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
3249 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
3250 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3251
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3252 /* 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
3253 indicate no change is to take place. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3254 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3255 change_frame_size_1 (struct frame *f, int newheight, int newwidth)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3256 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3257 Lisp_Object frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3258 int new_pixheight, new_pixwidth;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3259 int font_height, real_font_height, font_width;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3260
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3261 /* #### Chuck -- shouldn't we be checking to see if the frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3262 is being "changed" to its existing size, and do nothing if so? */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3263 /* No, because it would hose toolbar updates. The toolbar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3264 update code relies on this function to cause window `top' and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3265 `left' coordinates to be recomputed even though no frame size
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3266 change occurs. --kyle */
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1313
diff changeset
3267 if (in_display || hold_frame_size_changes)
2500
3d8143fc88e1 [xemacs-hg @ 2005-01-24 23:33:30 by ben]
ben
parents: 2367
diff changeset
3268 ABORT ();
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3269
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
3270 frame = wrap_frame (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3271
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3272 default_face_height_and_width (frame, &real_font_height, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3273 default_face_height_and_width_1 (frame, &font_height, &font_width);
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 /* This size-change overrides any pending one for this frame. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3276 FRAME_NEW_HEIGHT (f) = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3277 FRAME_NEW_WIDTH (f) = 0;
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 new_pixheight = newheight * font_height;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3280 new_pixwidth = (newwidth - 1) * font_width;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3281
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3282 /* #### dependency on FRAME_WIN_P should be removed. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3283 if (FRAME_WIN_P (f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3284 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3285 new_pixheight += FRAME_SCROLLBAR_HEIGHT (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3286 new_pixwidth += FRAME_SCROLLBAR_WIDTH (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3287 }
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 /* when frame_conversion_internal() calculated the number of rows/cols
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3290 in the frame, the theoretical toolbar sizes were subtracted out.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3291 The calculations below adjust for real toolbar height/width in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3292 frame, which may be different from frame spec, taking the above
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3293 fact into account */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3294 new_pixheight +=
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3295 + FRAME_THEORETICAL_TOP_TOOLBAR_HEIGHT (f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3296 + 2 * FRAME_THEORETICAL_TOP_TOOLBAR_BORDER_WIDTH (f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3297 - FRAME_REAL_TOP_TOOLBAR_HEIGHT (f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3298 - 2 * FRAME_REAL_TOP_TOOLBAR_BORDER_WIDTH (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3299
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3300 new_pixheight +=
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3301 + FRAME_THEORETICAL_BOTTOM_TOOLBAR_HEIGHT (f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3302 + 2 * FRAME_THEORETICAL_BOTTOM_TOOLBAR_BORDER_WIDTH (f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3303 - FRAME_REAL_BOTTOM_TOOLBAR_HEIGHT (f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3304 - 2 * FRAME_REAL_BOTTOM_TOOLBAR_BORDER_WIDTH (f);
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 new_pixwidth +=
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3307 + FRAME_THEORETICAL_LEFT_TOOLBAR_WIDTH (f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3308 + 2 * FRAME_THEORETICAL_LEFT_TOOLBAR_BORDER_WIDTH (f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3309 - FRAME_REAL_LEFT_TOOLBAR_WIDTH (f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3310 - 2 * FRAME_REAL_LEFT_TOOLBAR_BORDER_WIDTH (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3311
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3312 new_pixwidth +=
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3313 + FRAME_THEORETICAL_RIGHT_TOOLBAR_WIDTH (f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3314 + 2 * FRAME_THEORETICAL_RIGHT_TOOLBAR_BORDER_WIDTH (f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3315 - FRAME_REAL_RIGHT_TOOLBAR_WIDTH (f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3316 - 2 * FRAME_REAL_RIGHT_TOOLBAR_BORDER_WIDTH (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3317
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3318 /* 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
3319 than the default character width. */
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 int adjustment, trunc_width, cont_width;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3322
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
3323 trunc_width = glyph_width (Vtruncation_glyph,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3324 FRAME_SELECTED_WINDOW (f));
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
3325 cont_width = glyph_width (Vcontinuation_glyph,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3326 FRAME_SELECTED_WINDOW (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3327 adjustment = max (trunc_width, cont_width);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3328 adjustment = max (adjustment, font_width);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3329
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3330 new_pixwidth += adjustment;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3331 }
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 /* If we don't have valid values, exit. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3334 if (!new_pixheight && !new_pixwidth)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3335 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3336
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3337 if (new_pixheight)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3338 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3339 /* Adjust for gutters here so that we always get set
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3340 properly. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3341 new_pixheight -=
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3342 (FRAME_TOP_GUTTER_BOUNDS (f)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3343 + FRAME_BOTTOM_GUTTER_BOUNDS (f));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3344
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3345 XWINDOW (FRAME_ROOT_WINDOW (f))->pixel_top
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3346 = FRAME_TOP_BORDER_END (f) + FRAME_TOP_GUTTER_BOUNDS (f);
428
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 if (FRAME_HAS_MINIBUF_P (f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3349 && ! FRAME_MINIBUF_ONLY_P (f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3350 /* Frame has both root and minibuffer. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3351 {
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 * Leave the minibuffer height the same if the frame has
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3354 * been initialized, and the minibuffer height is tall
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3355 * enough to display at least one line of text in the default
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3356 * font, and the old minibuffer height is a multiple of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3357 * default font height. This should cause the minibuffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3358 * height to be recomputed on font changes but not for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3359 * other frame size changes, which seems reasonable.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3360 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3361 int old_minibuf_height =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3362 XWINDOW(FRAME_MINIBUF_WINDOW(f))->pixel_height;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3363 int minibuf_height =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3364 f->init_finished && (old_minibuf_height % real_font_height) == 0 ?
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3365 max(old_minibuf_height, real_font_height) :
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3366 real_font_height;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3367 set_window_pixheight (FRAME_ROOT_WINDOW (f),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3368 /* - font_height for minibuffer */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3369 new_pixheight - minibuf_height, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3370
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3371 XWINDOW (FRAME_MINIBUF_WINDOW (f))->pixel_top =
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3372 FRAME_TOP_BORDER_END (f) +
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3373 FRAME_TOP_GUTTER_BOUNDS (f) +
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3374 FRAME_BOTTOM_GUTTER_BOUNDS (f) +
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3375 new_pixheight - minibuf_height;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3376
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3377 set_window_pixheight (FRAME_MINIBUF_WINDOW (f), minibuf_height, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3378 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3379 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3380 /* Frame has just one top-level window. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3381 set_window_pixheight (FRAME_ROOT_WINDOW (f), new_pixheight, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3382
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3383 FRAME_HEIGHT (f) = newheight;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3384 if (FRAME_TTY_P (f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3385 f->pixheight = newheight;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3386 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3387
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3388 if (new_pixwidth)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3389 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3390 /* Adjust for gutters here so that we always get set
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3391 properly. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3392 new_pixwidth -=
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3393 (FRAME_LEFT_GUTTER_BOUNDS (f)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3394 + FRAME_RIGHT_GUTTER_BOUNDS (f));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3395
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3396 XWINDOW (FRAME_ROOT_WINDOW (f))->pixel_left =
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3397 FRAME_LEFT_BORDER_END (f) + FRAME_LEFT_GUTTER_BOUNDS (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3398 set_window_pixwidth (FRAME_ROOT_WINDOW (f), new_pixwidth, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3399
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3400 if (FRAME_HAS_MINIBUF_P (f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3401 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3402 XWINDOW (FRAME_MINIBUF_WINDOW (f))->pixel_left =
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3403 FRAME_LEFT_BORDER_END (f) + FRAME_LEFT_GUTTER_BOUNDS (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3404 set_window_pixwidth (FRAME_MINIBUF_WINDOW (f), new_pixwidth, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3405 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3406
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3407 FRAME_WIDTH (f) = newwidth;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3408 if (FRAME_TTY_P (f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3409 f->pixwidth = newwidth;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3410 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3411
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3412 if (window_system_pixelated_geometry (frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3413 pixel_to_real_char_size (f, FRAME_PIXWIDTH (f), FRAME_PIXHEIGHT (f),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3414 &FRAME_CHARWIDTH (f), &FRAME_CHARHEIGHT (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3415 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3416 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3417 FRAME_CHARWIDTH (f) = FRAME_WIDTH (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3418 FRAME_CHARHEIGHT (f) = FRAME_HEIGHT (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3419 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3420
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3421 MARK_FRAME_TOOLBARS_CHANGED (f);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3422 MARK_FRAME_GUTTERS_CHANGED (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3423 MARK_FRAME_CHANGED (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3424 f->echo_area_garbaged = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3425 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3426
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3427 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3428 change_frame_size (struct frame *f, int newheight, int newwidth, int delay)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3429 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3430 /* 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
3431 client widget gets resized, since we have no control over this).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3432 So deal. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3433 check_frame_size (f, &newheight, &newwidth);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3434
450
98528da0b7fc Import from CVS: tag r21-2-40
cvs
parents: 444
diff changeset
3435 /* Unconditionally mark that the frame has changed size. This is
98528da0b7fc Import from CVS: tag r21-2-40
cvs
parents: 444
diff changeset
3436 because many things need to know after the
98528da0b7fc Import from CVS: tag r21-2-40
cvs
parents: 444
diff changeset
3437 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
3438 can happen is that we will cycle through redisplay once more
98528da0b7fc Import from CVS: tag r21-2-40
cvs
parents: 444
diff changeset
3439 --andy. */
98528da0b7fc Import from CVS: tag r21-2-40
cvs
parents: 444
diff changeset
3440 MARK_FRAME_SIZE_CHANGED (f);
98528da0b7fc Import from CVS: tag r21-2-40
cvs
parents: 444
diff changeset
3441
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
3442 #ifdef NEW_GC
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
3443 if (delay || hold_frame_size_changes)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
3444 #else /* not NEW_GC */
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1313
diff changeset
3445 if (delay || hold_frame_size_changes || gc_in_progress)
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
3446 #endif /* not NEW_GC */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3447 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3448 f->new_width = newwidth;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3449 f->new_height = newheight;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3450 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3451 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3452
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3453 f->size_change_pending = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3454 /* For TTY frames, it's like one, like all ...
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3455 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
3456 if (FRAME_TTY_P (f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3457 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3458 Lisp_Object frmcons;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3459
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3460 DEVICE_FRAME_LOOP (frmcons, XDEVICE (FRAME_DEVICE (f)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3461 change_frame_size_1 (XFRAME (XCAR (frmcons)), newheight, newwidth);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3462 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3463 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3464 change_frame_size_1 (f, newheight, newwidth);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3465 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3466
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3467
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3468 /* 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
3469 static Ibyte *
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3470 generate_title_string (struct window *w, Lisp_Object format_str,
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3471 face_index findex, int type)
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3472 {
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3473 struct display_line *dl;
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3474 struct display_block *db;
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3475 int elt = 0;
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3476
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3477 dl = &title_string_display_line;
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3478 db = get_display_block_from_line (dl, TEXT);
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3479 Dynarr_reset (db->runes);
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3480
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3481 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
3482 -1, type);
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3483
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
3484 Dynarr_reset (title_string_ichar_dynarr);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3485 while (elt < Dynarr_length (db->runes))
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3486 {
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3487 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
3488 Dynarr_add (title_string_ichar_dynarr,
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3489 Dynarr_atp (db->runes, elt)->object.chr.ch);
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3490 elt++;
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3491 }
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3492
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3493 return
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
3494 convert_ichar_string_into_malloced_string
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
3495 (Dynarr_atp (title_string_ichar_dynarr, 0),
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
3496 Dynarr_length (title_string_ichar_dynarr), 0);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3497 }
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3498
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3499 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3500 update_frame_title (struct frame *f)
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 struct window *w = XWINDOW (FRAME_SELECTED_WINDOW (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3503 Lisp_Object title_format;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3504 Lisp_Object icon_format;
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
3505 Ibyte *title;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3506
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3507 /* We don't change the title for the minibuffer unless the frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3508 only has a minibuffer. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3509 if (MINI_WINDOW_P (w) && !FRAME_MINIBUF_ONLY_P (f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3510 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3511
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3512 /* And we don't want dead buffers to blow up on us. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3513 if (!BUFFER_LIVE_P (XBUFFER (w->buffer)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3514 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3515
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3516 title = NULL;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3517 title_format = symbol_value_in_buffer (Qframe_title_format, w->buffer);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3518 icon_format = symbol_value_in_buffer (Qframe_icon_title_format, w->buffer);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3519
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
3520 if (HAS_FRAMEMETH_P (f, set_title_from_ibyte))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3521 {
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3522 title = generate_title_string (w, title_format,
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3523 DEFAULT_INDEX, CURRENT_DISP);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
3524 FRAMEMETH (f, set_title_from_ibyte, (f, title));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3525 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3526
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
3527 if (HAS_FRAMEMETH_P (f, set_icon_name_from_ibyte))
428
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 if (!EQ (icon_format, title_format) || !title)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3530 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3531 if (title)
1726
a8d8f419b459 [xemacs-hg @ 2003-09-30 15:26:34 by james]
james
parents: 1429
diff changeset
3532 xfree (title, Ibyte *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3533
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3534 title = generate_title_string (w, icon_format,
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3535 DEFAULT_INDEX, CURRENT_DISP);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3536 }
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
3537 FRAMEMETH (f, set_icon_name_from_ibyte, (f, title));
428
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3540 if (title)
1726
a8d8f419b459 [xemacs-hg @ 2003-09-30 15:26:34 by james]
james
parents: 1429
diff changeset
3541 xfree (title, Ibyte *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3542 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3543
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 DEFUN ("set-frame-pointer", Fset_frame_pointer, 2, 2, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3546 Set the mouse pointer of FRAME to the given pointer image instance.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3547 You should not call this function directly. Instead, set one of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3548 the variables `text-pointer-glyph', `nontext-pointer-glyph',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3549 `modeline-pointer-glyph', `selection-pointer-glyph',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3550 `busy-pointer-glyph', or `toolbar-pointer-glyph'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3551 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3552 (frame, image_instance))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3553 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3554 struct frame *f = decode_frame (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3555 CHECK_POINTER_IMAGE_INSTANCE (image_instance);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3556 if (!EQ (f->pointer, image_instance))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3557 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3558 f->pointer = image_instance;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3559 MAYBE_FRAMEMETH (f, set_frame_pointer, (f));
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 return 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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3564
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3565 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3566 update_frame_icon (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3567 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3568 if (f->icon_changed || f->windows_changed)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3569 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3570 Lisp_Object frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3571 Lisp_Object new_icon;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3572
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
3573 frame = wrap_frame (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3574 new_icon = glyph_image_instance (Vframe_icon_glyph, frame,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3575 ERROR_ME_WARN, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3576 if (!EQ (new_icon, f->icon))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3577 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3578 f->icon = new_icon;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3579 MAYBE_FRAMEMETH (f, set_frame_icon, (f));
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 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3582
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3583 f->icon_changed = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3584 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3585
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3586 static void
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1726
diff changeset
3587 icon_glyph_changed (Lisp_Object UNUSED (glyph), Lisp_Object UNUSED (property),
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1726
diff changeset
3588 Lisp_Object UNUSED (locale))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3589 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3590 MARK_ICON_CHANGED;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3591 }
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
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3594 /***************************************************************************/
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3595 /* */
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3596 /* initialization */
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3597 /* */
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3598 /***************************************************************************/
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3599
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3600 void
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3601 init_frame (void)
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3602 {
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3603 #ifndef PDUMP
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3604 if (!initialized)
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3605 #endif
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3606 {
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 863
diff changeset
3607 title_string_ichar_dynarr = Dynarr_new (Ichar);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3608 xzero (title_string_display_line);
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3609 }
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3610 }
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
3611
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3612 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3613 syms_of_frame (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3614 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3615 INIT_LRECORD_IMPLEMENTATION (frame);
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
3616 #ifdef NEW_GC
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
3617 INIT_LRECORD_IMPLEMENTATION (expose_ignore);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3025
diff changeset
3618 #endif /* NEW_GC */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3619
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3620 DEFSYMBOL (Qdelete_frame_hook);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3621 DEFSYMBOL (Qselect_frame_hook);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3622 DEFSYMBOL (Qdeselect_frame_hook);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3623 DEFSYMBOL (Qcreate_frame_hook);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3624 DEFSYMBOL (Qcustom_initialize_frame);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3625 DEFSYMBOL (Qmouse_enter_frame_hook);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3626 DEFSYMBOL (Qmouse_leave_frame_hook);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3627 DEFSYMBOL (Qmap_frame_hook);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3628 DEFSYMBOL (Qunmap_frame_hook);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3629
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3630 DEFSYMBOL (Qframep);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3631 DEFSYMBOL (Qframe_live_p);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3632 DEFSYMBOL (Qdelete_frame);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3633 DEFSYMBOL (Qsynchronize_minibuffers);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3634 DEFSYMBOL (Qbuffer_predicate);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3635 DEFSYMBOL (Qframe_being_created);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3636 DEFSYMBOL (Qmake_initial_minibuffer_frame);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3637
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3638 DEFSYMBOL (Qframe_title_format);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3639 DEFSYMBOL (Qframe_icon_title_format);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3640
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3641 DEFSYMBOL (Qhidden);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3642 DEFSYMBOL (Qvisible);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3643 DEFSYMBOL (Qiconic);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3644 DEFSYMBOL (Qinvisible);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3645 DEFSYMBOL (Qvisible_iconic);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3646 DEFSYMBOL (Qinvisible_iconic);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3647 DEFSYMBOL (Qnomini);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3648 DEFSYMBOL (Qvisible_nomini);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3649 DEFSYMBOL (Qiconic_nomini);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3650 DEFSYMBOL (Qinvisible_nomini);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3651 DEFSYMBOL (Qvisible_iconic_nomini);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3652 DEFSYMBOL (Qinvisible_iconic_nomini);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3653
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3654 DEFSYMBOL (Qminibuffer);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3655 DEFSYMBOL (Qunsplittable);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3656 DEFSYMBOL (Qinternal_border_width);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3657 DEFSYMBOL (Qtop_toolbar_shadow_color);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3658 DEFSYMBOL (Qbottom_toolbar_shadow_color);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3659 DEFSYMBOL (Qbackground_toolbar_color);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3660 DEFSYMBOL (Qtop_toolbar_shadow_pixmap);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3661 DEFSYMBOL (Qbottom_toolbar_shadow_pixmap);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3662 DEFSYMBOL (Qtoolbar_shadow_thickness);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3663 DEFSYMBOL (Qscrollbar_placement);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3664 DEFSYMBOL (Qinter_line_space);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3665 /* Qiconic already in this function. */
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3666 DEFSYMBOL (Qvisual_bell);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3667 DEFSYMBOL (Qbell_volume);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3668 DEFSYMBOL (Qpointer_background);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3669 DEFSYMBOL (Qpointer_color);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3670 DEFSYMBOL (Qtext_pointer);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3671 DEFSYMBOL (Qspace_pointer);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3672 DEFSYMBOL (Qmodeline_pointer);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3673 DEFSYMBOL (Qgc_pointer);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3674 DEFSYMBOL (Qinitially_unmapped);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3675 DEFSYMBOL (Quse_backing_store);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3676 DEFSYMBOL (Qborder_color);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3677 DEFSYMBOL (Qborder_width);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3678 /* Qwidth, Qheight, Qleft, Qtop in general.c */
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3679 DEFSYMBOL (Qset_specifier);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3680 DEFSYMBOL (Qset_face_property);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3681 DEFSYMBOL (Qface_property_instance);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 558
diff changeset
3682 DEFSYMBOL (Qframe_property_alias);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3683
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3684 DEFSUBR (Fmake_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3685 DEFSUBR (Fframep);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3686 DEFSUBR (Fframe_live_p);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3687 #if 0 /* FSFmacs */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3688 DEFSUBR (Fignore_event);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3689 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3690 DEFSUBR (Ffocus_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3691 DEFSUBR (Fselect_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3692 DEFSUBR (Fselected_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3693 DEFSUBR (Factive_minibuffer_window);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3694 DEFSUBR (Flast_nonminibuf_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3695 DEFSUBR (Fframe_root_window);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3696 DEFSUBR (Fframe_selected_window);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3697 DEFSUBR (Fset_frame_selected_window);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3698 DEFSUBR (Fframe_device);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3699 DEFSUBR (Fnext_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3700 DEFSUBR (Fprevious_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3701 DEFSUBR (Fdelete_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3702 DEFSUBR (Fmouse_position);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3703 DEFSUBR (Fmouse_pixel_position);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3704 DEFSUBR (Fmouse_position_as_motion_event);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3705 DEFSUBR (Fset_mouse_position);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3706 DEFSUBR (Fset_mouse_pixel_position);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3707 DEFSUBR (Fmake_frame_visible);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3708 DEFSUBR (Fmake_frame_invisible);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3709 DEFSUBR (Ficonify_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3710 DEFSUBR (Fdeiconify_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3711 DEFSUBR (Fframe_visible_p);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3712 DEFSUBR (Fframe_totally_visible_p);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3713 DEFSUBR (Fframe_iconified_p);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3714 DEFSUBR (Fvisible_frame_list);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3715 DEFSUBR (Fraise_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3716 DEFSUBR (Flower_frame);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3717 DEFSUBR (Fdisable_frame);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3718 DEFSUBR (Fenable_frame);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3719 DEFSUBR (Fframe_property);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3720 DEFSUBR (Fframe_properties);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3721 DEFSUBR (Fset_frame_properties);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3722 DEFSUBR (Fframe_pixel_height);
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3723 DEFSUBR (Fframe_displayable_pixel_height);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3724 DEFSUBR (Fframe_pixel_width);
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3725 DEFSUBR (Fframe_displayable_pixel_width);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3726 DEFSUBR (Fframe_name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3727 DEFSUBR (Fframe_modified_tick);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3728 DEFSUBR (Fset_frame_height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3729 DEFSUBR (Fset_frame_width);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3730 DEFSUBR (Fset_frame_size);
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3731 DEFSUBR (Fset_frame_pixel_height);
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3732 DEFSUBR (Fset_frame_displayable_pixel_height);
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3733 DEFSUBR (Fset_frame_pixel_width);
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3734 DEFSUBR (Fset_frame_displayable_pixel_width);
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 853
diff changeset
3735 DEFSUBR (Fset_frame_pixel_size);
1125
ecb17ab2f7ab [xemacs-hg @ 2002-11-28 12:30:09 by michaels]
michaels
parents: 1123
diff changeset
3736 DEFSUBR (Fset_frame_displayable_pixel_size);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3737 DEFSUBR (Fset_frame_position);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3738 DEFSUBR (Fset_frame_pointer);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3739 DEFSUBR (Fprint_job_page_number);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3740 DEFSUBR (Fprint_job_eject_page);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3741 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3742
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3743 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3744 vars_of_frame (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3745 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3746 /* */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3747 Vframe_being_created = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3748 staticpro (&Vframe_being_created);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3749
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3750 #ifdef HAVE_CDE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3751 Fprovide (intern ("cde"));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3752 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3753
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3754 #ifdef HAVE_OFFIX_DND
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3755 Fprovide (intern ("offix"));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3756 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3757
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3758 #if 0 /* FSFmacs stupidity */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3759 xxDEFVAR_LISP ("emacs-iconified", &Vemacs_iconified /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3760 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
3761 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3762 Vemacs_iconified = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3763 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3764
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3765 DEFVAR_LISP ("select-frame-hook", &Vselect_frame_hook /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3766 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
3767 Note that calling `select-frame' does not necessarily set the focus:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3768 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
3769 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
3770 may refuse the focus-change request.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3771 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3772 Vselect_frame_hook = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3773
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3774 DEFVAR_LISP ("deselect-frame-hook", &Vdeselect_frame_hook /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3775 Function or functions to run just before a frame loses the focus.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3776 See `select-frame-hook'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3777 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3778 Vdeselect_frame_hook = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3779
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3780 DEFVAR_LISP ("delete-frame-hook", &Vdelete_frame_hook /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3781 Function or functions to call when a frame is deleted.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3782 One argument, the about-to-be-deleted frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3783 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3784 Vdelete_frame_hook = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3785
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3786 DEFVAR_LISP ("create-frame-hook", &Vcreate_frame_hook /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3787 Function or functions to call when a frame is created.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3788 One argument, the newly-created frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3789 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3790 Vcreate_frame_hook = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3791
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3792 DEFVAR_LISP ("mouse-enter-frame-hook", &Vmouse_enter_frame_hook /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3793 Function or functions to call when the mouse enters a frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3794 One argument, the frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3795 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
3796 In most cases, the `deselect-frame-hook' is more appropriate.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3797 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3798 Vmouse_enter_frame_hook = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3799
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3800 DEFVAR_LISP ("mouse-leave-frame-hook", &Vmouse_leave_frame_hook /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3801 Function or functions to call when the mouse leaves a frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3802 One argument, the frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3803 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
3804 In most cases, the `select-frame-hook' is more appropriate.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3805 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3806 Vmouse_leave_frame_hook = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3807
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3808 DEFVAR_LISP ("map-frame-hook", &Vmap_frame_hook /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3809 Function or functions to call when a frame is mapped.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3810 One argument, the frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3811 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3812 Vmap_frame_hook = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3813
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3814 DEFVAR_LISP ("unmap-frame-hook", &Vunmap_frame_hook /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3815 Function or functions to call when a frame is unmapped.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3816 One argument, the frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3817 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3818 Vunmap_frame_hook = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3819
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3820 DEFVAR_BOOL ("allow-deletion-of-last-visible-frame",
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3821 &allow_deletion_of_last_visible_frame /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3822 *Non-nil means to assume the force option to delete-frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3823 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3824 allow_deletion_of_last_visible_frame = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3825
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3826 DEFVAR_LISP ("adjust-frame-function", &Vadjust_frame_function /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3827 Function or constant controlling adjustment of frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3828 When scrollbars, toolbars, default font etc. change in frame, the frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3829 needs to be adjusted. The adjustment is controlled by this variable.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3830 Legal values are:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3831 nil to keep character frame size unchanged when possible (resize)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3832 t to keep pixel size unchanged (never resize)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3833 function symbol or lambda form. This function must return boolean
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3834 value which is treated as above. Function is passed one parameter,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3835 the frame being adjusted. It function should not modify or delete
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3836 the frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3837 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3838 Vadjust_frame_function = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3839
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3840 DEFVAR_LISP ("mouse-motion-handler", &Vmouse_motion_handler /*
3577
91950589598c [xemacs-hg @ 2006-08-29 14:10:51 by stephent]
stephent
parents: 3092
diff changeset
3841 Handler for motion events. Must be a function taking one argument, the event.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3842 For most applications, you should use `mode-motion-hook' instead of this.
3577
91950589598c [xemacs-hg @ 2006-08-29 14:10:51 by stephent]
stephent
parents: 3092
diff changeset
3843 The default value is `default-mouse-motion-handler'.
91950589598c [xemacs-hg @ 2006-08-29 14:10:51 by stephent]
stephent
parents: 3092
diff changeset
3844
91950589598c [xemacs-hg @ 2006-08-29 14:10:51 by stephent]
stephent
parents: 3092
diff changeset
3845 Note that this is NOT a hook variable, so there is no standard way to remove
91950589598c [xemacs-hg @ 2006-08-29 14:10:51 by stephent]
stephent
parents: 3092
diff changeset
3846 actions from it. Instead, when adding a new kind of action, a hook variable
91950589598c [xemacs-hg @ 2006-08-29 14:10:51 by stephent]
stephent
parents: 3092
diff changeset
3847 should be defined and initialized to the current value of this variable, then
91950589598c [xemacs-hg @ 2006-08-29 14:10:51 by stephent]
stephent
parents: 3092
diff changeset
3848 this variable set to a function that runs the new hook. To disable the new
91950589598c [xemacs-hg @ 2006-08-29 14:10:51 by stephent]
stephent
parents: 3092
diff changeset
3849 actions, use `remove-hook' rather than setting `mouse-motion-handler'.
91950589598c [xemacs-hg @ 2006-08-29 14:10:51 by stephent]
stephent
parents: 3092
diff changeset
3850
91950589598c [xemacs-hg @ 2006-08-29 14:10:51 by stephent]
stephent
parents: 3092
diff changeset
3851 `mouse-motion-hook' in the balloon-help library exemplifies this pattern.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3852 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3853 Vmouse_motion_handler = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3854
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3855 DEFVAR_LISP ("synchronize-minibuffers",&Vsynchronize_minibuffers /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3856 Set to t if all minibuffer windows are to be synchronized.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3857 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
3858 visible frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3859 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3860 Vsynchronize_minibuffers = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3861
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3862 DEFVAR_LISP ("frame-title-format", &Vframe_title_format /*
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3863 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
3864 This is the same format as `modeline-format' with the exception that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3865 %- is ignored.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3866 */ );
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3867 /* #### 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
3868 of the world. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3869 #ifdef WIN32_NATIVE
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3870 Vframe_title_format = build_string ("%b - XEmacs");
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3871 #else
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3872 Vframe_title_format = build_string ("%S: %b");
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3873 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3874
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3875 DEFVAR_LISP ("frame-icon-title-format", &Vframe_icon_title_format /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3876 Controls the title of the icon corresponding to the selected frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3877 See also the variable `frame-title-format'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3878 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3879 Vframe_icon_title_format = build_string ("%b");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3880
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3881 DEFVAR_LISP ("default-frame-name", &Vdefault_frame_name /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3882 The default name to assign to newly-created frames.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3883 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
3884 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
3885 of the frame. (See `frame-title-format'.)
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 2552
diff changeset
3886
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 2552
diff changeset
3887 Previous to 21.5.21, this defaulted to `emacs'; since that release, it has
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 2552
diff changeset
3888 defaulted to `XEmacs'. In the short term you can restore the old default by
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 2552
diff changeset
3889 setting the environment variable USE_EMACS_AS_DEFAULT_APPLICATION_CLASS
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 2552
diff changeset
3890 (which does affect the frame name, despite what it's called) to some value
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 2552
diff changeset
3891 before starting XEmacs, but this is deprecated.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3892 */ );
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 2552
diff changeset
3893 Vdefault_frame_name = Qnil;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3894
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3895 DEFVAR_LISP ("default-frame-plist", &Vdefault_frame_plist /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3896 Plist of default values for frame creation, other than the first one.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3897 These may be set in your init file, like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3898
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3899 \(setq default-frame-plist '(width 80 height 55))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3900
2747
0882ede40b55 [xemacs-hg @ 2005-04-27 09:01:43 by stephent]
stephent
parents: 2720
diff changeset
3901 Predefined properties are described in `set-frame-properties'.
0882ede40b55 [xemacs-hg @ 2005-04-27 09:01:43 by stephent]
stephent
parents: 2720
diff changeset
3902
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3903 The properties may be in alist format for backward compatibility
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3904 but you should not rely on this behavior.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3905
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3906 These override values given in window system configuration data,
2747
0882ede40b55 [xemacs-hg @ 2005-04-27 09:01:43 by stephent]
stephent
parents: 2720
diff changeset
3907 including X Windows' defaults database.
0882ede40b55 [xemacs-hg @ 2005-04-27 09:01:43 by stephent]
stephent
parents: 2720
diff changeset
3908
0882ede40b55 [xemacs-hg @ 2005-04-27 09:01:43 by stephent]
stephent
parents: 2720
diff changeset
3909 Values for the first Emacs frame are taken from `initial-frame-plist'.
0882ede40b55 [xemacs-hg @ 2005-04-27 09:01:43 by stephent]
stephent
parents: 2720
diff changeset
3910 Since the first X frame is created before loading your .emacs file, you
0882ede40b55 [xemacs-hg @ 2005-04-27 09:01:43 by stephent]
stephent
parents: 2720
diff changeset
3911 may wish use the X resource database to avoid flashing.
0882ede40b55 [xemacs-hg @ 2005-04-27 09:01:43 by stephent]
stephent
parents: 2720
diff changeset
3912
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3913 For values specific to the separate minibuffer frame, see
2747
0882ede40b55 [xemacs-hg @ 2005-04-27 09:01:43 by stephent]
stephent
parents: 2720
diff changeset
3914 `minibuffer-frame-plist'. See also the variables `default-x-frame-plist'
0882ede40b55 [xemacs-hg @ 2005-04-27 09:01:43 by stephent]
stephent
parents: 2720
diff changeset
3915 and `default-tty-frame-plist', which are like `default-frame-plist'
0882ede40b55 [xemacs-hg @ 2005-04-27 09:01:43 by stephent]
stephent
parents: 2720
diff changeset
3916 except that they apply only to X or tty frames, respectively \(whereas
0882ede40b55 [xemacs-hg @ 2005-04-27 09:01:43 by stephent]
stephent
parents: 2720
diff changeset
3917 `default-frame-plist' applies to all types of frames).
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3918 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3919 Vdefault_frame_plist = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3920
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3921 DEFVAR_LISP ("frame-icon-glyph", &Vframe_icon_glyph /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3922 Icon glyph used to iconify a frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3923 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3924 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3925
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3926 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3927 complex_vars_of_frame (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3928 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3929 Vframe_icon_glyph = allocate_glyph (GLYPH_ICON, icon_glyph_changed);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3930 }