annotate src/EmacsShell-sub.c @ 4483:7869173584fc

Error on over-long hex character escapes. 2008-07-16 Aidan Kehoe <kehoea@parhasard.net> * lread.c (read_escape): Error if we're handed an over-long hex character escape, something which arises reasonably frequently in code written for GNU.
author Aidan Kehoe <kehoea@parhasard.net>
date Wed, 16 Jul 2008 22:36:03 +0200
parents 6830a3f39553
children 383ab474a241
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 /* Emacs shell widget -- define the two widgets.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 Copyright (C) 1994, 1995 Sun Microsystems, Inc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4 This file is part of XEmacs.
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 XEmacs is free software; you can redistribute it and/or modify it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 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
8 Free Software Foundation; either version 2, or (at your option) any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 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
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 along with XEmacs; see the file COPYING. If not, write to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 Boston, MA 02111-1307, USA. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 /* Synched up with: Not in FSF. */
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 /* Written by Ben Wing, May, 1994. */
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 /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26 It is rather unfortunate that we have to do this. Blame those
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 short-sighted people who designed the monstrosities known as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 Xt and ICCCM.
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 This widget is not actually Emacs-specific; perhaps there could
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 be a better name than "EmacsShell". What it does is work around
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 a limitation in Xt in correctly dealing with the window-manager
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 size hints with applications that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 (a) dynamically change their window size
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 (b) have a cell size (width-inc and height-inc) other than 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 (c) cannot predict in advance exactly what size their shell will be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 (This is the more common situation, when you have a number
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 of widgets, each with their own size ideas)
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 This widget assumes that your program contains a fixed "base size"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 plus some number of cells (e.g. character cells). The WMShell
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 resources "widthInc" and "heightInc" specify the size of a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 character cell, and the window manager will report the app's
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 size in cells rather than in pixels.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 If you use this widget, do not use the WMShell resources
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 "baseWidth", "baseHeight", "minWidth", or "minHeight".
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 Instead, use "widthCells" and "heightCells" to specify the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 current size in cells (you must keep this up-to-date),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 and "minWidthCells" and "minHeightCells" to specify the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 minimum size in cells.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 Every time that the program issues a size command, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 "baseWidth", "baseHeight", "minWidth", and "minHeight" fields
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 of the WM_NORMAL_HINTS property will be updated to stay in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 line with the resource values specified above. The calculations
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 are done once the desired shell size is known but before the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 window-manager size-change request is issued. (We must do it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 at this time because before then we don't know what size we
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 will request, and after the request the deed has already
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 been done.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 After you change the "baseWidth", "baseHeight", "minWidth",
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 or "minHeight" resources, you need to call
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 EmacsShellUpdateSizeHints() to manually update the size
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 hints, except in the following two circumstances:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 (a) you are about to make a geometry request.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 (b) you are changing only "baseWidth" and "baseHeight"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 from within a resize procedure. (In this case,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 the size hints are already correct.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 #include <config.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 #include <stdio.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 #include <stdlib.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 #include <X11/StringDefs.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 #include "xintrinsicp.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 #include <X11/Shell.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 #include <X11/ShellP.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 #include <X11/Vendor.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 #include <X11/VendorP.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 #include "EmacsShellP.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92
2500
3d8143fc88e1 [xemacs-hg @ 2005-01-24 23:33:30 by ben]
ben
parents: 1294
diff changeset
93 #define ABORT abort
3d8143fc88e1 [xemacs-hg @ 2005-01-24 23:33:30 by ben]
ben
parents: 1294
diff changeset
94
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 #if defined (DEFINE_TOP_LEVEL_EMACS_SHELL)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 #define EMACS_SHELL_WIDGET TopLevelEmacsShellWidget
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 #define SUPERCLASS_WIDGET_CLASS topLevelShellWidgetClass
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 #define SUPERCLASS_CLASS_REC topLevelShellClassRec
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 #define EMACS_SHELL_REC TopLevelEmacsShellRec
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 #define EMACS_SHELL_CLASS_REC topLevelEmacsShellClassRec
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 #define EMACS_SHELL_CLASS_REC_TYPE TopLevelEmacsShellClassRec
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 #define EMACS_SHELL_CLASS_NAME "TopLevelEmacsShell"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 #define EMACS_SHELL_WIDGET_CLASS topLevelEmacsShellWidgetClass
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 #define EMACS_SHELL_UPDATE_SIZE_HINTS TopLevelEmacsShellUpdateSizeHints
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 #elif defined (DEFINE_TRANSIENT_EMACS_SHELL)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 #define EMACS_SHELL_WIDGET TransientEmacsShellWidget
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 #define SUPERCLASS_WIDGET_CLASS transientShellWidgetClass
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 #define SUPERCLASS_CLASS_REC transientShellClassRec
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 #define EMACS_SHELL_REC TransientEmacsShellRec
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 #define EMACS_SHELL_CLASS_REC transientEmacsShellClassRec
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 #define EMACS_SHELL_CLASS_REC_TYPE TransientEmacsShellClassRec
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 #define EMACS_SHELL_CLASS_NAME "TransientEmacsShell"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113 #define EMACS_SHELL_WIDGET_CLASS transientEmacsShellWidgetClass
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 #define EMACS_SHELL_UPDATE_SIZE_HINTS TransientEmacsShellUpdateSizeHints
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 Error. Must define either DEFINE_TOP_LEVEL_EMACS_SHELL or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 DEFINE_TRANSIENT_EMACS_SHELL.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 typedef struct {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 XtPointer next_extension;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122 XrmQuark record_type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123 long version;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 Cardinal record_size;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125 } GenericClassExtRec;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 static XtGeometryResult RootGeometryManager (Widget gw,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128 XtWidgetGeometry *request, XtWidgetGeometry *reply);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 static void ChangeManaged (Widget w);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 /* snarfed from Shell.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 #define BIGSIZE ((Dimension)32767)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 static XtResource resources[] = {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135 #define offset(field) XtOffset(EMACS_SHELL_WIDGET, emacs_shell.field)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 #define coreoffset(field) XtOffset(EMACS_SHELL_WIDGET, core.field)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 #ifdef LWLIB_USES_MOTIF
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 /* *** BOGOSITY^10! *** The Motif VendorShell fucks around with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 the default values for X and Y, for no obvious reason. This
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 causes Shell to indicate that the defaults of (0,0) were
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141 program-specified, instead of letting the WM do what it wants. */
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
142 { XtNx, XtCPosition,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
143 XtRPosition, sizeof (Position),
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
144 coreoffset (x), XtRImmediate, (XtPointer)BIGSIZE },
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
145 { XtNy, XtCPosition,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
146 XtRPosition, sizeof (Position),
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
147 coreoffset (y), XtRImmediate, (XtPointer)BIGSIZE },
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148 #endif
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
149 { XtNwidthCells, XtCWidthCells,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
150 XtRInt, sizeof (int),
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
151 offset (width_cells), XtRImmediate, (XtPointer)0 },
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
152 { XtNheightCells, XtCHeightCells,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
153 XtRInt, sizeof (int),
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
154 offset (height_cells), XtRImmediate, (XtPointer)0 },
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
155 { XtNminWidthCells, XtCMinWidthCells,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
156 XtRInt, sizeof (int),
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
157 offset (min_width_cells), XtRImmediate, (XtPointer)0 },
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
158 { XtNminHeightCells, XtCMinHeightCells,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
159 XtRInt, sizeof (int),
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
160 offset (min_height_cells), XtRImmediate, (XtPointer)0 },
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 static CompositeClassExtensionRec compositeClassExtRec = {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 NULL,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 NULLQUARK,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 XtCompositeExtensionVersion,
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
167 sizeof (CompositeClassExtensionRec),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 TRUE,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 static ShellClassExtensionRec shellClassExtRec = {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 NULL,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 NULLQUARK,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 XtShellExtensionVersion,
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
175 sizeof (ShellClassExtensionRec),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 RootGeometryManager
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 EMACS_SHELL_CLASS_REC_TYPE EMACS_SHELL_CLASS_REC = {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 { /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 * core_class fields
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 /* superclass */ (WidgetClass) &SUPERCLASS_CLASS_REC,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 /* class_name */ (String) EMACS_SHELL_CLASS_NAME,
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
185 /* size */ sizeof (EMACS_SHELL_REC),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 /* Class Initializer */ NULL,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 /* class_part_initialize*/ NULL, /* XtInheritClassPartInitialize, */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 /* Class init'ed ? */ FALSE,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 /* initialize */ NULL,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 /* initialize_notify */ NULL,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 /* realize */ XtInheritRealize,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 /* actions */ NULL,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 /* num_actions */ 0,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 /* resources */ resources,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 /* resource_count */ XtNumber (resources),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 /* xrm_class */ NULLQUARK,
1294
8c5cf108f035 [xemacs-hg @ 2003-02-14 07:38:22 by stephent]
stephent
parents: 440
diff changeset
197 /* compress_motion */ TRUE,
8c5cf108f035 [xemacs-hg @ 2003-02-14 07:38:22 by stephent]
stephent
parents: 440
diff changeset
198 /* compress_exposure */ XtExposeCompressMaximal | XtExposeNoRegion,
8c5cf108f035 [xemacs-hg @ 2003-02-14 07:38:22 by stephent]
stephent
parents: 440
diff changeset
199 /* compress_enterleave*/ TRUE,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 /* visible_interest */ TRUE,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 /* destroy */ NULL,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 /* resize */ XtInheritResize,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 /* expose */ NULL,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 /* set_values */ NULL, /* XtInheritSetValues, */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 /* set_values_hook */ NULL,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 /* set_values_almost */ XtInheritSetValuesAlmost,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 /* get_values_hook */ NULL,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 /* accept_focus */ NULL,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 /* intrinsics version */ XtVersion,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 /* callback offsets */ NULL,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 /* tm_table */ NULL,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 /* query_geometry */ NULL,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213 /* display_accelerator*/ NULL,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 /* extension */ NULL
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 },{ /* Composite */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 /* geometry_manager */ XtInheritGeometryManager,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 /* change_managed */ ChangeManaged,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 /* insert_child */ XtInheritInsertChild,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 /* delete_child */ XtInheritDeleteChild,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 /* extension */ (XtPointer)&compositeClassExtRec
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 },{ /* Shell */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 /* extension */ (XtPointer)&shellClassExtRec
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 },{ /* WMShell */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 /* extension */ NULL
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 },{ /* VendorShell */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 /* extension */ NULL
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 },{ /* TopLevelShell or TransientShell */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 /* both have exactly one XtPointer here. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 /* extension */ NULL
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 },{ /* EmacsShell */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 WidgetClass EMACS_SHELL_WIDGET_CLASS = (WidgetClass) &EMACS_SHELL_CLASS_REC;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238 update_size_hints_internal (EMACS_SHELL_WIDGET w,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 int width, int height)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 int base_width, base_height;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 int cell_width, cell_height;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 Arg al [10];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 /* time to update them thar size hints */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 cell_width = w->wm.size_hints.width_inc;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 cell_height = w->wm.size_hints.height_inc;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 base_width = width - cell_width * w->emacs_shell.width_cells;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 base_height = height - cell_height * w->emacs_shell.height_cells;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 #ifdef DEBUG_GEOMETRY_MANAGEMENT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 /* Very useful info when debugging geometry management problems.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 When it's guaranteed that no more such problems exist, take
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 this stuff out. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 printf ("update_size_hints_internal:\n");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 printf (" actual pixel size: %d %d\n", width, height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 printf (" cell size in pixels: %d %d\n", cell_width, cell_height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 printf (" text area size in cells: %d %d\n", w->emacs_shell.width_cells,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258 w->emacs_shell.height_cells);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259 printf (" base size set to: %d %d\n", base_width, base_height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 fflush (stdout);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262 XtSetArg(al [0], XtNbaseWidth, base_width);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263 XtSetArg(al [1], XtNbaseHeight, base_height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 XtSetArg(al [2], XtNminWidth, base_width +
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265 cell_width * w->emacs_shell.min_width_cells);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 XtSetArg(al [3], XtNminHeight, base_height +
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 cell_height * w->emacs_shell.min_height_cells);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 XtSetValues ((Widget) w, al, 4);
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 static XtGeometryResult
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 SuperClassRootGeometryManager (Widget gw,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 XtWidgetGeometry *request,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 XtWidgetGeometry *reply)
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 ShellWidgetClass swc = (ShellWidgetClass) SUPERCLASS_WIDGET_CLASS;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 ShellClassExtensionRec *scer;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278 GenericClassExtRec *gcer;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 /* find the shell extension record that specifies the
3381
374186f156d5 [xemacs-hg @ 2006-05-06 17:55:58 by stephent]
stephent
parents: 2500
diff changeset
281 root geometry manager method
374186f156d5 [xemacs-hg @ 2006-05-06 17:55:58 by stephent]
stephent
parents: 2500
diff changeset
282 #### We could use XtGetClassExtension here. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283 for (gcer = (GenericClassExtRec *) swc->shell_class.extension;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284 gcer;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285 gcer = (GenericClassExtRec *) gcer->next_extension)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 if (gcer->record_type == NULLQUARK)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290
3381
374186f156d5 [xemacs-hg @ 2006-05-06 17:55:58 by stephent]
stephent
parents: 2500
diff changeset
291 /* #### The R11.6.4 Xt specification says if we don't find NULLQUARK here,
374186f156d5 [xemacs-hg @ 2006-05-06 17:55:58 by stephent]
stephent
parents: 2500
diff changeset
292 we should assume root_geometry_manager = XtInheritRootGeometryManager.
374186f156d5 [xemacs-hg @ 2006-05-06 17:55:58 by stephent]
stephent
parents: 2500
diff changeset
293 Is that actually callable? */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294 if (!gcer)
2500
3d8143fc88e1 [xemacs-hg @ 2005-01-24 23:33:30 by ben]
ben
parents: 1294
diff changeset
295 ABORT ();
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297 /* call it to actually make the geometry request */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298 scer = (ShellClassExtensionRec *) gcer;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 return (scer->root_geometry_manager)(gw, request, reply);
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 static XtGeometryResult
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303 RootGeometryManager (Widget gw,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 XtWidgetGeometry *request,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 XtWidgetGeometry *reply)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307 EMACS_SHELL_WIDGET w = (EMACS_SHELL_WIDGET) gw;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 /* OK since this file is not dumped */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 static int reentrant = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 XtGeometryResult result;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312 if (reentrant)
2500
3d8143fc88e1 [xemacs-hg @ 2005-01-24 23:33:30 by ben]
ben
parents: 1294
diff changeset
313 ABORT ();
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314 reentrant++;
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 #ifdef DEBUG_GEOMETRY_MANAGEMENT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317 printf ("root_geometry_manager:\n");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318 printf (" current shell size: %d %d\n", w->core.width, w->core.height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319 if (request->request_mode & CWWidth)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320 printf ("width requested;");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 if (request->request_mode & CWHeight)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322 printf ("height requested;");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 printf ("\n");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324 printf (" requested shell size: %d %d\n", request->width, request->height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 /* update the size hints */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 update_size_hints_internal (w,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 request->request_mode & CWWidth ?
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 request->width : w->core.width,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330 request->request_mode & CWHeight ?
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 request->height : w->core.height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333 result = SuperClassRootGeometryManager (gw, request, reply);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 #ifdef DEBUG_GEOMETRY_MANAGEMENT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 printf (" result: %s\n",
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337 result == XtGeometryYes ? "XtGeometryYes" :
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 result == XtGeometryNo ? "XtGeometryNo" :
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 result == XtGeometryAlmost ? "XtGeometryAlmost" :
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 "XtGeometryDone");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 if (reply->request_mode & CWWidth)
3385
6830a3f39553 [xemacs-hg @ 2006-05-08 07:35:23 by stephent]
stephent
parents: 3381
diff changeset
342 printf ("width returned was %d%s",
6830a3f39553 [xemacs-hg @ 2006-05-08 07:35:23 by stephent]
stephent
parents: 3381
diff changeset
343 reply->width,
6830a3f39553 [xemacs-hg @ 2006-05-08 07:35:23 by stephent]
stephent
parents: 3381
diff changeset
344 reply->request_mode & CWHeight ? "; " : ".\n");
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 if (reply->request_mode & CWHeight)
3385
6830a3f39553 [xemacs-hg @ 2006-05-08 07:35:23 by stephent]
stephent
parents: 3381
diff changeset
346 printf ("height returned was %d.\n", reply->height);
6830a3f39553 [xemacs-hg @ 2006-05-08 07:35:23 by stephent]
stephent
parents: 3381
diff changeset
347 /* #### does this also need to depend on the result?
6830a3f39553 [xemacs-hg @ 2006-05-08 07:35:23 by stephent]
stephent
parents: 3381
diff changeset
348 With XtGeometryYes there doesn't seem to be a useful reply object. */
6830a3f39553 [xemacs-hg @ 2006-05-08 07:35:23 by stephent]
stephent
parents: 3381
diff changeset
349 printf (" resulting shell size: %d %d\n",
6830a3f39553 [xemacs-hg @ 2006-05-08 07:35:23 by stephent]
stephent
parents: 3381
diff changeset
350 reply->request_mode & CWWidth ? reply->width : w->core.width,
6830a3f39553 [xemacs-hg @ 2006-05-08 07:35:23 by stephent]
stephent
parents: 3381
diff changeset
351 reply->request_mode & CWHeight ? reply->height : w->core.height);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 printf ("----------\n");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353 fflush (stdout);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 reentrant--;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356 return result;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 ChangeManaged (Widget wid)
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 EMACS_SHELL_WIDGET w = (EMACS_SHELL_WIDGET) wid;
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 /* If not realized, then we're being called from XtRealizeWidget().
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 RootGeometryManager() has not yet been called, and thus our
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 base size is incorrect. We need to set it now or the Shell
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 will mess up geometry specifications with negative positional
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 offsets. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369 if (!XtIsRealized (wid))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371 Widget child = NULL;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 Cardinal i;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 /* the managed child indicates what our size is */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 for (i = 0; i < w->composite.num_children; i++) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 if (XtIsManaged(w->composite.children[i])) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 child = w->composite.children[i];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382 update_size_hints_internal (w, child->core.width, child->core.height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383 }
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 /* call the real ChangeManaged */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386 (((ShellWidgetClass) SUPERCLASS_WIDGET_CLASS)->
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387 composite_class.change_managed)(wid);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
388 }
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391 /******************* external entry points *********************/
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 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394 EMACS_SHELL_UPDATE_SIZE_HINTS (Widget gw)
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 EMACS_SHELL_WIDGET w = (EMACS_SHELL_WIDGET) gw;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
397 update_size_hints_internal (w, w->core.width, w->core.height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398 }