Mercurial > hg > xemacs-beta
annotate src/EmacsManager.c @ 5050:6f2158fa75ed
Fix quick-build, use asserts() in place of ABORT()
-------------------- ChangeLog entries follow: --------------------
ChangeLog addition:
2010-02-20 Ben Wing <ben@xemacs.org>
* configure.ac (XE_COMPLEX_ARG):
Correct doc of --quick-build: It also doesn't check for Lisp shadows.
src/ChangeLog addition:
2010-02-20 Ben Wing <ben@xemacs.org>
* EmacsFrame.c:
* EmacsFrame.c (EmacsFrameRecomputeCellSize):
* alloca.c (i00afunc):
* buffer.c:
* buffer.c (MARKED_SLOT):
* buffer.c (complex_vars_of_buffer):
* cm.c:
* cm.c (cmcheckmagic):
* console.c:
* console.c (MARKED_SLOT):
* device-x.c:
* device-x.c (x_get_visual_depth):
* emacs.c (sort_args):
* eval.c (throw_or_bomb_out):
* event-stream.c:
* event-stream.c (Fadd_timeout):
* event-stream.c (Fadd_async_timeout):
* event-stream.c (Frecent_keys):
* events.c:
* events.c (Fdeallocate_event):
* events.c (event_pixel_translation):
* extents.c:
* extents.c (process_extents_for_insertion_mapper):
* fns.c (Fbase64_encode_region):
* fns.c (Fbase64_encode_string):
* fns.c (Fbase64_decode_region):
* fns.c (Fbase64_decode_string):
* font-lock.c:
* font-lock.c (find_context):
* frame-x.c:
* frame-x.c (x_wm_mark_shell_size_user_specified):
* frame-x.c (x_wm_mark_shell_position_user_specified):
* frame-x.c (x_wm_set_shell_iconic_p):
* frame-x.c (x_wm_set_cell_size):
* frame-x.c (x_wm_set_variable_size):
* frame-x.c (x_wm_store_class_hints):
* frame-x.c (x_wm_maybe_store_wm_command):
* frame-x.c (x_initialize_frame_size):
* frame.c (delete_frame_internal):
* frame.c (change_frame_size_1):
* free-hook.c (check_free):
* free-hook.c (note_block_input):
* free-hook.c (log_gcpro):
* gccache-gtk.c (gc_cache_lookup):
* gccache-x.c:
* gccache-x.c (gc_cache_lookup):
* glyphs-gtk.c:
* glyphs-gtk.c (init_image_instance_from_gdk_pixmap):
* glyphs-x.c:
* glyphs-x.c (extract_xpm_color_names):
* insdel.c:
* insdel.c (move_gap):
* keymap.c:
* keymap.c (keymap_lookup_directly):
* keymap.c (keymap_delete_inverse_internal):
* keymap.c (accessible_keymaps_mapper_1):
* keymap.c (where_is_recursive_mapper):
* lisp.h:
* lstream.c (make_lisp_buffer_stream_1):
* macros.c:
* macros.c (pop_kbd_macro_event):
* mc-alloc.c (remove_page_from_used_list):
* menubar-x.c:
* menubar-x.c (set_frame_menubar):
* ralloc.c:
* ralloc.c (obtain):
* ralloc.c (relinquish):
* ralloc.c (relocate_blocs):
* ralloc.c (resize_bloc):
* ralloc.c (r_alloc_free):
* ralloc.c (r_re_alloc):
* ralloc.c (r_alloc_thaw):
* ralloc.c (init_ralloc):
* ralloc.c (Free_Addr_Block):
* scrollbar-x.c:
* scrollbar-x.c (x_update_scrollbar_instance_status):
* sunplay.c (init_device):
* unexnt.c:
* unexnt.c (read_in_bss):
* unexnt.c (map_in_heap):
* window.c:
* window.c (real_window):
* window.c (window_display_lines):
* window.c (window_display_buffer):
* window.c (set_window_display_buffer):
* window.c (unshow_buffer):
* window.c (Fget_lru_window):
if (...) ABORT(); ---> assert();
More specifically:
if (x == y) ABORT (); --> assert (x != y);
if (x != y) ABORT (); --> assert (x == y);
if (x > y) ABORT (); --> assert (x <= y);
etc.
if (!x) ABORT (); --> assert (x);
if (x) ABORT (); --> assert (!x);
DeMorgan's Law's applied and manually simplified:
if (x && !y) ABORT (); --> assert (!x || y);
if (!x || y >= z) ABORT (); --> assert (x && y < z);
Checked to make sure that assert() of an expression with side
effects ensures that the side effects get executed even when
asserts are disabled, and add a comment about this being a
requirement of any "disabled assert" expression.
* depend:
* make-src-depend:
* make-src-depend (PrintDeps):
Fix broken code in make-src-depend so it does what it was always
supposed to do, which was separate out config.h and lisp.h and
all the files they include into separate variables in the
depend part of Makefile so that quick-build can turn off the
lisp.h/config.h/text.h/etc. dependencies of the source files, to
speed up recompilation.
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Sat, 20 Feb 2010 05:05:54 -0600 |
parents | 726060ee587c |
children | 308d34e9f07d |
rev | line source |
---|---|
428 | 1 /* Emacs manager widget. |
2 Copyright (C) 1993-1995 Sun Microsystems, Inc. | |
3 Copyright (C) 1995 Ben Wing. | |
4 | |
5 This file is part of XEmacs. | |
6 | |
7 XEmacs is free software; you can redistribute it and/or modify it | |
8 under the terms of the GNU General Public License as published by the | |
9 Free Software Foundation; either version 2, or (at your option) any | |
10 later version. | |
11 | |
12 XEmacs is distributed in the hope that it will be useful, but WITHOUT | |
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
18 along with XEmacs; see the file COPYING. If not, write to | |
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
20 Boston, MA 02111-1307, USA. */ | |
21 | |
22 /* Synched up with: Not in FSF. */ | |
23 | |
24 /* Written by Ben Wing, May, 1994. */ | |
25 | |
26 #include <config.h> | |
27 | |
28 #include <X11/StringDefs.h> | |
29 #include "EmacsManagerP.h" | |
30 #ifdef LWLIB_MENUBARS_MOTIF | |
1315 | 31 #include "xmotif.h" |
428 | 32 #include <Xm/RowColumn.h> |
33 #endif /* LWLIB_MENUBARS_MOTIF */ | |
2286 | 34 #include "compiler.h" |
4528
726060ee587c
First draft of g++ 4.3 warning removal patch. Builds. *Needs ChangeLogs.*
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4522
diff
changeset
|
35 #include "../lwlib/xt-wrappers.h" |
428 | 36 |
37 /* For I, Emacs, am a kind god. Unlike the goddess Athena and the | |
38 Titan Motif, I require no ritual sacrifices to placate the lesser | |
39 daemons of geometry management. */ | |
40 | |
41 static XtResource resources[] = { | |
42 #define offset(field) XtOffset(EmacsManagerWidget, emacs_manager.field) | |
4528
726060ee587c
First draft of g++ 4.3 warning removal patch. Builds. *Needs ChangeLogs.*
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4522
diff
changeset
|
43 #define res(name,_class,intrepr,size,member,extrepr,value) \ |
726060ee587c
First draft of g++ 4.3 warning removal patch. Builds. *Needs ChangeLogs.*
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4522
diff
changeset
|
44 Xt_RESOURCE (name, _class, intrepr, size, offset(member), extrepr, value) |
726060ee587c
First draft of g++ 4.3 warning removal patch. Builds. *Needs ChangeLogs.*
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4522
diff
changeset
|
45 res (XtNresizeCallback, XtCCallback, XtRCallback, XtCallbackList, |
726060ee587c
First draft of g++ 4.3 warning removal patch. Builds. *Needs ChangeLogs.*
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4522
diff
changeset
|
46 resize_callback, XtRImmediate, 0), |
726060ee587c
First draft of g++ 4.3 warning removal patch. Builds. *Needs ChangeLogs.*
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4522
diff
changeset
|
47 res (XtNqueryGeometryCallback, XtCCallback, XtRCallback, XtCallbackList, |
726060ee587c
First draft of g++ 4.3 warning removal patch. Builds. *Needs ChangeLogs.*
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4522
diff
changeset
|
48 query_geometry_callback, XtRImmediate, 0), |
726060ee587c
First draft of g++ 4.3 warning removal patch. Builds. *Needs ChangeLogs.*
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4522
diff
changeset
|
49 res (XtNuserData, XtCUserData, XtRPointer, XtPointer, |
726060ee587c
First draft of g++ 4.3 warning removal patch. Builds. *Needs ChangeLogs.*
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4522
diff
changeset
|
50 user_data, XtRImmediate, 0), |
428 | 51 }; |
52 | |
53 /**************************************************************** | |
54 * | |
55 * Full class record constant | |
56 * | |
57 ****************************************************************/ | |
58 | |
59 static XtGeometryResult QueryGeometry (Widget wid, | |
60 XtWidgetGeometry *request, | |
61 XtWidgetGeometry *reply); | |
62 static void Resize (Widget w); | |
63 static XtGeometryResult GeometryManager (Widget w, XtWidgetGeometry *request, | |
64 XtWidgetGeometry *reply); | |
65 static void ChangeManaged (Widget w); | |
66 static void Realize (Widget w, Mask *valueMask, | |
67 XSetWindowAttributes *attributes); | |
68 static void ClassInitialize (void); | |
69 | |
70 EmacsManagerClassRec emacsManagerClassRec = { | |
71 { | |
72 /* core_class fields */ | |
73 #ifdef LWLIB_USES_MOTIF | |
74 /* superclass */ (WidgetClass) &xmManagerClassRec, | |
75 #else | |
76 /* superclass */ (WidgetClass) &compositeClassRec, | |
77 #endif | |
4528
726060ee587c
First draft of g++ 4.3 warning removal patch. Builds. *Needs ChangeLogs.*
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4522
diff
changeset
|
78 /* class_name */ (String) "EmacsManager", |
440 | 79 /* widget_size */ sizeof (EmacsManagerRec), |
428 | 80 /* class_initialize */ ClassInitialize, |
81 /* class_part_init */ NULL, | |
82 /* class_inited */ FALSE, | |
83 /* initialize */ NULL, | |
84 /* initialize_hook */ NULL, | |
85 /* realize */ Realize, | |
86 /* actions */ NULL, | |
87 /* num_actions */ 0, | |
88 /* resources */ resources, | |
89 /* num_resources */ XtNumber(resources), | |
90 /* xrm_class */ NULLQUARK, | |
91 /* compress_motion */ TRUE, | |
1294 | 92 /* compress_exposure */ XtExposeCompressMaximal | XtExposeNoRegion, |
428 | 93 /* compress_enterleave*/ TRUE, |
94 /* visible_interest */ FALSE, | |
95 /* destroy */ NULL, | |
96 /* resize */ Resize, | |
97 /* expose */ NULL, | |
98 /* set_values */ NULL, | |
99 /* set_values_hook */ NULL, | |
100 /* set_values_almost */ XtInheritSetValuesAlmost, | |
101 /* get_values_hook */ NULL, | |
102 /* accept_focus */ NULL, | |
103 /* version */ XtVersion, | |
104 /* callback_private */ NULL, | |
105 /* tm_table */ XtInheritTranslations, | |
106 /* query_geometry */ QueryGeometry, | |
107 /* display_accelerator*/ XtInheritDisplayAccelerator, | |
108 /* extension */ NULL | |
109 }, | |
110 { | |
111 /* composite_class fields */ | |
112 /* geometry_manager */ GeometryManager, | |
113 /* change_managed */ ChangeManaged, | |
114 /* insert_child */ XtInheritInsertChild, | |
115 /* delete_child */ XtInheritDeleteChild, | |
116 /* extension */ NULL | |
117 }, | |
118 #ifdef LWLIB_USES_MOTIF | |
119 { | |
120 /* constraint_class fields */ | |
121 NULL, /* resource list */ | |
122 0, /* num resources */ | |
123 0, /* constraint size */ | |
124 (XtInitProc)NULL, /* init proc */ | |
125 (XtWidgetProc)NULL, /* destroy proc */ | |
126 (XtSetValuesFunc)NULL, /* set values proc */ | |
127 NULL, /* extension */ | |
128 }, | |
129 { | |
130 /* manager_class fields */ | |
131 XtInheritTranslations, /* translations */ | |
132 NULL, /* syn_resources */ | |
133 0, /* num_syn_resources */ | |
134 NULL, /* syn_cont_resources */ | |
135 0, /* num_syn_cont_resources */ | |
136 XmInheritParentProcess, /* parent_process */ | |
137 NULL, /* extension */ | |
138 }, | |
139 #endif | |
140 { | |
141 /* emacs_manager_class fields */ | |
142 /* empty */ 0, | |
143 } | |
144 }; | |
145 | |
146 WidgetClass emacsManagerWidgetClass = (WidgetClass)&emacsManagerClassRec; | |
147 | |
148 /* What is my preferred size? A suggested size may be given. */ | |
149 | |
150 static XtGeometryResult | |
151 QueryGeometry (Widget w, XtWidgetGeometry *request, XtWidgetGeometry *reply) | |
152 { | |
153 EmacsManagerWidget emw = (EmacsManagerWidget) w; | |
154 EmacsManagerQueryGeometryStruct struc; | |
440 | 155 int request_mode = request->request_mode; |
428 | 156 |
440 | 157 struc.request_mode = request_mode; |
158 struc.proposed_width = (request_mode & CWWidth) ? request->width : 0; | |
159 struc.proposed_height = (request_mode & CWHeight) ? request->height : 0; | |
428 | 160 XtCallCallbackList (w, emw->emacs_manager.query_geometry_callback, &struc); |
161 reply->request_mode = CWWidth | CWHeight; | |
162 reply->width = struc.proposed_width; | |
163 reply->height = struc.proposed_height; | |
440 | 164 if (((request_mode & CWWidth) && (request->width != reply->width)) || |
165 ((request_mode & CWHeight) && (request->height != reply->height))) | |
428 | 166 return XtGeometryAlmost; |
167 return XtGeometryYes; | |
168 } | |
169 | |
170 static void | |
171 Resize (Widget w) | |
172 { | |
173 EmacsManagerWidget emw = (EmacsManagerWidget) w; | |
174 EmacsManagerResizeStruct struc; | |
175 | |
176 struc.width = w->core.width; | |
177 struc.height = w->core.height; | |
178 XtCallCallbackList (w, emw->emacs_manager.resize_callback, &struc); | |
179 } | |
180 | |
181 static XtGeometryResult | |
2286 | 182 GeometryManager (Widget w, XtWidgetGeometry *request, |
183 XtWidgetGeometry *UNUSED (reply)) | |
428 | 184 { |
185 /* Sure, any changes are fine. */ | |
186 | |
440 | 187 #ifdef LWLIB_MENUBARS_MOTIF |
428 | 188 /* The Motif menubar will merrily request a new size every time a |
189 child is added or deleted. Blow it off because it doesn't know | |
190 what it's talking about. */ | |
440 | 191 if (XtClass (w) != xmRowColumnWidgetClass) |
428 | 192 #endif /* LWLIB_MENUBARS_MOTIF */ |
193 { | |
440 | 194 if (request->request_mode & CWWidth) w->core.width = request->width; |
195 if (request->request_mode & CWHeight) w->core.height = request->height; | |
428 | 196 } |
440 | 197 if (request->request_mode & CWBorderWidth) |
198 w->core.border_width = request->border_width; | |
199 if (request->request_mode & CWX) w->core.x = request->x; | |
200 if (request->request_mode & CWY) w->core.y = request->y; | |
428 | 201 |
202 return XtGeometryYes; | |
203 } | |
204 | |
205 static void | |
206 ChangeManaged (Widget w) | |
207 { | |
208 if (!XtIsRealized (w)) | |
209 { | |
440 | 210 XtWidgetGeometry request, reply; |
428 | 211 |
212 /* find out how big we'd like to be ... */ | |
213 | |
440 | 214 request.request_mode = 0; |
215 XtQueryGeometry (w, &request, &reply); | |
216 EmacsManagerChangeSize (w, reply.width, reply.height); | |
428 | 217 } |
218 } | |
219 | |
220 static void | |
221 Realize (Widget w, Mask *valueMask, XSetWindowAttributes *attributes) | |
222 { | |
223 attributes->bit_gravity = NorthWestGravity; | |
224 *valueMask |= CWBitGravity; | |
225 | |
226 XtCreateWindow (w, (unsigned) InputOutput, (Visual *) CopyFromParent, | |
227 *valueMask, attributes); | |
228 } | |
229 | |
230 static void | |
231 ClassInitialize (void) | |
232 { | |
233 return; | |
234 } | |
235 | |
236 void | |
237 EmacsManagerChangeSize (Widget w, Dimension width, Dimension height) | |
238 { | |
239 if (width == 0) | |
240 width = w->core.width; | |
241 if (height == 0) | |
242 height = w->core.height; | |
243 | |
3381 | 244 /* #### AFAICT this gets called in two places. One is in ChangeManaged(), |
245 above. The other is in EmacsFrameResize(). Perhaps ChangeManaged() | |
246 should initiate resize requests, but EmacsFrameResize() should not. | |
247 Unfortunately, I've tried making this conditional on whether we're | |
248 called from EmacsFrameResize() or not, but that results in an infloop | |
249 via the callback to x_layout_widgets() in Resize(). Whee! */ | |
428 | 250 /* do nothing if we're already that size */ |
251 if (w->core.width != width || w->core.height != height) | |
2450 | 252 { |
253 XtGeometryResult result = | |
254 XtMakeResizeRequest (w, width, height, &w->core.width, &w->core.height); | |
255 if (result == XtGeometryNo) | |
256 return; | |
257 if (result == XtGeometryAlmost) | |
258 XtMakeResizeRequest (w, w->core.width, w->core.height, NULL, NULL); | |
259 Resize (w); | |
260 } | |
428 | 261 } |
262 | |
263 |