annotate src/extw-Xt.c @ 844:047d37eb70d7

[xemacs-hg @ 2002-05-16 13:30:23 by ben] ui fixes for things that were bothering me bytecode.c, editfns.c, lisp.h, lread.c: Fix save-restriction to use markers rather than pseudo-markers (integers representing the amount of text on either side of the region). That way, all inserts are handled correctly, not just those inside old restriction. Add buffer argument to save_restriction_save(). process.c: Clean up very dirty and kludgy code that outputs into a buffer -- use proper unwind protects, etc. font-lock.c: Do save-restriction/widen around the function -- otherwise, incorrect results will ensue when a buffer has been narrowed before a call to e.g. `buffer-syntactic-context' -- something that happens quite often. fileio.c: Look for a handler for make-temp-name. window.c, winslots.h: Try to solve this annoying problem: have two frames displaying the buffer, in different places; in one, temporarily switch away to another buffer and then back -- and you've lost your position; it's reset to the other one in the other frame. My current solution involves window-level caches of buffers and points (also a cache for window-start); when set-window-buffer is called, it looks to see if the buffer was previously visited in the window, and if so, uses the most recent point at that time. (It's a marker, so it handles changes.) #### Note: It could be argued that doing it on the frame level would be better -- e.g. if you visit a buffer temporarily through a grep, and then go back to that buffer, you presumably want the grep's position rather than some previous position provided everything was in the same frame, even though the grep was in another window in the frame. However, doing it on the frame level fails when you have two windows on the same frame. Perhaps we keep both a window and a frame cache, and use the frame cache if there are no other windows on the frame showing the buffer, else the window's cache? This is probably something to be configurable using a specifier. Suggestions please please please? window.c: Clean up a bit code that deals with the annoyance of window-point vs. point. dialog.el: Function to ask a multiple-choice question, automatically choosing a dialog box or minibuffer representation as necessary. Generalized version of yes-or-no-p, y-or-n-p. files.el: Use get-user-response to ask "yes/no/diff" question when recovering. "diff" means that a diff is displayed between the current file and the autosave. (Converts/deconverts escape-quoted as necessary. No more complaints from you, Mr. Turnbull!) One known problem: when a dialog is used, it's modal, so you can't scroll the diff. Will fix soon. lisp-mode.el: If we're filling a string, don't treat semicolon as a comment, which would give very unfriendly results. Uses `buffer-syntactic-context'. simple.el: all changes back to the beginning. (Useful if you've saved the file in the middle of the changes.) simple.el: Add option kill-word-into-kill-ring, which controls whether words deleted with kill-word, backward-kill-word, etc. are "cut" into the kill ring, or "cleared" into nothingness. (My preference is the latter, by far. I'd almost go so far as suggesting we make it the default, as you can always select a word and then cut it if you want it cut.) menubar-items.el: Add option corresponding to kill-word-into-kill-ring.
author ben
date Thu, 16 May 2002 13:30:58 +0000
parents 74fd4e045ea6
children 697ef44129c6 4f4c898836ab
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1 /* Common code between client and shell widgets -- Xt only.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2 Copyright (C) 1993, 1994 Sun Microsystems, Inc.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4 This library is free software; you can redistribute it and/or
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5 modify it under the terms of the GNU Library General Public
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
6 License as published by the Free Software Foundation; either
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
7 version 2 of the License, or (at your option) any later version.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
8
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
9 This library is distributed in the hope that it will be useful,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
12 Library General Public License for more details.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
13
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
14 You should have received a copy of the GNU Library General Public
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
15 License along with this library; if not, write to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
16 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
17 Boston, MA 02111-1307, USA. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
18
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
19 /* Synched up with: Not in FSF. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
20
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
21 /* Written by Ben Wing, September 1993. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
22
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
23 #ifdef emacs
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
24
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
25 #include <config.h>
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
26
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
27 #ifndef EXTERNAL_WIDGET
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
28 ERROR! This ought not be getting compiled if EXTERNAL_WIDGET is undefined
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
29 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
30
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents: 0
diff changeset
31 void fatal (const char *fmt, ...);
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
32 #else /* not emacs */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
33 static void fatal (char *msg);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
34 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
35
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
36 #include <X11/Intrinsic.h>
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
37 #include <X11/IntrinsicP.h>
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
38 #include <stdlib.h>
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
39 #include <stdio.h>
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
40 #include "extw-Xt.h"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
41
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
42 /* Yeah, that's portable!
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
43
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
44 Why the hell didn't the Xt people just export this function
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
45 for real? */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
46
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
47 #if (XT_REVISION > 5)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
48 int _XtWaitForSomething(
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
49 XtAppContext app,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
50 _XtBoolean ignoreEvents,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
51 _XtBoolean ignoreTimers,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
52 _XtBoolean ignoreInputs,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
53 _XtBoolean ignoreSignals,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
54 _XtBoolean block,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
55 #ifdef XTHREADS
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
56 _XtBoolean drop_lock,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
57 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
58 unsigned long *howlong);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
59
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
60 # ifndef XTHREADS
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
61 # define _XtwaitForSomething(timers,inputs,events,block,howlong,appCtx) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
62 _XtWaitForSomething(appCtx,events,timers,inputs,0,block,howlong)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
63 # else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
64 # define _XtwaitForSomething(timers,inputs,events,block,howlong,appCtx) \
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
65 _XtWaitForSomething(appCtx,events,timers,inputs,0,block,1,howlong)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
66 # endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
67 #else
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
68 int _XtwaitForSomething(
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
69 Boolean ignoreTimers,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
70 Boolean ignoreInputs,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
71 Boolean ignoreEvents,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
72 Boolean block,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
73 unsigned long *howlong,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
74 XtAppContext app
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
75 );
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
76 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
77
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
78 #ifdef DEBUG_WIDGET
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
79
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
80 static int geom_masks[] = {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
81 CWX, CWY, CWWidth, CWHeight, CWBorderWidth, CWSibling, CWStackMode,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
82 XtCWQueryOnly };
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
83 static char *geom_mask_strings[] = {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
84 "CWX", "CWY", "CWWidth", "CWHeight", "CWBorderWidth",
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
85 "CWSibling", "CWStackMode", "XtCWQueryOnly" };
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
86 static int stack_modes[] = {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
87 Below, TopIf, BottomIf, Opposite, XtSMDontChange };
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
88 static char *stack_mode_strings[] = {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
89 "Below", "TopIf", "BottomIf", "Opposite", "XtSMDontChange" };
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
90
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
91 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
92 print_geometry_structure(XtWidgetGeometry *xwg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
93 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
94 int num = sizeof(geom_masks)/sizeof(int);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
95 int i;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
96
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
97 printf (" masks:");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
98 for (i=0; i<num; i++)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
99 if (xwg->request_mode & geom_masks[i])
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
100 printf (" %s", geom_mask_strings[i]);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
101 printf ("\n");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
102 printf (" x:%d y:%d\n", xwg->x, xwg->y);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
103 printf (" width:%d height:%d border_width:%d\n", xwg->width,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
104 xwg->height, xwg->border_width);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
105 printf (" sibling: %x\n", xwg->sibling);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
106 printf (" stack_mode: ");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
107 for (i=0, num=sizeof(stack_modes)/sizeof(int); i<num; i++)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
108 if (xwg->stack_mode == stack_modes[i]) {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
109 printf ("%s", stack_mode_strings[i]);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
110 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
111 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
112 printf ("\n");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
113 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
114
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
115 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
116 print_geometry_result (XtGeometryResult res)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
117 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
118 printf ("result: %s\n",
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
119 res == XtGeometryYes ? "XtGeometryYes" :
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
120 res == XtGeometryNo ? "XtGeometryNo" :
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
121 res == XtGeometryAlmost ? "XtGeometryAlmost" :
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
122 res == XtGeometryDone ? "XtGeometryDone" :
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
123 "unknown");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
124 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
125
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
126 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
127
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
128 #ifndef emacs
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
129
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
130 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
131 fatal (char *msg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
132 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
133 fprintf (stderr, "%s", msg);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
134 exit (1);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
135 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
136
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
137 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
138
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
139 /* put a geometry specification in the specified property on the window
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
140 of the specified widget, and send a notification message to tell the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
141 client-side widget about this. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
142
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
143 void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
144 extw_send_geometry_value(Display *display, Window win, Atom property,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
145 en_extw_notify type, XtWidgetGeometry *xwg,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
146 long data0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
147 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
148 if (xwg != NULL)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
149 XChangeProperty(display, win, property,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
150 a_EXTW_WIDGET_GEOMETRY, 32, PropModeReplace,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
151 (unsigned char *) xwg, sizeof(*xwg)/sizeof(int));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
152 extw_send_notify_3(display, win, type, data0, 0, 0);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
153 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
154
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
155 /* get the geometry specification stored in the specified property of the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
156 specified widget's window. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
157
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
158 void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
159 extw_get_geometry_value(Display *display, Window win, Atom property,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
160 XtWidgetGeometry *xwg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
161 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
162 Atom dummy;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
163 int format;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
164 unsigned long nitems, bytes_after;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
165 unsigned char *prop;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
166
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
167 if (XGetWindowProperty(display, win, property, 0,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
168 sizeof(*xwg)/4, False, a_EXTW_WIDGET_GEOMETRY,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
169 &dummy, &format, &nitems, &bytes_after,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
170 &prop) != Success)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
171 goto error;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
172 if (format != 8*sizeof(int) || bytes_after) {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
173 XFree((char *) prop);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
174 goto error;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
175 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
176 *xwg = * (XtWidgetGeometry *) prop;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
177 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
178
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
179 error:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
180 fatal("Unable to retrieve property for widget-geometry");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
181 #if 0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
182 XtAppErrorMsg(XtWidgetToApplicationContext((Widget)w),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
183 "invalidProperty","get_geometry_value",XtCXtToolkitError,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
184 "Unable to retrieve property for widget-geometry",
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
185 (String *)NULL, (Cardinal *)NULL);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
186 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
187 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
188
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
189 typedef struct {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
190 Widget w;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
191 unsigned long request_num;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
192 en_extw_notify type;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
193 } QueryStruct;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
194
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
195 /* check if an event is of the sort we're looking for */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
196
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
197 static Bool
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
198 isMine(Display *dpy, XEvent *event, char *arg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
199 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
200 QueryStruct *q = (QueryStruct *) arg;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
201 Widget w = q->w;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
202
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
203 if ( (dpy != XtDisplay(w)) || (event->xany.window != XtWindow(w)) ) {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
204 return FALSE;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
205 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
206 if (event->xany.serial >= q->request_num) {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
207 if (event->type == ClientMessage &&
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
208 event->xclient.message_type == a_EXTW_NOTIFY &&
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
209 event->xclient.data.l[0] == 1 - extw_which_side &&
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
210 event->xclient.data.l[1] == q->type)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
211 return TRUE;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
212 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
213 return FALSE;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
214 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
215
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
216 /* wait for a ClientMessage of the specified type from the other widget, or
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
217 time-out. isMine() determines whether an event matches. Culled from
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
218 Shell.c. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
219
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
220 Bool
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
221 extw_wait_for_response(Widget w, XEvent *event, unsigned long request_num,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
222 en_extw_notify type, unsigned long timeout)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
223 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
224 XtAppContext app = XtWidgetToApplicationContext(w);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
225 QueryStruct q;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
226
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
227 XFlush(XtDisplay(w));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
228 q.w = w;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
229 q.request_num = request_num;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
230 q.type = type;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
231
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
232 for(;;) {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
233 /*
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
234 * look for match event
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
235 */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
236 if (XCheckIfEvent( XtDisplay(w), event, isMine, (char*)&q))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
237 return TRUE;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
238 if (_XtwaitForSomething(TRUE, TRUE, FALSE, TRUE, &timeout, app)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
239 != -1) continue;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
240 if (timeout == 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
241 return FALSE;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
242 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
243 }