Mercurial > hg > xemacs-beta
annotate src/EmacsShell.c @ 5724:ede80ef92a74
Make soft links in src for module source files, if built in to the executable.
This ensures that those files are built with the same compiler flags as all
other source files.
See these xemacs-beta messages:
<CAHCOHQn+q=Xuwq+y68dvqi7afAP9f-TdB7=8YiZ8VYO816sjHg@mail.gmail.com>
<f5by5ejqiyk.fsf@calexico.inf.ed.ac.uk>
author | Jerry James <james@xemacs.org> |
---|---|
date | Sat, 02 Mar 2013 14:32:37 -0700 |
parents | 308d34e9f07d |
children |
rev | line source |
---|---|
428 | 1 /* Emacs shell widget -- glue. |
2 Copyright (C) 1994, 1995 Sun Microsystems, Inc. | |
3 | |
4 This file is part of XEmacs. | |
5 | |
5402
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
2500
diff
changeset
|
6 XEmacs is free software: you can redistribute it and/or modify it |
428 | 7 under the terms of the GNU General Public License as published by the |
5402
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
2500
diff
changeset
|
8 Free Software Foundation, either version 3 of the License, or (at your |
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
2500
diff
changeset
|
9 option) any later version. |
428 | 10 |
11 XEmacs is distributed in the hope that it will be useful, but WITHOUT | |
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
14 for more details. | |
15 | |
16 You should have received a copy of the GNU General Public License | |
5402
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
2500
diff
changeset
|
17 along with XEmacs. If not, see <http://www.gnu.org/licenses/>. */ |
428 | 18 |
19 /* Synched up with: Not in FSF. */ | |
20 | |
21 /* Written by Ben Wing, May, 1994. */ | |
22 | |
23 #include <config.h> | |
24 | |
25 #include <stdio.h> | |
26 #include <assert.h> | |
27 #include <stdlib.h> | |
28 #include <X11/StringDefs.h> | |
29 #include "xintrinsicp.h" | |
30 #include <X11/Shell.h> | |
31 #include <X11/ShellP.h> | |
32 #include "EmacsShell.h" | |
33 #include "ExternalShell.h" | |
34 | |
2500 | 35 #define ABORT abort |
36 | |
428 | 37 #if 0 /* Not currently used */ |
38 | |
39 /* The root_geometry_manager() method in Shell.c is fucked up with regard | |
40 to the user-specified-position vs. program-specified-position and | |
41 user-specified-size vs. program-specified-size flag. (It always | |
42 sets program-specified whenever the program requests a change | |
43 in its size or position, even when this came from direct user | |
44 request.) So we provide external entry points to fix this after | |
45 the program requested a size or position change. If it turns | |
46 out that the user-specified-position flag needs to be set at the | |
47 *same* time that the geometry change request is made, then we | |
48 will have to duplicate the entire root_geometry_manager() method; | |
49 but I don't think there are any WM's that require this. */ | |
50 | |
51 /* junk stolen from IntrinsicI.h */ | |
52 | |
53 extern void _XtAllocError( String /* alloc_type */); | |
54 | |
55 /* junk ungraciously copied from Shell.c */ | |
56 | |
57 static void ComputeWMSizeHints(w, hints) | |
58 WMShellWidget w; | |
59 XSizeHints *hints; | |
60 { | |
61 long flags; | |
62 hints->flags = flags = w->wm.size_hints.flags; | |
63 #define copy(field) hints->field = w->wm.size_hints.field | |
64 if (flags & (USPosition | PPosition)) { | |
65 copy(x); | |
66 copy(y); | |
67 } | |
68 if (flags & (USSize | PSize)) { | |
69 copy(width); | |
70 copy(height); | |
71 } | |
72 if (flags & PMinSize) { | |
73 copy(min_width); | |
74 copy(min_height); | |
75 } | |
76 if (flags & PMaxSize) { | |
77 copy(max_width); | |
78 copy(max_height); | |
79 } | |
80 if (flags & PResizeInc) { | |
81 copy(width_inc); | |
82 copy(height_inc); | |
83 } | |
84 if (flags & PAspect) { | |
85 copy(min_aspect.x); | |
86 copy(min_aspect.y); | |
87 copy(max_aspect.x); | |
88 copy(max_aspect.y); | |
89 } | |
90 #undef copy | |
91 #define copy(field) hints->field = w->wm.field | |
92 if (flags & PBaseSize) { | |
93 copy(base_width); | |
94 copy(base_height); | |
95 } | |
96 if (flags & PWinGravity) | |
97 copy(win_gravity); | |
98 #undef copy | |
99 } | |
100 | |
101 static void _SetWMSizeHints(w) | |
102 WMShellWidget w; | |
103 { | |
104 XSizeHints *size_hints = XAllocSizeHints(); | |
105 | |
106 if (size_hints == NULL) _XtAllocError("XAllocSizeHints"); | |
107 ComputeWMSizeHints(w, size_hints); | |
108 XSetWMNormalHints(XtDisplay((Widget)w), XtWindow((Widget)w), size_hints); | |
109 XFree((char*)size_hints); | |
110 } | |
111 | |
112 /* end of junk ungraciously copied from Shell.c */ | |
113 | |
114 #endif /* 0 */ | |
115 #if 0 /* Not currently used */ | |
116 | |
117 void | |
118 EmacsShellSetSizeUserSpecified (Widget gw) | |
119 { | |
120 WMShellWidget w = (WMShellWidget) gw; | |
121 w->wm.size_hints.flags |= USSize; | |
122 w->wm.size_hints.flags &= ~PSize; | |
123 if (!w->shell.override_redirect && XtIsRealized (gw)) | |
124 _SetWMSizeHints (w); | |
125 } | |
126 | |
127 void | |
128 EmacsShellSetPositionUserSpecified (Widget gw) | |
129 { | |
130 WMShellWidget w = (WMShellWidget) gw; | |
131 w->wm.size_hints.flags |= USPosition; | |
132 w->wm.size_hints.flags &= ~PPosition; | |
133 if (!w->shell.override_redirect && XtIsRealized (gw)) | |
134 _SetWMSizeHints (w); | |
135 } | |
136 | |
137 #endif /* 0 */ | |
138 | |
139 void | |
140 EmacsShellSmashIconicHint (Widget shell, int iconic_p) | |
141 { | |
142 /* See comment in frame-x.c about this */ | |
143 WMShellWidget wmshell = (WMShellWidget) shell; | |
144 assert (XtIsSubclass (shell, wmShellWidgetClass)); | |
145 /* old_state = (wmshell->wm.wm_hints.flags & StateHint | |
146 ? wmshell->wm.wm_hints.initial_state | |
147 : NormalState); */ | |
148 wmshell->wm.wm_hints.flags |= StateHint; | |
149 wmshell->wm.wm_hints.initial_state = iconic_p ? IconicState : NormalState; | |
150 } | |
151 | |
152 void | |
153 EmacsShellUpdateSizeHints (Widget gw) | |
154 { | |
155 if (XtIsSubclass (gw, topLevelEmacsShellWidgetClass)) | |
156 TopLevelEmacsShellUpdateSizeHints (gw); | |
157 #ifdef EXTERNAL_WIDGET | |
158 else if (XtIsSubclass (gw, externalShellWidgetClass)) | |
159 /* do what ??? Don't abort! */; | |
160 #endif | |
161 else if (XtIsSubclass (gw, transientEmacsShellWidgetClass)) | |
162 TransientEmacsShellUpdateSizeHints (gw); | |
163 else | |
2500 | 164 ABORT (); |
428 | 165 } |