Mercurial > emacs
annotate src/widget.c @ 99492:ee792794d888
(isearch-search-fun): Compare the length of the
current search string with the length of the string from the
previous search state to detect the situation when the user
adds or removes characters in the search string.
Use word-search-forward-lax and word-search-backward-lax in this
case, and otherwise word-search-forward and word-search-backward.
author | Juri Linkov <juri@jurta.org> |
---|---|
date | Tue, 11 Nov 2008 19:43:09 +0000 |
parents | 90335c3336b0 |
children | e038c1a8307c |
rev | line source |
---|---|
5626 | 1 /* The emacs frame widget. |
75227
e90d04cd455a
Update copyright for years from Emacs 21 to present (mainly adding
Glenn Morris <rgm@gnu.org>
parents:
68651
diff
changeset
|
2 Copyright (C) 1992, 1993, 2000, 2001, 2002, 2003, 2004, |
79759 | 3 2005, 2006, 2007, 2008 Free Software Foundation, Inc. |
5626 | 4 |
5 This file is part of GNU Emacs. | |
6 | |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
87649
diff
changeset
|
7 GNU Emacs is free software: you can redistribute it and/or modify |
5626 | 8 it under the terms of the GNU General Public License as published by |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
87649
diff
changeset
|
9 the Free Software Foundation, either version 3 of the License, or |
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
87649
diff
changeset
|
10 (at your option) any later version. |
5626 | 11 |
12 GNU Emacs is distributed in the hope that it will be useful, | |
13 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 GNU General Public License for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
87649
diff
changeset
|
18 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ |
5626 | 19 |
20 /* Emacs 19 face widget ported by Fred Pierresteguy */ | |
21 | |
14620 | 22 /* This file has been censored by the Communications Decency Act. |
23 That law was passed under the guise of a ban on pornography, but | |
24 it bans far more than that. This file did not contain pornography, | |
25 but it was censored nonetheless. | |
26 | |
27 For information on US government censorship of the Internet, and | |
28 what you can do to bring back freedom of the press, see the web | |
29 site http://www.vtw.org/ | |
30 */ | |
31 | |
7900
60795e826dad
Put stdio.h after config.h.
Richard M. Stallman <rms@gnu.org>
parents:
7579
diff
changeset
|
32 #include <config.h> |
5626 | 33 #include <stdio.h> |
34 #include "lisp.h" | |
35 #include "xterm.h" | |
36 | |
37699
a76348c096b4
Include keyboard.h before frame.h.
Eli Zaretskii <eliz@gnu.org>
parents:
36769
diff
changeset
|
37 #include "keyboard.h" |
5626 | 38 #include "frame.h" |
21514 | 39 #include "window.h" |
5626 | 40 |
41 #include "dispextern.h" | |
12052
942ad27b8e10
(EmacsFrameDestroy): Block and unblock input.
Karl Heuer <kwzh@gnu.org>
parents:
11895
diff
changeset
|
42 #include "blockinput.h" |
5626 | 43 |
44 #include <X11/StringDefs.h> | |
45 #include <X11/IntrinsicP.h> | |
46 #include <X11/cursorfont.h> | |
47 #include "widgetprv.h" | |
5655
3929b3fb37ee
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
48 #include <X11/ObjectP.h> |
5626 | 49 #include <X11/Shell.h> |
50 #include <X11/ShellP.h> | |
9230
786a658d3687
(EmacsFrameSetCharSize): Use lw_refigure_widget() for widget set
Paul Reilly <pmr@pajato.com>
parents:
9165
diff
changeset
|
51 #include "../lwlib/lwlib.h" |
5626 | 52 |
38219
f70ea2b09e46
(EmacsFrameSetCharSize): Turn off atimers and block
Gerd Moellmann <gerd@gnu.org>
parents:
38182
diff
changeset
|
53 #include <signal.h> |
f70ea2b09e46
(EmacsFrameSetCharSize): Turn off atimers and block
Gerd Moellmann <gerd@gnu.org>
parents:
38182
diff
changeset
|
54 #include "syssignal.h" |
f70ea2b09e46
(EmacsFrameSetCharSize): Turn off atimers and block
Gerd Moellmann <gerd@gnu.org>
parents:
38182
diff
changeset
|
55 |
97731
90335c3336b0
Include character.h and font.h for XSETFONT.
Chong Yidong <cyd@stupidchicken.com>
parents:
94963
diff
changeset
|
56 #include "character.h" |
90335c3336b0
Include character.h and font.h for XSETFONT.
Chong Yidong <cyd@stupidchicken.com>
parents:
94963
diff
changeset
|
57 #include "font.h" |
90335c3336b0
Include character.h and font.h for XSETFONT.
Chong Yidong <cyd@stupidchicken.com>
parents:
94963
diff
changeset
|
58 |
5626 | 59 /* This sucks: this is the first default that x-faces.el tries. This won't |
60 be used unless neither the "Emacs.EmacsFrame" resource nor the | |
61 "Emacs.EmacsFrame" resource is set; the frame | |
62 may have the wrong default size if this font doesn't exist, but some other | |
63 font that x-faces.el does. The workaround is to specify some font in the | |
64 resource database; I don't know a solution other than duplicating the font- | |
65 searching code from x-faces.el in this file. | |
66 | |
67 This also means that if "Emacs.EmacsFrame" is specified as a non- | |
68 existent font, then Xt is going to substitute "XtDefaultFont" for it, | |
69 which is a different size than this one. The solution for this is to | |
70 make x-faces.el try to use XtDefaultFont. The problem with that is that | |
71 XtDefaultFont is almost certainly variable-width. | |
72 | |
73 #### Perhaps we could have this code explicitly set XtDefaultFont to this? | |
74 */ | |
75 #define DEFAULT_FACE_FONT "-*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-*" | |
76 | |
77 | |
5706
75570af32e92
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5655
diff
changeset
|
78 static void EmacsFrameInitialize (/*Widget, Widget, ArgList, Cardinal * */); |
75570af32e92
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5655
diff
changeset
|
79 static void EmacsFrameDestroy (/* Widget */); |
75570af32e92
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5655
diff
changeset
|
80 static void EmacsFrameRealize (/* Widget, XtValueMask*, XSetWindowAttributes* */); |
75570af32e92
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5655
diff
changeset
|
81 void EmacsFrameResize (/* Widget widget */); |
75570af32e92
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5655
diff
changeset
|
82 static Boolean EmacsFrameSetValues (/* Widget, Widget, Widget, |
75570af32e92
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5655
diff
changeset
|
83 ArgList, Cardinal * */); |
75570af32e92
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5655
diff
changeset
|
84 static XtGeometryResult EmacsFrameQueryGeometry (/* Widget, XtWidgetGeometry*, |
75570af32e92
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5655
diff
changeset
|
85 XtWidgetGeometry* */); |
5626 | 86 |
87 | |
88 #undef XtOffset | |
89 #define XtOffset(p_type,field) \ | |
90 ((Cardinal) (((char *) (&(((p_type)0)->field))) - ((char *)0))) | |
91 #define offset(field) XtOffset(EmacsFrame, emacs_frame.field) | |
92 | |
93 static XtResource resources[] = { | |
94 {XtNgeometry, XtCGeometry, XtRString, sizeof(String), | |
95 offset (geometry), XtRString, (XtPointer) 0}, | |
96 {XtNiconic, XtCIconic, XtRBoolean, sizeof(Boolean), | |
97 offset (iconic), XtRImmediate, (XtPointer) False}, | |
98 | |
99 {XtNemacsFrame, XtCEmacsFrame, XtRPointer, sizeof (XtPointer), | |
100 offset (frame), XtRImmediate, 0}, | |
101 | |
102 {XtNminibuffer, XtCMinibuffer, XtRInt, sizeof (int), | |
103 offset (minibuffer), XtRImmediate, (XtPointer)0}, | |
104 {XtNunsplittable, XtCUnsplittable, XtRBoolean, sizeof (Boolean), | |
105 offset (unsplittable), XtRImmediate, (XtPointer)0}, | |
106 {XtNinternalBorderWidth, XtCInternalBorderWidth, XtRInt, sizeof (int), | |
107 offset (internal_border_width), XtRImmediate, (XtPointer)4}, | |
108 {XtNinterline, XtCInterline, XtRInt, sizeof (int), | |
109 offset (interline), XtRImmediate, (XtPointer)0}, | |
97731
90335c3336b0
Include character.h and font.h for XSETFONT.
Chong Yidong <cyd@stupidchicken.com>
parents:
94963
diff
changeset
|
110 {XtNfont, XtCFont, XtRFontStruct, sizeof(struct font *), |
5626 | 111 offset(font),XtRString, DEFAULT_FACE_FONT}, |
112 {XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel), | |
113 offset(foreground_pixel), XtRString, "XtDefaultForeground"}, | |
114 {XtNcursorColor, XtCForeground, XtRPixel, sizeof(Pixel), | |
115 offset(cursor_color), XtRString, "XtDefaultForeground"}, | |
116 {XtNbarCursor, XtCBarCursor, XtRBoolean, sizeof (Boolean), | |
117 offset (bar_cursor), XtRImmediate, (XtPointer)0}, | |
118 {XtNvisualBell, XtCVisualBell, XtRBoolean, sizeof (Boolean), | |
119 offset (visual_bell), XtRImmediate, (XtPointer)0}, | |
120 {XtNbellVolume, XtCBellVolume, XtRInt, sizeof (int), | |
121 offset (bell_volume), XtRImmediate, (XtPointer)0}, | |
122 }; | |
123 | |
124 #undef offset | |
125 | |
126 /* | |
127 static XtActionsRec | |
128 emacsFrameActionsTable [] = { | |
129 {"keypress", key_press}, | |
130 {"focus_in", emacs_frame_focus_handler}, | |
131 {"focus_out", emacs_frame_focus_handler}, | |
132 }; | |
133 | |
134 static char | |
135 emacsFrameTranslations [] = "\ | |
136 <KeyPress>: keypress()\n\ | |
137 <FocusIn>: focus_in()\n\ | |
138 <FocusOut>: focus_out()\n\ | |
139 "; | |
140 */ | |
141 | |
142 EmacsFrameClassRec emacsFrameClassRec = { | |
143 { /* core fields */ | |
144 /* superclass */ &widgetClassRec, | |
145 /* class_name */ "EmacsFrame", | |
146 /* widget_size */ sizeof(EmacsFrameRec), | |
147 /* class_initialize */ 0, | |
148 /* class_part_initialize */ 0, | |
149 /* class_inited */ FALSE, | |
150 /* initialize */ EmacsFrameInitialize, | |
151 /* initialize_hook */ 0, | |
152 /* realize */ EmacsFrameRealize, | |
153 /* actions */ 0, /*emacsFrameActionsTable*/ | |
154 /* num_actions */ 0, /*XtNumber (emacsFrameActionsTable)*/ | |
155 /* resources */ resources, | |
156 /* resource_count */ XtNumber(resources), | |
157 /* xrm_class */ NULLQUARK, | |
158 /* compress_motion */ TRUE, | |
159 /* compress_exposure */ TRUE, | |
160 /* compress_enterleave */ TRUE, | |
161 /* visible_interest */ FALSE, | |
162 /* destroy */ EmacsFrameDestroy, | |
163 /* resize */ EmacsFrameResize, | |
164 /* expose */ XtInheritExpose, | |
165 /* set_values */ EmacsFrameSetValues, | |
166 /* set_values_hook */ 0, | |
167 /* set_values_almost */ XtInheritSetValuesAlmost, | |
168 /* get_values_hook */ 0, | |
169 /* accept_focus */ XtInheritAcceptFocus, | |
170 /* version */ XtVersion, | |
171 /* callback_private */ 0, | |
172 /* tm_table */ 0, /*emacsFrameTranslations*/ | |
173 /* query_geometry */ EmacsFrameQueryGeometry, | |
174 /* display_accelerator */ XtInheritDisplayAccelerator, | |
175 /* extension */ 0 | |
176 } | |
177 }; | |
178 | |
179 WidgetClass emacsFrameClass = (WidgetClass) &emacsFrameClassRec; | |
180 | |
181 static void | |
5706
75570af32e92
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5655
diff
changeset
|
182 get_default_char_pixel_size (ew, pixel_width, pixel_height) |
75570af32e92
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5655
diff
changeset
|
183 EmacsFrame ew; |
75570af32e92
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5655
diff
changeset
|
184 int* pixel_width; |
75570af32e92
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5655
diff
changeset
|
185 int* pixel_height; |
5626 | 186 { |
187 struct frame* f = ew->emacs_frame.frame; | |
51206
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50099
diff
changeset
|
188 *pixel_width = FRAME_COLUMN_WIDTH (f); |
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50099
diff
changeset
|
189 *pixel_height = FRAME_LINE_HEIGHT (f); |
5626 | 190 } |
191 | |
192 static void | |
5706
75570af32e92
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5655
diff
changeset
|
193 pixel_to_char_size (ew, pixel_width, pixel_height, char_width, char_height) |
75570af32e92
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5655
diff
changeset
|
194 EmacsFrame ew; |
75570af32e92
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5655
diff
changeset
|
195 Dimension pixel_width; |
75570af32e92
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5655
diff
changeset
|
196 Dimension pixel_height; |
75570af32e92
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5655
diff
changeset
|
197 int* char_width; |
75570af32e92
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5655
diff
changeset
|
198 int* char_height; |
5626 | 199 { |
200 struct frame* f = ew->emacs_frame.frame; | |
51206
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50099
diff
changeset
|
201 *char_width = FRAME_PIXEL_WIDTH_TO_TEXT_COLS (f, (int) pixel_width); |
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50099
diff
changeset
|
202 *char_height = FRAME_PIXEL_HEIGHT_TO_TEXT_LINES (f, (int) pixel_height); |
5626 | 203 } |
204 | |
205 static void | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
206 char_to_pixel_size (ew, char_width, char_height, pixel_width, pixel_height) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
207 EmacsFrame ew; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
208 int char_width; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
209 int char_height; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
210 Dimension* pixel_width; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
211 Dimension* pixel_height; |
5626 | 212 { |
213 struct frame* f = ew->emacs_frame.frame; | |
51206
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50099
diff
changeset
|
214 *pixel_width = FRAME_TEXT_COLS_TO_PIXEL_WIDTH (f, char_width); |
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50099
diff
changeset
|
215 *pixel_height = FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, char_height); |
5626 | 216 } |
217 | |
218 static void | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
219 round_size_to_char (ew, in_width, in_height, out_width, out_height) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
220 EmacsFrame ew; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
221 Dimension in_width; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
222 Dimension in_height; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
223 Dimension* out_width; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
224 Dimension* out_height; |
5626 | 225 { |
226 int char_width; | |
227 int char_height; | |
228 pixel_to_char_size (ew, in_width, in_height, &char_width, &char_height); | |
229 char_to_pixel_size (ew, char_width, char_height, out_width, out_height); | |
230 } | |
231 | |
232 static Widget | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
233 get_wm_shell (w) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
234 Widget w; |
5626 | 235 { |
236 Widget wmshell; | |
237 | |
238 for (wmshell = XtParent (w); | |
239 wmshell && !XtIsWMShell (wmshell); | |
240 wmshell = XtParent (wmshell)); | |
241 | |
242 return wmshell; | |
243 } | |
244 | |
25728
342027dc53c2
(set_frame_size, EmacsFrameSetCharSize): Remove
Gerd Moellmann <gerd@gnu.org>
parents:
25461
diff
changeset
|
245 #if 0 /* Currently not used. */ |
342027dc53c2
(set_frame_size, EmacsFrameSetCharSize): Remove
Gerd Moellmann <gerd@gnu.org>
parents:
25461
diff
changeset
|
246 |
5626 | 247 static void |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
248 mark_shell_size_user_specified (wmshell) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
249 Widget wmshell; |
5626 | 250 { |
251 if (! XtIsWMShell (wmshell)) abort (); | |
252 /* This is kind of sleazy, but I can't see how else to tell it to make it | |
253 mark the WM_SIZE_HINTS size as user specified when appropriate. */ | |
254 ((WMShellWidget) wmshell)->wm.size_hints.flags |= USSize; | |
255 } | |
256 | |
25728
342027dc53c2
(set_frame_size, EmacsFrameSetCharSize): Remove
Gerd Moellmann <gerd@gnu.org>
parents:
25461
diff
changeset
|
257 #endif |
342027dc53c2
(set_frame_size, EmacsFrameSetCharSize): Remove
Gerd Moellmann <gerd@gnu.org>
parents:
25461
diff
changeset
|
258 |
5626 | 259 |
260 /* Can't have static frame locals because of some broken compilers. | |
261 Normally, initializing a variable like this doesn't work in emacs, | |
262 but it's ok in this file because it must come after lastfile (and | |
263 thus have its data not go into text space) because Xt needs to | |
264 write to initialized data objects too. | |
265 */ | |
25728
342027dc53c2
(set_frame_size, EmacsFrameSetCharSize): Remove
Gerd Moellmann <gerd@gnu.org>
parents:
25461
diff
changeset
|
266 #if 0 |
5626 | 267 static Boolean first_frame_p = True; |
25728
342027dc53c2
(set_frame_size, EmacsFrameSetCharSize): Remove
Gerd Moellmann <gerd@gnu.org>
parents:
25461
diff
changeset
|
268 #endif |
5626 | 269 |
270 static void | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
271 set_frame_size (ew) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
272 EmacsFrame ew; |
5626 | 273 { |
274 /* The widget hierarchy is | |
275 | |
276 argv[0] emacsShell pane Frame-NAME | |
277 ApplicationShell EmacsShell Paned EmacsFrame | |
278 | |
279 We accept geometry specs in this order: | |
280 | |
281 *Frame-NAME.geometry | |
282 *EmacsFrame.geometry | |
283 Emacs.geometry | |
284 | |
285 Other possibilities for widget hierarchies might be | |
286 | |
287 argv[0] frame pane Frame-NAME | |
288 ApplicationShell EmacsShell Paned EmacsFrame | |
289 or | |
290 argv[0] Frame-NAME pane Frame-NAME | |
291 ApplicationShell EmacsShell Paned EmacsFrame | |
292 or | |
293 argv[0] Frame-NAME pane emacsTextPane | |
294 ApplicationShell EmacsFrame Paned EmacsTextPane | |
295 | |
296 With the current setup, the text-display-area is the part which is | |
297 an emacs "frame", since that's the only part managed by emacs proper | |
298 (the menubar and the parent of the menubar and all that sort of thing | |
299 are managed by lwlib.) | |
300 | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
44671
diff
changeset
|
301 The EmacsShell widget is simply a replacement for the Shell widget |
5626 | 302 which is able to deal with using an externally-supplied window instead |
303 of always creating its own. It is not actually emacs specific, and | |
304 should possibly have class "Shell" instead of "EmacsShell" to simplify | |
305 the resources. | |
306 | |
307 */ | |
308 | |
309 /* Hairily merged geometry */ | |
51206
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50099
diff
changeset
|
310 unsigned int w = FRAME_COLS (ew->emacs_frame.frame); |
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50099
diff
changeset
|
311 unsigned int h = FRAME_LINES (ew->emacs_frame.frame); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
44671
diff
changeset
|
312 |
5626 | 313 Widget wmshell = get_wm_shell ((Widget) ew); |
9708
33dcf295f62a
(set_frame_size): Set app_shell and wmshell the same.
Richard M. Stallman <rms@gnu.org>
parents:
9230
diff
changeset
|
314 /* Each Emacs shell is now independent and top-level. */ |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
44671
diff
changeset
|
315 |
5626 | 316 if (! XtIsSubclass (wmshell, shellWidgetClass)) abort (); |
317 | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
44671
diff
changeset
|
318 /* We don't need this for the moment. The geometry is computed in |
6464
7f93299356e2
(set_frame_size): Put #if 0 around a lot of useless code.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6331
diff
changeset
|
319 xfns.c. */ |
7f93299356e2
(set_frame_size): Put #if 0 around a lot of useless code.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6331
diff
changeset
|
320 #if 0 |
5626 | 321 /* If the EmacsFrame doesn't have a geometry but the shell does, |
322 treat that as the geometry of the frame. (Is this bogus? | |
323 I'm not sure.) */ | |
324 if (ew->emacs_frame.geometry == 0) | |
30575
e8bd810181fb
(set_frame_size, update_wm_hints, EmacsFrameSetValues):
Gerd Moellmann <gerd@gnu.org>
parents:
29863
diff
changeset
|
325 XtVaGetValues (wmshell, XtNgeometry, &ew->emacs_frame.geometry, NULL); |
5626 | 326 |
327 /* If the Shell is iconic, then the EmacsFrame is iconic. (Is | |
328 this bogus? I'm not sure.) */ | |
329 if (!ew->emacs_frame.iconic) | |
30575
e8bd810181fb
(set_frame_size, update_wm_hints, EmacsFrameSetValues):
Gerd Moellmann <gerd@gnu.org>
parents:
29863
diff
changeset
|
330 XtVaGetValues (wmshell, XtNiconic, &ew->emacs_frame.iconic, NULL); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
44671
diff
changeset
|
331 |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
44671
diff
changeset
|
332 |
5626 | 333 { |
334 char *geom = 0; | |
30575
e8bd810181fb
(set_frame_size, update_wm_hints, EmacsFrameSetValues):
Gerd Moellmann <gerd@gnu.org>
parents:
29863
diff
changeset
|
335 XtVaGetValues (app_shell, XtNgeometry, &geom, NULL); |
5626 | 336 if (geom) |
337 app_flags = XParseGeometry (geom, &app_x, &app_y, &app_w, &app_h); | |
338 } | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
44671
diff
changeset
|
339 |
5626 | 340 if (ew->emacs_frame.geometry) |
341 frame_flags = XParseGeometry (ew->emacs_frame.geometry, | |
342 &frame_x, &frame_y, | |
343 &frame_w, &frame_h); | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
44671
diff
changeset
|
344 |
5626 | 345 if (first_frame_p) |
346 { | |
347 /* If this is the first frame created: | |
348 ==================================== | |
349 | |
350 - Use the ApplicationShell's size/position, if specified. | |
351 (This is "Emacs.geometry", or the "-geometry" command line arg.) | |
352 - Else use the EmacsFrame's size/position. | |
353 (This is "*Frame-NAME.geometry") | |
354 | |
355 - If the AppShell is iconic, the frame should be iconic. | |
356 | |
357 AppShell comes first so that -geometry always applies to the first | |
358 frame created, even if there is an "every frame" entry in the | |
359 resource database. | |
360 */ | |
361 if (app_flags & (XValue | YValue)) | |
362 { | |
363 x = app_x; y = app_y; | |
364 flags |= (app_flags & (XValue | YValue | XNegative | YNegative)); | |
365 } | |
366 else if (frame_flags & (XValue | YValue)) | |
367 { | |
368 x = frame_x; y = frame_y; | |
369 flags |= (frame_flags & (XValue | YValue | XNegative | YNegative)); | |
370 } | |
371 | |
372 if (app_flags & (WidthValue | HeightValue)) | |
373 { | |
374 w = app_w; h = app_h; | |
375 flags |= (app_flags & (WidthValue | HeightValue)); | |
376 } | |
377 else if (frame_flags & (WidthValue | HeightValue)) | |
378 { | |
379 w = frame_w; h = frame_h; | |
380 flags |= (frame_flags & (WidthValue | HeightValue)); | |
381 } | |
382 | |
383 /* If the AppShell is iconic, then the EmacsFrame is iconic. */ | |
384 if (!ew->emacs_frame.iconic) | |
30575
e8bd810181fb
(set_frame_size, update_wm_hints, EmacsFrameSetValues):
Gerd Moellmann <gerd@gnu.org>
parents:
29863
diff
changeset
|
385 XtVaGetValues (app_shell, XtNiconic, &ew->emacs_frame.iconic, NULL); |
5626 | 386 |
387 first_frame_p = False; | |
388 } | |
389 else | |
390 { | |
391 /* If this is not the first frame created: | |
392 ======================================== | |
393 | |
394 - use the EmacsFrame's size/position if specified | |
395 - Otherwise, use the ApplicationShell's size, but not position. | |
396 | |
397 So that means that one can specify the position of the first frame | |
398 with "Emacs.geometry" or `-geometry'; but can only specify the | |
399 position of subsequent frames with "*Frame-NAME.geometry". | |
400 | |
401 AppShell comes second so that -geometry does not apply to subsequent | |
402 frames when there is an "every frame" entry in the resource db, | |
403 but does apply to the first frame. | |
404 */ | |
405 if (frame_flags & (XValue | YValue)) | |
406 { | |
407 x = frame_x; y = frame_y; | |
408 flags |= (frame_flags & (XValue | YValue | XNegative | YNegative)); | |
409 } | |
410 | |
411 if (frame_flags & (WidthValue | HeightValue)) | |
412 { | |
413 w = frame_w; h = frame_h; | |
414 flags |= (frame_flags & (WidthValue | HeightValue)); | |
415 } | |
416 else if (app_flags & (WidthValue | HeightValue)) | |
417 { | |
418 w = app_w; | |
419 h = app_h; | |
420 flags |= (app_flags & (WidthValue | HeightValue)); | |
421 } | |
422 } | |
6464
7f93299356e2
(set_frame_size): Put #if 0 around a lot of useless code.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6331
diff
changeset
|
423 #endif /* 0 */ |
5626 | 424 { |
51206
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50099
diff
changeset
|
425 struct frame *f = ew->emacs_frame.frame; |
5626 | 426 Dimension pixel_width, pixel_height; |
427 | |
24999
bd6d15dc5a10
(EmacsFrameSetCharSize): Take widget's border width
Gerd Moellmann <gerd@gnu.org>
parents:
21514
diff
changeset
|
428 /* Take into account the size of the scrollbar. Always use the |
bd6d15dc5a10
(EmacsFrameSetCharSize): Take widget's border width
Gerd Moellmann <gerd@gnu.org>
parents:
21514
diff
changeset
|
429 number of columns occupied by the scroll bar here otherwise we |
bd6d15dc5a10
(EmacsFrameSetCharSize): Take widget's border width
Gerd Moellmann <gerd@gnu.org>
parents:
21514
diff
changeset
|
430 might end up with a frame width that is not a multiple of the |
bd6d15dc5a10
(EmacsFrameSetCharSize): Take widget's border width
Gerd Moellmann <gerd@gnu.org>
parents:
21514
diff
changeset
|
431 frame's character width which is bad for vertically split |
bd6d15dc5a10
(EmacsFrameSetCharSize): Take widget's border width
Gerd Moellmann <gerd@gnu.org>
parents:
21514
diff
changeset
|
432 windows. */ |
51206
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50099
diff
changeset
|
433 f->scroll_bar_actual_width |
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50099
diff
changeset
|
434 = FRAME_SCROLL_BAR_COLS (f) * FRAME_COLUMN_WIDTH (f); |
5626 | 435 |
51206
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50099
diff
changeset
|
436 compute_fringe_widths (f, 0); |
24999
bd6d15dc5a10
(EmacsFrameSetCharSize): Take widget's border width
Gerd Moellmann <gerd@gnu.org>
parents:
21514
diff
changeset
|
437 |
44263
13c043393136
(set_frame_size): Don't call change_frame_size.
Richard M. Stallman <rms@gnu.org>
parents:
41723
diff
changeset
|
438 #if 0 /* This can run Lisp code, and it is dangerous to give |
13c043393136
(set_frame_size): Don't call change_frame_size.
Richard M. Stallman <rms@gnu.org>
parents:
41723
diff
changeset
|
439 out the frame to Lisp code before it officially exists. |
13c043393136
(set_frame_size): Don't call change_frame_size.
Richard M. Stallman <rms@gnu.org>
parents:
41723
diff
changeset
|
440 This is handled in Fx_create_frame so not needed here. */ |
51206
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50099
diff
changeset
|
441 change_frame_size (f, h, w, 1, 0, 0); |
44263
13c043393136
(set_frame_size): Don't call change_frame_size.
Richard M. Stallman <rms@gnu.org>
parents:
41723
diff
changeset
|
442 #endif |
5626 | 443 char_to_pixel_size (ew, w, h, &pixel_width, &pixel_height); |
444 ew->core.width = pixel_width; | |
445 ew->core.height = pixel_height; | |
446 | |
6789
67bb36e8e602
(EmacsFrameSetCharSize): Do not attempt to preserve the window position.
Richard M. Stallman <rms@gnu.org>
parents:
6766
diff
changeset
|
447 #if 0 /* xfns.c takes care of this now. */ |
5626 | 448 /* If a position was specified, assign it to the shell widget. |
449 (Else WM won't do anything with it.) | |
450 */ | |
451 if (flags & (XValue | YValue)) | |
452 { | |
453 /* the tricky things with the sign is to make sure that | |
454 -0 is printed -0. */ | |
455 int len; | |
456 char *tem; | |
457 sprintf (shell_position, "=%c%d%c%d", | |
458 flags & XNegative ? '-' : '+', x < 0 ? -x : x, | |
459 flags & YNegative ? '-' : '+', y < 0 ? -y : y); | |
460 len = strlen (shell_position) + 1; | |
461 tem = (char *) xmalloc (len); | |
462 strncpy (tem, shell_position, len); | |
30575
e8bd810181fb
(set_frame_size, update_wm_hints, EmacsFrameSetValues):
Gerd Moellmann <gerd@gnu.org>
parents:
29863
diff
changeset
|
463 XtVaSetValues (wmshell, XtNgeometry, tem, NULL); |
5626 | 464 } |
465 else if (flags & (WidthValue | HeightValue)) | |
466 { | |
467 int len; | |
468 char *tem; | |
469 sprintf (shell_position, "=%dx%d", pixel_width, pixel_height); | |
470 len = strlen (shell_position) + 1; | |
471 tem = (char *) xmalloc (len); | |
472 strncpy (tem, shell_position, len); | |
30575
e8bd810181fb
(set_frame_size, update_wm_hints, EmacsFrameSetValues):
Gerd Moellmann <gerd@gnu.org>
parents:
29863
diff
changeset
|
473 XtVaSetValues (wmshell, XtNgeometry, tem, NULL); |
5626 | 474 } |
475 | |
476 /* If the geometry spec we're using has W/H components, mark the size | |
477 in the WM_SIZE_HINTS as user specified. */ | |
478 if (flags & (WidthValue | HeightValue)) | |
479 mark_shell_size_user_specified (wmshell); | |
480 | |
481 /* Also assign the iconic status of the frame to the Shell, so that | |
482 the WM sees it. */ | |
30575
e8bd810181fb
(set_frame_size, update_wm_hints, EmacsFrameSetValues):
Gerd Moellmann <gerd@gnu.org>
parents:
29863
diff
changeset
|
483 XtVaSetValues (wmshell, XtNiconic, ew->emacs_frame.iconic, NULL); |
6464
7f93299356e2
(set_frame_size): Put #if 0 around a lot of useless code.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6331
diff
changeset
|
484 #endif /* 0 */ |
5626 | 485 } |
486 } | |
487 | |
12188
06ef0aabc2bb
(EmacsFrameSetCharSize): Manually alter the height
Karl Heuer <kwzh@gnu.org>
parents:
12052
diff
changeset
|
488 /* Nonzero tells update_wm_hints not to do anything |
06ef0aabc2bb
(EmacsFrameSetCharSize): Manually alter the height
Karl Heuer <kwzh@gnu.org>
parents:
12052
diff
changeset
|
489 (the caller should call update_wm_hints explicitly later.) */ |
06ef0aabc2bb
(EmacsFrameSetCharSize): Manually alter the height
Karl Heuer <kwzh@gnu.org>
parents:
12052
diff
changeset
|
490 int update_hints_inhibit; |
5626 | 491 |
492 static void | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
493 update_wm_hints (ew) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
494 EmacsFrame ew; |
5626 | 495 { |
496 Widget wmshell = get_wm_shell ((Widget)ew); | |
497 int cw; | |
498 int ch; | |
499 Dimension rounded_width; | |
500 Dimension rounded_height; | |
501 int char_width; | |
502 int char_height; | |
503 int base_width; | |
504 int base_height; | |
505 int min_rows = 0, min_cols = 0; | |
506 | |
12188
06ef0aabc2bb
(EmacsFrameSetCharSize): Manually alter the height
Karl Heuer <kwzh@gnu.org>
parents:
12052
diff
changeset
|
507 if (update_hints_inhibit) |
06ef0aabc2bb
(EmacsFrameSetCharSize): Manually alter the height
Karl Heuer <kwzh@gnu.org>
parents:
12052
diff
changeset
|
508 return; |
06ef0aabc2bb
(EmacsFrameSetCharSize): Manually alter the height
Karl Heuer <kwzh@gnu.org>
parents:
12052
diff
changeset
|
509 |
06ef0aabc2bb
(EmacsFrameSetCharSize): Manually alter the height
Karl Heuer <kwzh@gnu.org>
parents:
12052
diff
changeset
|
510 #if 0 |
5626 | 511 check_frame_size (ew->emacs_frame.frame, &min_rows, &min_cols); |
12188
06ef0aabc2bb
(EmacsFrameSetCharSize): Manually alter the height
Karl Heuer <kwzh@gnu.org>
parents:
12052
diff
changeset
|
512 #endif |
5626 | 513 |
514 pixel_to_char_size (ew, ew->core.width, ew->core.height, | |
515 &char_width, &char_height); | |
516 char_to_pixel_size (ew, char_width, char_height, | |
517 &rounded_width, &rounded_height); | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
44671
diff
changeset
|
518 get_default_char_pixel_size (ew, &cw, &ch); |
5626 | 519 |
520 base_width = (wmshell->core.width - ew->core.width | |
521 + (rounded_width - (char_width * cw))); | |
522 base_height = (wmshell->core.height - ew->core.height | |
523 + (rounded_height - (char_height * ch))); | |
524 | |
525 /* This is kind of sleazy, but I can't see how else to tell it to | |
526 make it mark the WM_SIZE_HINTS size as user specified. | |
527 */ | |
528 /* ((WMShellWidget) wmshell)->wm.size_hints.flags |= USSize;*/ | |
529 | |
530 XtVaSetValues (wmshell, | |
38182
fd45b8013008
(EmacsFrameSetCharSize): Set XtNwaitForWm depending
Gerd Moellmann <gerd@gnu.org>
parents:
37699
diff
changeset
|
531 XtNbaseWidth, (XtArgVal) base_width, |
fd45b8013008
(EmacsFrameSetCharSize): Set XtNwaitForWm depending
Gerd Moellmann <gerd@gnu.org>
parents:
37699
diff
changeset
|
532 XtNbaseHeight, (XtArgVal) base_height, |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
44671
diff
changeset
|
533 XtNwidthInc, (XtArgVal) cw, |
38182
fd45b8013008
(EmacsFrameSetCharSize): Set XtNwaitForWm depending
Gerd Moellmann <gerd@gnu.org>
parents:
37699
diff
changeset
|
534 XtNheightInc, (XtArgVal) ch, |
fd45b8013008
(EmacsFrameSetCharSize): Set XtNwaitForWm depending
Gerd Moellmann <gerd@gnu.org>
parents:
37699
diff
changeset
|
535 XtNminWidth, (XtArgVal) (base_width + min_cols * cw), |
fd45b8013008
(EmacsFrameSetCharSize): Set XtNwaitForWm depending
Gerd Moellmann <gerd@gnu.org>
parents:
37699
diff
changeset
|
536 XtNminHeight, (XtArgVal) (base_height + min_rows * ch), |
30575
e8bd810181fb
(set_frame_size, update_wm_hints, EmacsFrameSetValues):
Gerd Moellmann <gerd@gnu.org>
parents:
29863
diff
changeset
|
537 NULL); |
5626 | 538 } |
539 | |
25728
342027dc53c2
(set_frame_size, EmacsFrameSetCharSize): Remove
Gerd Moellmann <gerd@gnu.org>
parents:
25461
diff
changeset
|
540 #if 0 |
342027dc53c2
(set_frame_size, EmacsFrameSetCharSize): Remove
Gerd Moellmann <gerd@gnu.org>
parents:
25461
diff
changeset
|
541 |
5626 | 542 static void |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
543 create_frame_gcs (ew) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
544 EmacsFrame ew; |
5626 | 545 { |
11884
13f0227c7c56
(create_frame_gcs): Cast args of XCreateGC.
Karl Heuer <kwzh@gnu.org>
parents:
9708
diff
changeset
|
546 struct frame *s = ew->emacs_frame.frame; |
5626 | 547 |
12671 | 548 s->output_data.x->normal_gc |
11895
81f2806578ed
(create_frame_gcs, setup_frame_gcs): Reformat long statements.
Karl Heuer <kwzh@gnu.org>
parents:
11884
diff
changeset
|
549 = XCreateGC (XtDisplay (ew), RootWindowOfScreen (XtScreen (ew)), |
81f2806578ed
(create_frame_gcs, setup_frame_gcs): Reformat long statements.
Karl Heuer <kwzh@gnu.org>
parents:
11884
diff
changeset
|
550 (unsigned long)0, (XGCValues *)0); |
12671 | 551 s->output_data.x->reverse_gc |
11895
81f2806578ed
(create_frame_gcs, setup_frame_gcs): Reformat long statements.
Karl Heuer <kwzh@gnu.org>
parents:
11884
diff
changeset
|
552 = XCreateGC (XtDisplay (ew), RootWindowOfScreen (XtScreen (ew)), |
81f2806578ed
(create_frame_gcs, setup_frame_gcs): Reformat long statements.
Karl Heuer <kwzh@gnu.org>
parents:
11884
diff
changeset
|
553 (unsigned long)0, (XGCValues *)0); |
12671 | 554 s->output_data.x->cursor_gc |
11895
81f2806578ed
(create_frame_gcs, setup_frame_gcs): Reformat long statements.
Karl Heuer <kwzh@gnu.org>
parents:
11884
diff
changeset
|
555 = XCreateGC (XtDisplay (ew), RootWindowOfScreen (XtScreen (ew)), |
81f2806578ed
(create_frame_gcs, setup_frame_gcs): Reformat long statements.
Karl Heuer <kwzh@gnu.org>
parents:
11884
diff
changeset
|
556 (unsigned long)0, (XGCValues *)0); |
24999
bd6d15dc5a10
(EmacsFrameSetCharSize): Take widget's border width
Gerd Moellmann <gerd@gnu.org>
parents:
21514
diff
changeset
|
557 s->output_data.x->black_relief.gc = 0; |
bd6d15dc5a10
(EmacsFrameSetCharSize): Take widget's border width
Gerd Moellmann <gerd@gnu.org>
parents:
21514
diff
changeset
|
558 s->output_data.x->white_relief.gc = 0; |
5626 | 559 } |
560 | |
25728
342027dc53c2
(set_frame_size, EmacsFrameSetCharSize): Remove
Gerd Moellmann <gerd@gnu.org>
parents:
25461
diff
changeset
|
561 #endif /* 0 */ |
342027dc53c2
(set_frame_size, EmacsFrameSetCharSize): Remove
Gerd Moellmann <gerd@gnu.org>
parents:
25461
diff
changeset
|
562 |
7557
889a8cd345b2
(setup_frame_gcs): Move cursor_bits variable out of
Richard M. Stallman <rms@gnu.org>
parents:
6789
diff
changeset
|
563 static char setup_frame_cursor_bits[] = |
889a8cd345b2
(setup_frame_gcs): Move cursor_bits variable out of
Richard M. Stallman <rms@gnu.org>
parents:
6789
diff
changeset
|
564 { |
889a8cd345b2
(setup_frame_gcs): Move cursor_bits variable out of
Richard M. Stallman <rms@gnu.org>
parents:
6789
diff
changeset
|
565 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
889a8cd345b2
(setup_frame_gcs): Move cursor_bits variable out of
Richard M. Stallman <rms@gnu.org>
parents:
6789
diff
changeset
|
566 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
889a8cd345b2
(setup_frame_gcs): Move cursor_bits variable out of
Richard M. Stallman <rms@gnu.org>
parents:
6789
diff
changeset
|
567 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
889a8cd345b2
(setup_frame_gcs): Move cursor_bits variable out of
Richard M. Stallman <rms@gnu.org>
parents:
6789
diff
changeset
|
568 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 |
889a8cd345b2
(setup_frame_gcs): Move cursor_bits variable out of
Richard M. Stallman <rms@gnu.org>
parents:
6789
diff
changeset
|
569 }; |
889a8cd345b2
(setup_frame_gcs): Move cursor_bits variable out of
Richard M. Stallman <rms@gnu.org>
parents:
6789
diff
changeset
|
570 |
5626 | 571 static void |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
572 setup_frame_gcs (ew) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
573 EmacsFrame ew; |
5626 | 574 { |
575 XGCValues gc_values; | |
576 struct frame* s = ew->emacs_frame.frame; | |
577 Pixmap blank_stipple, blank_tile; | |
97731
90335c3336b0
Include character.h and font.h for XSETFONT.
Chong Yidong <cyd@stupidchicken.com>
parents:
94963
diff
changeset
|
578 unsigned long valuemask = (GCForeground | GCBackground | GCGraphicsExposures |
90335c3336b0
Include character.h and font.h for XSETFONT.
Chong Yidong <cyd@stupidchicken.com>
parents:
94963
diff
changeset
|
579 | GCStipple | GCTile); |
90335c3336b0
Include character.h and font.h for XSETFONT.
Chong Yidong <cyd@stupidchicken.com>
parents:
94963
diff
changeset
|
580 Lisp_Object font; |
90335c3336b0
Include character.h and font.h for XSETFONT.
Chong Yidong <cyd@stupidchicken.com>
parents:
94963
diff
changeset
|
581 |
90335c3336b0
Include character.h and font.h for XSETFONT.
Chong Yidong <cyd@stupidchicken.com>
parents:
94963
diff
changeset
|
582 XSETFONT (font, ew->emacs_frame.font); |
90335c3336b0
Include character.h and font.h for XSETFONT.
Chong Yidong <cyd@stupidchicken.com>
parents:
94963
diff
changeset
|
583 font = Ffont_xlfd_name (font, Qnil); |
90335c3336b0
Include character.h and font.h for XSETFONT.
Chong Yidong <cyd@stupidchicken.com>
parents:
94963
diff
changeset
|
584 if (STRINGP (font)) |
90335c3336b0
Include character.h and font.h for XSETFONT.
Chong Yidong <cyd@stupidchicken.com>
parents:
94963
diff
changeset
|
585 { |
90335c3336b0
Include character.h and font.h for XSETFONT.
Chong Yidong <cyd@stupidchicken.com>
parents:
94963
diff
changeset
|
586 XFontStruct *xfont = XLoadQueryFont (FRAME_X_DISPLAY_INFO (s)->display, |
90335c3336b0
Include character.h and font.h for XSETFONT.
Chong Yidong <cyd@stupidchicken.com>
parents:
94963
diff
changeset
|
587 SDATA (font)); |
90335c3336b0
Include character.h and font.h for XSETFONT.
Chong Yidong <cyd@stupidchicken.com>
parents:
94963
diff
changeset
|
588 if (xfont) |
90335c3336b0
Include character.h and font.h for XSETFONT.
Chong Yidong <cyd@stupidchicken.com>
parents:
94963
diff
changeset
|
589 { |
90335c3336b0
Include character.h and font.h for XSETFONT.
Chong Yidong <cyd@stupidchicken.com>
parents:
94963
diff
changeset
|
590 gc_values.font = xfont->fid; |
90335c3336b0
Include character.h and font.h for XSETFONT.
Chong Yidong <cyd@stupidchicken.com>
parents:
94963
diff
changeset
|
591 valuemask |= GCFont; |
90335c3336b0
Include character.h and font.h for XSETFONT.
Chong Yidong <cyd@stupidchicken.com>
parents:
94963
diff
changeset
|
592 } |
90335c3336b0
Include character.h and font.h for XSETFONT.
Chong Yidong <cyd@stupidchicken.com>
parents:
94963
diff
changeset
|
593 } |
5626 | 594 |
595 /* We have to initialize all of our GCs to have a stipple/tile, otherwise | |
596 XGetGCValues returns uninitialized data when we query the stipple | |
597 (instead of None or something sensible) and it makes things hard. | |
598 | |
599 This should be fixed for real by not querying the GCs but instead having | |
600 some GC-based cache instead of the current face-based cache which doesn't | |
601 effectively cache all of the GC settings we need to use. | |
602 */ | |
603 | |
11895
81f2806578ed
(create_frame_gcs, setup_frame_gcs): Reformat long statements.
Karl Heuer <kwzh@gnu.org>
parents:
11884
diff
changeset
|
604 blank_stipple |
81f2806578ed
(create_frame_gcs, setup_frame_gcs): Reformat long statements.
Karl Heuer <kwzh@gnu.org>
parents:
11884
diff
changeset
|
605 = XCreateBitmapFromData (XtDisplay (ew), |
81f2806578ed
(create_frame_gcs, setup_frame_gcs): Reformat long statements.
Karl Heuer <kwzh@gnu.org>
parents:
11884
diff
changeset
|
606 RootWindowOfScreen (XtScreen (ew)), |
81f2806578ed
(create_frame_gcs, setup_frame_gcs): Reformat long statements.
Karl Heuer <kwzh@gnu.org>
parents:
11884
diff
changeset
|
607 setup_frame_cursor_bits, 2, 2); |
5626 | 608 |
609 /* use fg = 0, bg = 1 below, but it's irrelevant since this pixmap should | |
610 never actually get used as a background tile! | |
611 */ | |
11895
81f2806578ed
(create_frame_gcs, setup_frame_gcs): Reformat long statements.
Karl Heuer <kwzh@gnu.org>
parents:
11884
diff
changeset
|
612 blank_tile |
81f2806578ed
(create_frame_gcs, setup_frame_gcs): Reformat long statements.
Karl Heuer <kwzh@gnu.org>
parents:
11884
diff
changeset
|
613 = XCreatePixmapFromBitmapData (XtDisplay(ew), |
81f2806578ed
(create_frame_gcs, setup_frame_gcs): Reformat long statements.
Karl Heuer <kwzh@gnu.org>
parents:
11884
diff
changeset
|
614 RootWindowOfScreen (XtScreen (ew)), |
81f2806578ed
(create_frame_gcs, setup_frame_gcs): Reformat long statements.
Karl Heuer <kwzh@gnu.org>
parents:
11884
diff
changeset
|
615 setup_frame_cursor_bits, 2, 2, |
81f2806578ed
(create_frame_gcs, setup_frame_gcs): Reformat long statements.
Karl Heuer <kwzh@gnu.org>
parents:
11884
diff
changeset
|
616 (unsigned long)0, (unsigned long)1, |
81f2806578ed
(create_frame_gcs, setup_frame_gcs): Reformat long statements.
Karl Heuer <kwzh@gnu.org>
parents:
11884
diff
changeset
|
617 ew->core.depth); |
5626 | 618 |
619 /* Normal video */ | |
620 gc_values.foreground = ew->emacs_frame.foreground_pixel; | |
621 gc_values.background = ew->core.background_pixel; | |
622 gc_values.graphics_exposures = False; | |
623 gc_values.stipple = blank_stipple; | |
624 gc_values.tile = blank_tile; | |
12671 | 625 XChangeGC (XtDisplay (ew), s->output_data.x->normal_gc, |
97731
90335c3336b0
Include character.h and font.h for XSETFONT.
Chong Yidong <cyd@stupidchicken.com>
parents:
94963
diff
changeset
|
626 valuemask, &gc_values); |
5626 | 627 |
628 /* Reverse video style. */ | |
629 gc_values.foreground = ew->core.background_pixel; | |
630 gc_values.background = ew->emacs_frame.foreground_pixel; | |
631 gc_values.graphics_exposures = False; | |
632 gc_values.stipple = blank_stipple; | |
633 gc_values.tile = blank_tile; | |
12671 | 634 XChangeGC (XtDisplay (ew), s->output_data.x->reverse_gc, |
97731
90335c3336b0
Include character.h and font.h for XSETFONT.
Chong Yidong <cyd@stupidchicken.com>
parents:
94963
diff
changeset
|
635 valuemask, &gc_values); |
5626 | 636 |
637 /* Cursor has to have an empty stipple. */ | |
638 gc_values.foreground = ew->core.background_pixel; | |
639 gc_values.background = ew->emacs_frame.cursor_color; | |
640 gc_values.graphics_exposures = False; | |
641 gc_values.tile = blank_tile; | |
11895
81f2806578ed
(create_frame_gcs, setup_frame_gcs): Reformat long statements.
Karl Heuer <kwzh@gnu.org>
parents:
11884
diff
changeset
|
642 gc_values.stipple |
81f2806578ed
(create_frame_gcs, setup_frame_gcs): Reformat long statements.
Karl Heuer <kwzh@gnu.org>
parents:
11884
diff
changeset
|
643 = XCreateBitmapFromData (XtDisplay (ew), |
81f2806578ed
(create_frame_gcs, setup_frame_gcs): Reformat long statements.
Karl Heuer <kwzh@gnu.org>
parents:
11884
diff
changeset
|
644 RootWindowOfScreen (XtScreen (ew)), |
81f2806578ed
(create_frame_gcs, setup_frame_gcs): Reformat long statements.
Karl Heuer <kwzh@gnu.org>
parents:
11884
diff
changeset
|
645 setup_frame_cursor_bits, 16, 16); |
12671 | 646 XChangeGC (XtDisplay (ew), s->output_data.x->cursor_gc, |
97731
90335c3336b0
Include character.h and font.h for XSETFONT.
Chong Yidong <cyd@stupidchicken.com>
parents:
94963
diff
changeset
|
647 valuemask, &gc_values); |
5626 | 648 } |
649 | |
650 static void | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
651 update_various_frame_slots (ew) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
652 EmacsFrame ew; |
5626 | 653 { |
51206
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50099
diff
changeset
|
654 struct frame *f = ew->emacs_frame.frame; |
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50099
diff
changeset
|
655 struct x_output *x = f->output_data.x; |
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50099
diff
changeset
|
656 FRAME_PIXEL_HEIGHT (f) = ew->core.height + x->menubar_height; |
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50099
diff
changeset
|
657 FRAME_PIXEL_WIDTH (f) = ew->core.width; |
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50099
diff
changeset
|
658 f->internal_border_width = ew->emacs_frame.internal_border_width; |
5626 | 659 |
660 } | |
661 | |
662 static void | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
663 update_from_various_frame_slots (ew) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
664 EmacsFrame ew; |
5626 | 665 { |
51206
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50099
diff
changeset
|
666 struct frame *f = ew->emacs_frame.frame; |
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50099
diff
changeset
|
667 struct x_output *x = f->output_data.x; |
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50099
diff
changeset
|
668 ew->core.height = FRAME_PIXEL_HEIGHT (f) - x->menubar_height; |
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50099
diff
changeset
|
669 ew->core.width = FRAME_PIXEL_WIDTH (f); |
83504
7aa43f830ce4
Fix tooltip border color.
Karoly Lorentey <lorentey@elte.hu>
parents:
68651
diff
changeset
|
670 ew->core.background_pixel = FRAME_BACKGROUND_PIXEL (f); |
51206
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50099
diff
changeset
|
671 ew->emacs_frame.internal_border_width = f->internal_border_width; |
5626 | 672 ew->emacs_frame.font = x->font; |
83504
7aa43f830ce4
Fix tooltip border color.
Karoly Lorentey <lorentey@elte.hu>
parents:
68651
diff
changeset
|
673 ew->emacs_frame.foreground_pixel = FRAME_FOREGROUND_PIXEL (f); |
5626 | 674 ew->emacs_frame.cursor_color = x->cursor_pixel; |
675 ew->core.border_pixel = x->border_pixel; | |
676 } | |
677 | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
44671
diff
changeset
|
678 static void |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
679 EmacsFrameInitialize (request, new, dum1, dum2) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
680 Widget request; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
681 Widget new; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
682 ArgList dum1; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
683 Cardinal *dum2; |
5626 | 684 { |
685 EmacsFrame ew = (EmacsFrame)new; | |
686 | |
687 if (!ew->emacs_frame.frame) | |
688 { | |
689 fprintf (stderr, | |
690 "can't create an emacs frame widget without a frame\n"); | |
691 exit (1); | |
692 } | |
693 | |
694 update_from_various_frame_slots (ew); | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
44671
diff
changeset
|
695 set_frame_size (ew); |
5626 | 696 } |
697 | |
698 | |
699 static void | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
700 EmacsFrameRealize (widget, mask, attrs) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
701 Widget widget; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
702 XtValueMask *mask; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
703 XSetWindowAttributes *attrs; |
5626 | 704 { |
705 EmacsFrame ew = (EmacsFrame)widget; | |
706 | |
29861
09d316feea21
(EmacsFrameRealize): Remove SubstructureRedirectMask.
Gerd Moellmann <gerd@gnu.org>
parents:
27342
diff
changeset
|
707 /* This used to contain SubstructureRedirectMask, but this turns out |
09d316feea21
(EmacsFrameRealize): Remove SubstructureRedirectMask.
Gerd Moellmann <gerd@gnu.org>
parents:
27342
diff
changeset
|
708 to be a problem with XIM on Solaris, and events from that mask |
29863
bd4f71c0f33b
(EmacsFrameRealize): Fix typo.
Gerd Moellmann <gerd@gnu.org>
parents:
29861
diff
changeset
|
709 don't seem to be used. Let's check that. */ |
29861
09d316feea21
(EmacsFrameRealize): Remove SubstructureRedirectMask.
Gerd Moellmann <gerd@gnu.org>
parents:
27342
diff
changeset
|
710 attrs->event_mask = (STANDARD_EVENT_SET |
09d316feea21
(EmacsFrameRealize): Remove SubstructureRedirectMask.
Gerd Moellmann <gerd@gnu.org>
parents:
27342
diff
changeset
|
711 | PropertyChangeMask |
09d316feea21
(EmacsFrameRealize): Remove SubstructureRedirectMask.
Gerd Moellmann <gerd@gnu.org>
parents:
27342
diff
changeset
|
712 | SubstructureNotifyMask); |
5626 | 713 *mask |= CWEventMask; |
714 XtCreateWindow (widget, InputOutput, (Visual *)CopyFromParent, *mask, | |
715 attrs); | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
44671
diff
changeset
|
716 update_wm_hints (ew); |
5626 | 717 } |
718 | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
719 extern void free_frame_faces (/* struct frame * */); |
5626 | 720 |
721 static void | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
722 EmacsFrameDestroy (widget) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
723 Widget widget; |
5626 | 724 { |
725 EmacsFrame ew = (EmacsFrame) widget; | |
726 struct frame* s = ew->emacs_frame.frame; | |
727 | |
728 if (! s) abort (); | |
12671 | 729 if (! s->output_data.x) abort (); |
5626 | 730 |
12052
942ad27b8e10
(EmacsFrameDestroy): Block and unblock input.
Karl Heuer <kwzh@gnu.org>
parents:
11895
diff
changeset
|
731 BLOCK_INPUT; |
34319
d446a08a996e
(EmacsFrameDestroy): Call x_free_gcs instead of
Gerd Moellmann <gerd@gnu.org>
parents:
30575
diff
changeset
|
732 x_free_gcs (s); |
24999
bd6d15dc5a10
(EmacsFrameSetCharSize): Take widget's border width
Gerd Moellmann <gerd@gnu.org>
parents:
21514
diff
changeset
|
733 if (s->output_data.x->white_relief.gc) |
bd6d15dc5a10
(EmacsFrameSetCharSize): Take widget's border width
Gerd Moellmann <gerd@gnu.org>
parents:
21514
diff
changeset
|
734 XFreeGC (XtDisplay (widget), s->output_data.x->white_relief.gc); |
bd6d15dc5a10
(EmacsFrameSetCharSize): Take widget's border width
Gerd Moellmann <gerd@gnu.org>
parents:
21514
diff
changeset
|
735 if (s->output_data.x->black_relief.gc) |
bd6d15dc5a10
(EmacsFrameSetCharSize): Take widget's border width
Gerd Moellmann <gerd@gnu.org>
parents:
21514
diff
changeset
|
736 XFreeGC (XtDisplay (widget), s->output_data.x->black_relief.gc); |
12052
942ad27b8e10
(EmacsFrameDestroy): Block and unblock input.
Karl Heuer <kwzh@gnu.org>
parents:
11895
diff
changeset
|
737 UNBLOCK_INPUT; |
5626 | 738 } |
739 | |
740 void | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
741 EmacsFrameResize (widget) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
742 Widget widget; |
5626 | 743 { |
744 EmacsFrame ew = (EmacsFrame)widget; | |
745 struct frame *f = ew->emacs_frame.frame; | |
746 int columns; | |
747 int rows; | |
748 | |
749 pixel_to_char_size (ew, ew->core.width, ew->core.height, &columns, &rows); | |
25356
5db69f7aadca
Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents:
25151
diff
changeset
|
750 change_frame_size (f, rows, columns, 0, 1, 0); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
44671
diff
changeset
|
751 update_wm_hints (ew); |
5626 | 752 update_various_frame_slots (ew); |
16492
2ddccd78c6b0
(EmacsFrameResize): Use cancel_mouse_face.
Richard M. Stallman <rms@gnu.org>
parents:
16350
diff
changeset
|
753 |
2ddccd78c6b0
(EmacsFrameResize): Use cancel_mouse_face.
Richard M. Stallman <rms@gnu.org>
parents:
16350
diff
changeset
|
754 cancel_mouse_face (f); |
5626 | 755 } |
756 | |
757 static Boolean | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
758 EmacsFrameSetValues (cur_widget, req_widget, new_widget, dum1, dum2) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
759 Widget cur_widget; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
760 Widget req_widget; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
761 Widget new_widget; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
762 ArgList dum1; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
763 Cardinal *dum2; |
5626 | 764 { |
765 EmacsFrame cur = (EmacsFrame)cur_widget; | |
766 EmacsFrame new = (EmacsFrame)new_widget; | |
767 | |
768 Boolean needs_a_refresh = False; | |
769 Boolean has_to_recompute_size; | |
770 Boolean has_to_recompute_gcs; | |
771 Boolean has_to_update_hints; | |
772 | |
773 int char_width, char_height; | |
774 Dimension pixel_width; | |
775 Dimension pixel_height; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
44671
diff
changeset
|
776 |
5626 | 777 has_to_recompute_gcs = (cur->emacs_frame.font != new->emacs_frame.font |
778 || (cur->emacs_frame.foreground_pixel | |
779 != new->emacs_frame.foreground_pixel) | |
780 || (cur->core.background_pixel | |
781 != new->core.background_pixel) | |
782 ); | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
44671
diff
changeset
|
783 |
5626 | 784 has_to_recompute_size = (cur->emacs_frame.font != new->emacs_frame.font |
785 && cur->core.width == new->core.width | |
786 && cur->core.height == new->core.height); | |
787 | |
788 has_to_update_hints = (cur->emacs_frame.font != new->emacs_frame.font); | |
789 | |
790 if (has_to_recompute_gcs) | |
791 { | |
792 setup_frame_gcs (new); | |
793 needs_a_refresh = True; | |
794 } | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
44671
diff
changeset
|
795 |
5626 | 796 if (has_to_recompute_size) |
797 { | |
798 pixel_width = new->core.width; | |
799 pixel_height = new->core.height; | |
800 pixel_to_char_size (new, pixel_width, pixel_height, &char_width, | |
801 &char_height); | |
802 char_to_pixel_size (new, char_width, char_height, &pixel_width, | |
803 &pixel_height); | |
804 new->core.width = pixel_width; | |
805 new->core.height = pixel_height; | |
806 | |
807 change_frame_size (new->emacs_frame.frame, char_height, char_width, | |
25356
5db69f7aadca
Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents:
25151
diff
changeset
|
808 1, 0, 0); |
5626 | 809 needs_a_refresh = True; |
810 } | |
811 | |
812 if (has_to_update_hints) | |
813 update_wm_hints (new); | |
814 | |
815 update_various_frame_slots (new); | |
816 | |
817 /* #### This doesn't work, I haven't been able to find ANY kludge that | |
818 will let (x-create-frame '((iconic . t))) work. It seems that changes | |
819 to wm_shell's iconic slot have no effect after it has been realized, | |
17166 | 820 and calling XIconifyWindow doesn't work either (even though the window |
5626 | 821 has been created.) Perhaps there is some property we could smash |
14620 | 822 directly, but I'm sick of this for now. |
5626 | 823 */ |
824 if (cur->emacs_frame.iconic != new->emacs_frame.iconic) | |
825 { | |
826 Widget wmshell = get_wm_shell ((Widget) cur); | |
38182
fd45b8013008
(EmacsFrameSetCharSize): Set XtNwaitForWm depending
Gerd Moellmann <gerd@gnu.org>
parents:
37699
diff
changeset
|
827 XtVaSetValues (wmshell, XtNiconic, |
fd45b8013008
(EmacsFrameSetCharSize): Set XtNwaitForWm depending
Gerd Moellmann <gerd@gnu.org>
parents:
37699
diff
changeset
|
828 (XtArgVal) new->emacs_frame.iconic, NULL); |
5626 | 829 } |
830 | |
831 return needs_a_refresh; | |
832 } | |
833 | |
834 static XtGeometryResult | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
835 EmacsFrameQueryGeometry (widget, request, result) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
836 Widget widget; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
837 XtWidgetGeometry* request; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
838 XtWidgetGeometry* result; |
5626 | 839 { |
840 EmacsFrame ew = (EmacsFrame)widget; | |
841 | |
842 int mask = request->request_mode; | |
843 Dimension ok_width, ok_height; | |
844 | |
845 if (mask & (CWWidth | CWHeight)) | |
846 { | |
847 round_size_to_char (ew, | |
848 (mask & CWWidth) ? request->width : ew->core.width, | |
849 ((mask & CWHeight) ? request->height | |
850 : ew->core.height), | |
851 &ok_width, &ok_height); | |
852 if ((mask & CWWidth) && (ok_width != request->width)) | |
853 { | |
854 result->request_mode |= CWWidth; | |
855 result->width = ok_width; | |
856 } | |
857 if ((mask & CWHeight) && (ok_height != request->height)) | |
858 { | |
859 result->request_mode |= CWHeight; | |
860 result->height = ok_height; | |
861 } | |
862 } | |
863 return result->request_mode ? XtGeometryAlmost : XtGeometryYes; | |
864 } | |
865 | |
866 /* Special entrypoints */ | |
867 void | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
868 EmacsFrameSetCharSize (widget, columns, rows) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
869 Widget widget; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
870 int columns; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5706
diff
changeset
|
871 int rows; |
5626 | 872 { |
873 EmacsFrame ew = (EmacsFrame) widget; | |
25728
342027dc53c2
(set_frame_size, EmacsFrameSetCharSize): Remove
Gerd Moellmann <gerd@gnu.org>
parents:
25461
diff
changeset
|
874 Dimension pixel_width, pixel_height; |
6087
00fbbb620f36
(EmacsFrameSetCharSize): Call check_frame_size and update
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5994
diff
changeset
|
875 struct frame *f = ew->emacs_frame.frame; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
44671
diff
changeset
|
876 |
5626 | 877 if (columns < 3) columns = 3; /* no way buddy */ |
878 | |
6087
00fbbb620f36
(EmacsFrameSetCharSize): Call check_frame_size and update
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5994
diff
changeset
|
879 check_frame_size (f, &rows, &columns); |
51206
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50099
diff
changeset
|
880 f->scroll_bar_actual_width |
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50099
diff
changeset
|
881 = FRAME_SCROLL_BAR_COLS (f) * FRAME_COLUMN_WIDTH (f); |
9165
cdbd78e42e03
(set_frame_size, EmacsFrameSetCharSize): Use new width formula.
Karl Heuer <kwzh@gnu.org>
parents:
8945
diff
changeset
|
882 |
50099
a62497b91c74
Use generic compute_fringe_widths.
Kim F. Storm <storm@cua.dk>
parents:
49600
diff
changeset
|
883 compute_fringe_widths (f, 0); |
24999
bd6d15dc5a10
(EmacsFrameSetCharSize): Take widget's border width
Gerd Moellmann <gerd@gnu.org>
parents:
21514
diff
changeset
|
884 |
25078
6de9d21f8a24
(EmacsFrameSetCharSize): Don't add XtNborderWidth
Gerd Moellmann <gerd@gnu.org>
parents:
24999
diff
changeset
|
885 char_to_pixel_size (ew, columns, rows, &pixel_width, &pixel_height); |
6de9d21f8a24
(EmacsFrameSetCharSize): Don't add XtNborderWidth
Gerd Moellmann <gerd@gnu.org>
parents:
24999
diff
changeset
|
886 |
6de9d21f8a24
(EmacsFrameSetCharSize): Don't add XtNborderWidth
Gerd Moellmann <gerd@gnu.org>
parents:
24999
diff
changeset
|
887 #if 0 /* This doesn't seem to be right. The frame gets too wide. --gerd. */ |
24999
bd6d15dc5a10
(EmacsFrameSetCharSize): Take widget's border width
Gerd Moellmann <gerd@gnu.org>
parents:
21514
diff
changeset
|
888 /* Something is really strange here wrt to the border width: |
bd6d15dc5a10
(EmacsFrameSetCharSize): Take widget's border width
Gerd Moellmann <gerd@gnu.org>
parents:
21514
diff
changeset
|
889 Apparently, XtNwidth and XtNheight include the border, so we have |
bd6d15dc5a10
(EmacsFrameSetCharSize): Take widget's border width
Gerd Moellmann <gerd@gnu.org>
parents:
21514
diff
changeset
|
890 to add it here. But the XtNborderWidth set for the widgets has |
51206
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50099
diff
changeset
|
891 no similarity to what f->border_width is set to. */ |
24999
bd6d15dc5a10
(EmacsFrameSetCharSize): Take widget's border width
Gerd Moellmann <gerd@gnu.org>
parents:
21514
diff
changeset
|
892 XtVaGetValues (widget, XtNborderWidth, &border_width, NULL); |
bd6d15dc5a10
(EmacsFrameSetCharSize): Take widget's border width
Gerd Moellmann <gerd@gnu.org>
parents:
21514
diff
changeset
|
893 pixel_height += 2 * border_width; |
bd6d15dc5a10
(EmacsFrameSetCharSize): Take widget's border width
Gerd Moellmann <gerd@gnu.org>
parents:
21514
diff
changeset
|
894 pixel_width += 2 * border_width; |
25078
6de9d21f8a24
(EmacsFrameSetCharSize): Don't add XtNborderWidth
Gerd Moellmann <gerd@gnu.org>
parents:
24999
diff
changeset
|
895 #endif |
6de9d21f8a24
(EmacsFrameSetCharSize): Don't add XtNborderWidth
Gerd Moellmann <gerd@gnu.org>
parents:
24999
diff
changeset
|
896 |
12188
06ef0aabc2bb
(EmacsFrameSetCharSize): Manually alter the height
Karl Heuer <kwzh@gnu.org>
parents:
12052
diff
changeset
|
897 /* Manually change the height and width of all our widgets, |
06ef0aabc2bb
(EmacsFrameSetCharSize): Manually alter the height
Karl Heuer <kwzh@gnu.org>
parents:
12052
diff
changeset
|
898 adjusting each widget by the same increments. */ |
24999
bd6d15dc5a10
(EmacsFrameSetCharSize): Take widget's border width
Gerd Moellmann <gerd@gnu.org>
parents:
21514
diff
changeset
|
899 if (ew->core.width != pixel_width |
bd6d15dc5a10
(EmacsFrameSetCharSize): Take widget's border width
Gerd Moellmann <gerd@gnu.org>
parents:
21514
diff
changeset
|
900 || ew->core.height != pixel_height) |
5626 | 901 { |
6199
044dcf8b9066
(EmacsFrameSetCharSize): Don't call XtMakeResizeRequest. Use XtVaSetValues for
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6089
diff
changeset
|
902 int hdelta = pixel_height - ew->core.height; |
12188
06ef0aabc2bb
(EmacsFrameSetCharSize): Manually alter the height
Karl Heuer <kwzh@gnu.org>
parents:
12052
diff
changeset
|
903 int wdelta = pixel_width - ew->core.width; |
12671 | 904 int column_widget_height = f->output_data.x->column_widget->core.height; |
905 int column_widget_width = f->output_data.x->column_widget->core.width; | |
906 int outer_widget_height = f->output_data.x->widget->core.height; | |
907 int outer_widget_width = f->output_data.x->widget->core.width; | |
908 int old_left = f->output_data.x->widget->core.x; | |
909 int old_top = f->output_data.x->widget->core.y; | |
7579
782afa5d95cb
(EmacsFrameSetCharSize): Once again preserve x and y pos,
Richard M. Stallman <rms@gnu.org>
parents:
7557
diff
changeset
|
910 |
38182
fd45b8013008
(EmacsFrameSetCharSize): Set XtNwaitForWm depending
Gerd Moellmann <gerd@gnu.org>
parents:
37699
diff
changeset
|
911 /* Input is blocked here, and Xt waits for some event to |
fd45b8013008
(EmacsFrameSetCharSize): Set XtNwaitForWm depending
Gerd Moellmann <gerd@gnu.org>
parents:
37699
diff
changeset
|
912 occur. */ |
fd45b8013008
(EmacsFrameSetCharSize): Set XtNwaitForWm depending
Gerd Moellmann <gerd@gnu.org>
parents:
37699
diff
changeset
|
913 |
12671 | 914 lw_refigure_widget (f->output_data.x->column_widget, False); |
12188
06ef0aabc2bb
(EmacsFrameSetCharSize): Manually alter the height
Karl Heuer <kwzh@gnu.org>
parents:
12052
diff
changeset
|
915 update_hints_inhibit = 1; |
06ef0aabc2bb
(EmacsFrameSetCharSize): Manually alter the height
Karl Heuer <kwzh@gnu.org>
parents:
12052
diff
changeset
|
916 |
38182
fd45b8013008
(EmacsFrameSetCharSize): Set XtNwaitForWm depending
Gerd Moellmann <gerd@gnu.org>
parents:
37699
diff
changeset
|
917 /* Xt waits for a ConfigureNotify event from the window manager |
fd45b8013008
(EmacsFrameSetCharSize): Set XtNwaitForWm depending
Gerd Moellmann <gerd@gnu.org>
parents:
37699
diff
changeset
|
918 in EmacsFrameSetCharSize when the shell widget is resized. |
fd45b8013008
(EmacsFrameSetCharSize): Set XtNwaitForWm depending
Gerd Moellmann <gerd@gnu.org>
parents:
37699
diff
changeset
|
919 For some window managers like fvwm2 2.2.5 and KDE 2.1 this |
fd45b8013008
(EmacsFrameSetCharSize): Set XtNwaitForWm depending
Gerd Moellmann <gerd@gnu.org>
parents:
37699
diff
changeset
|
920 event doesn't arrive for an unknown reason and Emacs hangs in |
fd45b8013008
(EmacsFrameSetCharSize): Set XtNwaitForWm depending
Gerd Moellmann <gerd@gnu.org>
parents:
37699
diff
changeset
|
921 Xt when the default font is changed. Tell Xt not to wait, |
fd45b8013008
(EmacsFrameSetCharSize): Set XtNwaitForWm depending
Gerd Moellmann <gerd@gnu.org>
parents:
37699
diff
changeset
|
922 depending on the value of the frame parameter |
fd45b8013008
(EmacsFrameSetCharSize): Set XtNwaitForWm depending
Gerd Moellmann <gerd@gnu.org>
parents:
37699
diff
changeset
|
923 `wait-for-wm'. */ |
76671
8ee14c8d3504
(EmacsFrameSetCharSize): Catch X errors.
Chong Yidong <cyd@stupidchicken.com>
parents:
75227
diff
changeset
|
924 x_catch_errors (FRAME_X_DISPLAY (f)); |
38182
fd45b8013008
(EmacsFrameSetCharSize): Set XtNwaitForWm depending
Gerd Moellmann <gerd@gnu.org>
parents:
37699
diff
changeset
|
925 XtVaSetValues (f->output_data.x->widget, |
fd45b8013008
(EmacsFrameSetCharSize): Set XtNwaitForWm depending
Gerd Moellmann <gerd@gnu.org>
parents:
37699
diff
changeset
|
926 XtNwaitForWm, (XtArgVal) f->output_data.x->wait_for_wm, |
fd45b8013008
(EmacsFrameSetCharSize): Set XtNwaitForWm depending
Gerd Moellmann <gerd@gnu.org>
parents:
37699
diff
changeset
|
927 NULL); |
76671
8ee14c8d3504
(EmacsFrameSetCharSize): Catch X errors.
Chong Yidong <cyd@stupidchicken.com>
parents:
75227
diff
changeset
|
928 x_uncatch_errors (); |
38219
f70ea2b09e46
(EmacsFrameSetCharSize): Turn off atimers and block
Gerd Moellmann <gerd@gnu.org>
parents:
38182
diff
changeset
|
929 |
f70ea2b09e46
(EmacsFrameSetCharSize): Turn off atimers and block
Gerd Moellmann <gerd@gnu.org>
parents:
38182
diff
changeset
|
930 /* Workaround: When a SIGIO or SIGALRM occurs while Xt is |
f70ea2b09e46
(EmacsFrameSetCharSize): Turn off atimers and block
Gerd Moellmann <gerd@gnu.org>
parents:
38182
diff
changeset
|
931 waiting for a ConfigureNotify event (see above), this leads |
f70ea2b09e46
(EmacsFrameSetCharSize): Turn off atimers and block
Gerd Moellmann <gerd@gnu.org>
parents:
38182
diff
changeset
|
932 to Xt waiting indefinitely instead of using its default |
f70ea2b09e46
(EmacsFrameSetCharSize): Turn off atimers and block
Gerd Moellmann <gerd@gnu.org>
parents:
38182
diff
changeset
|
933 timeout (5 seconds). */ |
f70ea2b09e46
(EmacsFrameSetCharSize): Turn off atimers and block
Gerd Moellmann <gerd@gnu.org>
parents:
38182
diff
changeset
|
934 turn_on_atimers (0); |
f70ea2b09e46
(EmacsFrameSetCharSize): Turn off atimers and block
Gerd Moellmann <gerd@gnu.org>
parents:
38182
diff
changeset
|
935 #ifdef SIGIO |
f70ea2b09e46
(EmacsFrameSetCharSize): Turn off atimers and block
Gerd Moellmann <gerd@gnu.org>
parents:
38182
diff
changeset
|
936 sigblock (sigmask (SIGIO)); |
f70ea2b09e46
(EmacsFrameSetCharSize): Turn off atimers and block
Gerd Moellmann <gerd@gnu.org>
parents:
38182
diff
changeset
|
937 #endif |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
44671
diff
changeset
|
938 |
36769
35df75f3f78d
(EmacsFrameSetCharSize): Comment update.
Gerd Moellmann <gerd@gnu.org>
parents:
34957
diff
changeset
|
939 /* Do parents first, otherwise LessTif's geometry management |
35df75f3f78d
(EmacsFrameSetCharSize): Comment update.
Gerd Moellmann <gerd@gnu.org>
parents:
34957
diff
changeset
|
940 enters an infinite loop (as of 2000-01-15). This is fixed in |
35df75f3f78d
(EmacsFrameSetCharSize): Comment update.
Gerd Moellmann <gerd@gnu.org>
parents:
34957
diff
changeset
|
941 later versions of LessTif (as of 2001-03-13); I'll leave it |
35df75f3f78d
(EmacsFrameSetCharSize): Comment update.
Gerd Moellmann <gerd@gnu.org>
parents:
34957
diff
changeset
|
942 as is because I think it can't do any harm. */ |
44671 | 943 /* In April 2002, simon.marshall@misys.com reports the problem |
944 seems not to occur any longer. */ | |
76671
8ee14c8d3504
(EmacsFrameSetCharSize): Catch X errors.
Chong Yidong <cyd@stupidchicken.com>
parents:
75227
diff
changeset
|
945 x_catch_errors (FRAME_X_DISPLAY (f)); |
27342
cf4ab4e4be66
(EmacsFrameSetCharSize): Change size of children first
Gerd Moellmann <gerd@gnu.org>
parents:
25728
diff
changeset
|
946 XtVaSetValues (f->output_data.x->widget, |
38182
fd45b8013008
(EmacsFrameSetCharSize): Set XtNwaitForWm depending
Gerd Moellmann <gerd@gnu.org>
parents:
37699
diff
changeset
|
947 XtNheight, (XtArgVal) (outer_widget_height + hdelta), |
fd45b8013008
(EmacsFrameSetCharSize): Set XtNwaitForWm depending
Gerd Moellmann <gerd@gnu.org>
parents:
37699
diff
changeset
|
948 XtNwidth, (XtArgVal) (outer_widget_width + wdelta), |
fd45b8013008
(EmacsFrameSetCharSize): Set XtNwaitForWm depending
Gerd Moellmann <gerd@gnu.org>
parents:
37699
diff
changeset
|
949 NULL); |
27342
cf4ab4e4be66
(EmacsFrameSetCharSize): Change size of children first
Gerd Moellmann <gerd@gnu.org>
parents:
25728
diff
changeset
|
950 XtVaSetValues (f->output_data.x->column_widget, |
38182
fd45b8013008
(EmacsFrameSetCharSize): Set XtNwaitForWm depending
Gerd Moellmann <gerd@gnu.org>
parents:
37699
diff
changeset
|
951 XtNheight, (XtArgVal) (column_widget_height + hdelta), |
fd45b8013008
(EmacsFrameSetCharSize): Set XtNwaitForWm depending
Gerd Moellmann <gerd@gnu.org>
parents:
37699
diff
changeset
|
952 XtNwidth, (XtArgVal) column_widget_width + wdelta, |
fd45b8013008
(EmacsFrameSetCharSize): Set XtNwaitForWm depending
Gerd Moellmann <gerd@gnu.org>
parents:
37699
diff
changeset
|
953 NULL); |
27342
cf4ab4e4be66
(EmacsFrameSetCharSize): Change size of children first
Gerd Moellmann <gerd@gnu.org>
parents:
25728
diff
changeset
|
954 XtVaSetValues ((Widget) ew, |
38182
fd45b8013008
(EmacsFrameSetCharSize): Set XtNwaitForWm depending
Gerd Moellmann <gerd@gnu.org>
parents:
37699
diff
changeset
|
955 XtNheight, (XtArgVal) pixel_height, |
fd45b8013008
(EmacsFrameSetCharSize): Set XtNwaitForWm depending
Gerd Moellmann <gerd@gnu.org>
parents:
37699
diff
changeset
|
956 XtNwidth, (XtArgVal) pixel_width, |
fd45b8013008
(EmacsFrameSetCharSize): Set XtNwaitForWm depending
Gerd Moellmann <gerd@gnu.org>
parents:
37699
diff
changeset
|
957 NULL); |
76671
8ee14c8d3504
(EmacsFrameSetCharSize): Catch X errors.
Chong Yidong <cyd@stupidchicken.com>
parents:
75227
diff
changeset
|
958 x_uncatch_errors (); |
8ee14c8d3504
(EmacsFrameSetCharSize): Catch X errors.
Chong Yidong <cyd@stupidchicken.com>
parents:
75227
diff
changeset
|
959 |
38219
f70ea2b09e46
(EmacsFrameSetCharSize): Turn off atimers and block
Gerd Moellmann <gerd@gnu.org>
parents:
38182
diff
changeset
|
960 #ifdef SIGIO |
f70ea2b09e46
(EmacsFrameSetCharSize): Turn off atimers and block
Gerd Moellmann <gerd@gnu.org>
parents:
38182
diff
changeset
|
961 sigunblock (sigmask (SIGIO)); |
f70ea2b09e46
(EmacsFrameSetCharSize): Turn off atimers and block
Gerd Moellmann <gerd@gnu.org>
parents:
38182
diff
changeset
|
962 #endif |
f70ea2b09e46
(EmacsFrameSetCharSize): Turn off atimers and block
Gerd Moellmann <gerd@gnu.org>
parents:
38182
diff
changeset
|
963 turn_on_atimers (1); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
44671
diff
changeset
|
964 |
12671 | 965 lw_refigure_widget (f->output_data.x->column_widget, True); |
7579
782afa5d95cb
(EmacsFrameSetCharSize): Once again preserve x and y pos,
Richard M. Stallman <rms@gnu.org>
parents:
7557
diff
changeset
|
966 |
12188
06ef0aabc2bb
(EmacsFrameSetCharSize): Manually alter the height
Karl Heuer <kwzh@gnu.org>
parents:
12052
diff
changeset
|
967 update_hints_inhibit = 0; |
06ef0aabc2bb
(EmacsFrameSetCharSize): Manually alter the height
Karl Heuer <kwzh@gnu.org>
parents:
12052
diff
changeset
|
968 update_wm_hints (ew); |
06ef0aabc2bb
(EmacsFrameSetCharSize): Manually alter the height
Karl Heuer <kwzh@gnu.org>
parents:
12052
diff
changeset
|
969 |
7579
782afa5d95cb
(EmacsFrameSetCharSize): Once again preserve x and y pos,
Richard M. Stallman <rms@gnu.org>
parents:
7557
diff
changeset
|
970 /* These seem to get clobbered. I don't know why. - rms. */ |
12671 | 971 f->output_data.x->widget->core.x = old_left; |
972 f->output_data.x->widget->core.y = old_top; | |
5626 | 973 } |
6087
00fbbb620f36
(EmacsFrameSetCharSize): Call check_frame_size and update
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5994
diff
changeset
|
974 |
00fbbb620f36
(EmacsFrameSetCharSize): Call check_frame_size and update
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5994
diff
changeset
|
975 /* We've set {FRAME,PIXEL}_{WIDTH,HEIGHT} to the values we hope to |
00fbbb620f36
(EmacsFrameSetCharSize): Call check_frame_size and update
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5994
diff
changeset
|
976 receive in the ConfigureNotify event; if we get what we asked |
00fbbb620f36
(EmacsFrameSetCharSize): Call check_frame_size and update
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5994
diff
changeset
|
977 for, then the event won't cause the screen to become garbaged, so |
00fbbb620f36
(EmacsFrameSetCharSize): Call check_frame_size and update
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5994
diff
changeset
|
978 we have to make sure to do it here. */ |
00fbbb620f36
(EmacsFrameSetCharSize): Call check_frame_size and update
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5994
diff
changeset
|
979 SET_FRAME_GARBAGED (f); |
5626 | 980 } |
24999
bd6d15dc5a10
(EmacsFrameSetCharSize): Take widget's border width
Gerd Moellmann <gerd@gnu.org>
parents:
21514
diff
changeset
|
981 |
16350
773a9eb73ce9
(widget_store_internal_border): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16300
diff
changeset
|
982 |
21514 | 983 void |
16350
773a9eb73ce9
(widget_store_internal_border): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16300
diff
changeset
|
984 widget_store_internal_border (widget) |
773a9eb73ce9
(widget_store_internal_border): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16300
diff
changeset
|
985 Widget widget; |
773a9eb73ce9
(widget_store_internal_border): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16300
diff
changeset
|
986 { |
773a9eb73ce9
(widget_store_internal_border): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16300
diff
changeset
|
987 EmacsFrame ew = (EmacsFrame) widget; |
773a9eb73ce9
(widget_store_internal_border): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16300
diff
changeset
|
988 FRAME_PTR f = ew->emacs_frame.frame; |
773a9eb73ce9
(widget_store_internal_border): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16300
diff
changeset
|
989 |
51206
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50099
diff
changeset
|
990 ew->emacs_frame.internal_border_width = f->internal_border_width; |
16350
773a9eb73ce9
(widget_store_internal_border): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16300
diff
changeset
|
991 } |
52401 | 992 |
993 /* arch-tag: 931d28e5-0d59-405a-8325-7d475d0a13d9 | |
994 (do not change this comment) */ |