annotate src/EmacsShell-sub.c @ 2500:3d8143fc88e1

[xemacs-hg @ 2005-01-24 23:33:30 by ben] get working with VC7 config.inc.samp: Declare OPTIONAL_LIBRARY_DIR as root of library directories. Redo all graphics library defaults to mirror the versions and directories in the current binary aux distribution on xemacs web site. Enable TIFF and COMPFACE by default since you can now compile with them and binary libs are provided. xemacs.mak: Put our own directories first in case of conflict (e.g. config.h in compface). xemacs.mak: Use MSVCRT to avoid link problems. s/windowsnt.h: bytecode.c, print.c: Add casts to avoid warning. compiler.h: Add MSC_VERSION and include definitions of DOESNT_RETURN and friends here, like for GCC. Need different definitions for VC7 and VC6. s/windowsnt.h: Remove stuff moved to compiler.h. Disable warning 4646 ("function declared with __declspec(noreturn) has non-void return type") on VC7 since lots of Lisp primitives trigger this and there is no easy way to kludge around the warning. glyphs-eimage.c: Some really nasty hacks to allow TIFF and JPEG to both be compiled. #### The better solution is to move the TIFF and JPEG code to different files. glyphs-msw.c: Define __STDC__ to avoid problems with compface.h. intl-auto-encap-win32.c, intl-auto-encap-win32.h, intl-encap-win32.c, syswindows.h: Those wankers at Microsoft cannot leave well enough alone. Various functions change parameter types semi-randomly between VC6 and VC7, so we need to include our own versions that can handle both kinds with appropriate casting. EmacsFrame.c, EmacsShell-sub.c, EmacsShell.c, alloc.c, alloca.c, buffer.c, bytecode.c, charset.h, chartab.c, cm.c, console-stream.c, console.c, data.c, debug.h, device-msw.c, device-tty.c, device-x.c, doprnt.c, dumper.c, dynarr.c, elhash.c, emacs.c, eval.c, event-Xt.c, event-gtk.c, event-msw.c, event-stream.c, events.c, extents.c, faces.c, file-coding.c, fileio.c, fns.c, font-lock.c, frame-gtk.c, frame-x.c, frame.c, free-hook.c, gccache-gtk.c, glyphs-eimage.c, glyphs-gtk.c, glyphs-msw.c, glyphs-x.c, glyphs.c, gtk-glue.c, gutter.c, input-method-xlib.c, insdel.c, intl-win32.c, keymap.c, lisp.h, lread.c, lstream.c, macros.c, malloc.c, menubar-gtk.c, menubar-msw.c, menubar-x.c, mule-coding.c, native-gtk-toolbar.c, number.c, objects-msw.c, objects.c, print.c, process-nt.c, process-unix.c, process.c, ralloc.c, rangetab.c, redisplay-gtk.c, redisplay-msw.c, redisplay-output.c, redisplay-tty.c, redisplay-x.c, redisplay.c, regex.c, scrollbar-gtk.c, scrollbar-x.c, search.c, select-x.c, signal.c, specifier.c, specifier.h, strftime.c, sunplay.c, symbols.c, sysdep.c, sysproc.h, text.c, text.h, toolbar-common.c, toolbar-msw.c, toolbar.c, ui-gtk.c, unexnt.c, unicode.c, win32.c, window.c, xgccache.c, s/windowsnt.h: abort() -> ABORT(). Eliminate preprocessor games with abort() since it creates huge problems in VC7, solvable only by including massive amounts of files in every compile (and not worth it).
author ben
date Mon, 24 Jan 2005 23:34:34 +0000
parents 8c5cf108f035
children 374186f156d5
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281 root geometry manager method */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282 for (gcer = (GenericClassExtRec *) swc->shell_class.extension;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283 gcer;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284 gcer = (GenericClassExtRec *) gcer->next_extension)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 if (gcer->record_type == NULLQUARK)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 }
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 if (!gcer)
2500
3d8143fc88e1 [xemacs-hg @ 2005-01-24 23:33:30 by ben]
ben
parents: 1294
diff changeset
291 ABORT ();
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293 /* call it to actually make the geometry request */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294 scer = (ShellClassExtensionRec *) gcer;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295 return (scer->root_geometry_manager)(gw, request, reply);
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298 static XtGeometryResult
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 RootGeometryManager (Widget gw,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 XtWidgetGeometry *request,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 XtWidgetGeometry *reply)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303 EMACS_SHELL_WIDGET w = (EMACS_SHELL_WIDGET) gw;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 /* OK since this file is not dumped */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 static int reentrant = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306 XtGeometryResult result;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 if (reentrant)
2500
3d8143fc88e1 [xemacs-hg @ 2005-01-24 23:33:30 by ben]
ben
parents: 1294
diff changeset
309 ABORT ();
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 reentrant++;
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 #ifdef DEBUG_GEOMETRY_MANAGEMENT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313 printf ("root_geometry_manager:\n");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314 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
315 if (request->request_mode & CWWidth)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 printf ("width requested;");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317 if (request->request_mode & CWHeight)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318 printf ("height requested;");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319 printf ("\n");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320 printf (" requested shell size: %d %d\n", request->width, request->height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322 /* update the size hints */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 update_size_hints_internal (w,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324 request->request_mode & CWWidth ?
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 request->width : w->core.width,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 request->request_mode & CWHeight ?
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 request->height : w->core.height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 result = SuperClassRootGeometryManager (gw, request, reply);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 #ifdef DEBUG_GEOMETRY_MANAGEMENT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 printf (" result: %s\n",
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333 result == XtGeometryYes ? "XtGeometryYes" :
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334 result == XtGeometryNo ? "XtGeometryNo" :
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 result == XtGeometryAlmost ? "XtGeometryAlmost" :
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 "XtGeometryDone");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337 if (reply->request_mode & CWWidth)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 printf ("width returned;");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 if (reply->request_mode & CWHeight)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 printf ("height returned;");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 printf ("\n");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 printf (" resulting shell size: %d %d\n", reply->width, reply->height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 printf ("----------\n");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 fflush (stdout);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 reentrant--;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347 return result;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 ChangeManaged (Widget wid)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353 EMACS_SHELL_WIDGET w = (EMACS_SHELL_WIDGET) wid;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 /* If not realized, then we're being called from XtRealizeWidget().
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356 RootGeometryManager() has not yet been called, and thus our
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 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
358 will mess up geometry specifications with negative positional
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 offsets. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 if (!XtIsRealized (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 Widget child = NULL;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 Cardinal i;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 /* the managed child indicates what our size is */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 for (i = 0; i < w->composite.num_children; i++) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 if (XtIsManaged(w->composite.children[i])) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 child = w->composite.children[i];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369 break;
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 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373 update_size_hints_internal (w, child->core.width, child->core.height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 /* call the real ChangeManaged */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 (((ShellWidgetClass) SUPERCLASS_WIDGET_CLASS)->
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 composite_class.change_managed)(wid);
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 /******************* external entry points *********************/
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 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385 EMACS_SHELL_UPDATE_SIZE_HINTS (Widget gw)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387 EMACS_SHELL_WIDGET w = (EMACS_SHELL_WIDGET) gw;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
388 update_size_hints_internal (w, w->core.width, w->core.height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389 }