annotate src/extw-Xt.c @ 3063:d30cd499e445

[xemacs-hg @ 2005-11-13 10:48:01 by ben] further error-checking, etc. alloc.c, lrecord.h: Move around the handling of setting of lheader->uid so it's in set_lheader_implementation() -- that way, even non-MC-ALLOC builds get useful uid's in their bare lrecords. Redo related code for strings so the non-ascii count that is stored in the uid isn't hosed. events.c: Save and restore the uid around event zeroing/deadbeefing. lisp.h: Set the correct value of MAX_STRING_ASCII_BEGIN under MC_ALLOC. lisp.h: rearrange the basic code handling ints and chars. basic int stuff goes first, followed by basic char stuff, followed in turn by stuff that mixes ints and chars. this is required since some basic defn's have become inline functions. XCHAR and CHARP have additional error-checking in that they check to make sure that the value in question is not just a character but a valid character (i.e. its numeric value is valid). print.c: debug_p4 now has a useful UID in all cases and uses it; but it also prints the raw header address (previously, you just got one of them). text.h: some basic char defn's that belonged in lisp.h have been moved there. valid_ichar_p() is moved too since the inline functions need it.
author ben
date Sun, 13 Nov 2005 10:48:04 +0000
parents 2e4be8dd02fc
children 4fbcce3f6097
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
2110
f18c80177dfe [xemacs-hg @ 2004-06-03 10:10:45 by didierv]
didierv
parents: 2108
diff changeset
31 EXTERN_C 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)
2110
f18c80177dfe [xemacs-hg @ 2004-06-03 10:10:45 by didierv]
didierv
parents: 2108
diff changeset
48 EXTERN_C int
f18c80177dfe [xemacs-hg @ 2004-06-03 10:10:45 by didierv]
didierv
parents: 2108
diff changeset
49 _XtWaitForSomething (XtAppContext app, _XtBoolean ignoreEvents,
f18c80177dfe [xemacs-hg @ 2004-06-03 10:10:45 by didierv]
didierv
parents: 2108
diff changeset
50 _XtBoolean ignoreTimers, _XtBoolean ignoreInputs,
f18c80177dfe [xemacs-hg @ 2004-06-03 10:10:45 by didierv]
didierv
parents: 2108
diff changeset
51 _XtBoolean ignoreSignals, _XtBoolean block,
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
52 #ifdef XTHREADS
2110
f18c80177dfe [xemacs-hg @ 2004-06-03 10:10:45 by didierv]
didierv
parents: 2108
diff changeset
53 _XtBoolean drop_lock,
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
54 #endif
2110
f18c80177dfe [xemacs-hg @ 2004-06-03 10:10:45 by didierv]
didierv
parents: 2108
diff changeset
55 unsigned long *howlong);
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
56
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
57 # ifndef XTHREADS
2108
8de911beca70 [xemacs-hg @ 2004-06-02 09:16:14 by didierv]
didierv
parents: 1094
diff changeset
58 # define _XT_WAIT_FOR_SOMETHING(timers,inputs,events,block,howlong,appCtx) \
8de911beca70 [xemacs-hg @ 2004-06-02 09:16:14 by didierv]
didierv
parents: 1094
diff changeset
59 _XtWaitForSomething (appCtx,events,timers,inputs,0,block,howlong)
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
60 # else
2108
8de911beca70 [xemacs-hg @ 2004-06-02 09:16:14 by didierv]
didierv
parents: 1094
diff changeset
61 # define _XT_WAIT_FOR_SOMETHING(timers,inputs,events,block,howlong,appCtx) \
8de911beca70 [xemacs-hg @ 2004-06-02 09:16:14 by didierv]
didierv
parents: 1094
diff changeset
62 _XtWaitForSomething (appCtx,events,timers,inputs,0,block,1,howlong)
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
63 # endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
64 #else
2110
f18c80177dfe [xemacs-hg @ 2004-06-03 10:10:45 by didierv]
didierv
parents: 2108
diff changeset
65 EXTERN_C int
f18c80177dfe [xemacs-hg @ 2004-06-03 10:10:45 by didierv]
didierv
parents: 2108
diff changeset
66 _XtwaitForSomething (Boolean ignoreTimers, Boolean ignoreInputs,
f18c80177dfe [xemacs-hg @ 2004-06-03 10:10:45 by didierv]
didierv
parents: 2108
diff changeset
67 Boolean ignoreEvents, Boolean block,
f18c80177dfe [xemacs-hg @ 2004-06-03 10:10:45 by didierv]
didierv
parents: 2108
diff changeset
68 unsigned long *howlong, XtAppContext app);
2114
2e4be8dd02fc [xemacs-hg @ 2004-06-06 12:35:44 by malcolmp]
malcolmp
parents: 2110
diff changeset
69 # define _XT_WAIT_FOR_SOMETHING(timers,inputs,events,block,howlong,appCtx) \
2e4be8dd02fc [xemacs-hg @ 2004-06-06 12:35:44 by malcolmp]
malcolmp
parents: 2110
diff changeset
70 _XtwaitForSomething (timers,inputs,events,block,howlong,appCtx)
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
71 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
72
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
73 #ifdef DEBUG_WIDGET
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
74
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
75 static int geom_masks[] = {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
76 CWX, CWY, CWWidth, CWHeight, CWBorderWidth, CWSibling, CWStackMode,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
77 XtCWQueryOnly };
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
78 static char *geom_mask_strings[] = {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
79 "CWX", "CWY", "CWWidth", "CWHeight", "CWBorderWidth",
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
80 "CWSibling", "CWStackMode", "XtCWQueryOnly" };
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
81 static int stack_modes[] = {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
82 Below, TopIf, BottomIf, Opposite, XtSMDontChange };
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
83 static char *stack_mode_strings[] = {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
84 "Below", "TopIf", "BottomIf", "Opposite", "XtSMDontChange" };
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
85
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
86 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
87 print_geometry_structure(XtWidgetGeometry *xwg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
88 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
89 int num = sizeof(geom_masks)/sizeof(int);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
90 int i;
2108
8de911beca70 [xemacs-hg @ 2004-06-02 09:16:14 by didierv]
didierv
parents: 1094
diff changeset
91
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
92 printf (" masks:");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
93 for (i=0; i<num; i++)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
94 if (xwg->request_mode & geom_masks[i])
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
95 printf (" %s", geom_mask_strings[i]);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
96 printf ("\n");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
97 printf (" x:%d y:%d\n", xwg->x, xwg->y);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
98 printf (" width:%d height:%d border_width:%d\n", xwg->width,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
99 xwg->height, xwg->border_width);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
100 printf (" sibling: %x\n", xwg->sibling);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
101 printf (" stack_mode: ");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
102 for (i=0, num=sizeof(stack_modes)/sizeof(int); i<num; i++)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
103 if (xwg->stack_mode == stack_modes[i]) {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
104 printf ("%s", stack_mode_strings[i]);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
105 break;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
106 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
107 printf ("\n");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
108 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
109
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
110 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
111 print_geometry_result (XtGeometryResult res)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
112 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
113 printf ("result: %s\n",
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
114 res == XtGeometryYes ? "XtGeometryYes" :
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
115 res == XtGeometryNo ? "XtGeometryNo" :
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
116 res == XtGeometryAlmost ? "XtGeometryAlmost" :
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
117 res == XtGeometryDone ? "XtGeometryDone" :
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
118 "unknown");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
119 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
120
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
121 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
122
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
123 #ifndef emacs
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
124
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
125 static void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
126 fatal (char *msg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
127 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
128 fprintf (stderr, "%s", msg);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
129 exit (1);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
130 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
131
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
132 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
133
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
134 /* put a geometry specification in the specified property on the window
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
135 of the specified widget, and send a notification message to tell the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
136 client-side widget about this. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
137
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
138 void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
139 extw_send_geometry_value(Display *display, Window win, Atom property,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
140 en_extw_notify type, XtWidgetGeometry *xwg,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
141 long data0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
142 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
143 if (xwg != NULL)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
144 XChangeProperty(display, win, property,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
145 a_EXTW_WIDGET_GEOMETRY, 32, PropModeReplace,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
146 (unsigned char *) xwg, sizeof(*xwg)/sizeof(int));
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
147 extw_send_notify_3(display, win, type, data0, 0, 0);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
148 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
149
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
150 /* get the geometry specification stored in the specified property of the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
151 specified widget's window. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
152
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
153 void
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
154 extw_get_geometry_value(Display *display, Window win, Atom property,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
155 XtWidgetGeometry *xwg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
156 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
157 Atom dummy;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
158 int format;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
159 unsigned long nitems, bytes_after;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
160 unsigned char *prop;
2108
8de911beca70 [xemacs-hg @ 2004-06-02 09:16:14 by didierv]
didierv
parents: 1094
diff changeset
161
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
162 if (XGetWindowProperty(display, win, property, 0,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
163 sizeof(*xwg)/4, False, a_EXTW_WIDGET_GEOMETRY,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
164 &dummy, &format, &nitems, &bytes_after,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
165 &prop) != Success)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
166 goto error;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
167 if (format != 8*sizeof(int) || bytes_after) {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
168 XFree((char *) prop);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
169 goto error;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
170 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
171 *xwg = * (XtWidgetGeometry *) prop;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
172 return;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
173
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
174 error:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
175 fatal("Unable to retrieve property for widget-geometry");
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
176 #if 0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
177 XtAppErrorMsg(XtWidgetToApplicationContext((Widget)w),
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
178 "invalidProperty","get_geometry_value",XtCXtToolkitError,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
179 "Unable to retrieve property for widget-geometry",
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
180 (String *)NULL, (Cardinal *)NULL);
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
181 #endif
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
182 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
183
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
184 typedef struct {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
185 Widget w;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
186 unsigned long request_num;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
187 en_extw_notify type;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
188 } QueryStruct;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
189
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
190 /* check if an event is of the sort we're looking for */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
191
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
192 static Bool
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
193 isMine(Display *dpy, XEvent *event, char *arg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
194 {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
195 QueryStruct *q = (QueryStruct *) arg;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
196 Widget w = q->w;
2108
8de911beca70 [xemacs-hg @ 2004-06-02 09:16:14 by didierv]
didierv
parents: 1094
diff changeset
197
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
198 if ( (dpy != XtDisplay(w)) || (event->xany.window != XtWindow(w)) ) {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
199 return FALSE;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
200 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
201 if (event->xany.serial >= q->request_num) {
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
202 if (event->type == ClientMessage &&
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
203 event->xclient.message_type == a_EXTW_NOTIFY &&
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
204 event->xclient.data.l[0] == 1 - extw_which_side &&
1094
4f4c898836ab [xemacs-hg @ 2002-11-11 15:34:11 by stephent]
stephent
parents: 398
diff changeset
205 (en_extw_notify) event->xclient.data.l[1] == q->type)
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
206 return TRUE;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
207 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
208 return FALSE;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
209 }
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
210
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
211 /* wait for a ClientMessage of the specified type from the other widget, or
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
212 time-out. isMine() determines whether an event matches. Culled from
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
213 Shell.c. */
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
214
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
215 Bool
2108
8de911beca70 [xemacs-hg @ 2004-06-02 09:16:14 by didierv]
didierv
parents: 1094
diff changeset
216 extw_wait_for_response (Widget w, XEvent *event, unsigned long request_num,
8de911beca70 [xemacs-hg @ 2004-06-02 09:16:14 by didierv]
didierv
parents: 1094
diff changeset
217 en_extw_notify type, unsigned long timeout)
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
218 {
2108
8de911beca70 [xemacs-hg @ 2004-06-02 09:16:14 by didierv]
didierv
parents: 1094
diff changeset
219 XtAppContext app = XtWidgetToApplicationContext(w);
8de911beca70 [xemacs-hg @ 2004-06-02 09:16:14 by didierv]
didierv
parents: 1094
diff changeset
220 QueryStruct q;
8de911beca70 [xemacs-hg @ 2004-06-02 09:16:14 by didierv]
didierv
parents: 1094
diff changeset
221
8de911beca70 [xemacs-hg @ 2004-06-02 09:16:14 by didierv]
didierv
parents: 1094
diff changeset
222 XFlush(XtDisplay(w));
8de911beca70 [xemacs-hg @ 2004-06-02 09:16:14 by didierv]
didierv
parents: 1094
diff changeset
223 q.w = w;
8de911beca70 [xemacs-hg @ 2004-06-02 09:16:14 by didierv]
didierv
parents: 1094
diff changeset
224 q.request_num = request_num;
8de911beca70 [xemacs-hg @ 2004-06-02 09:16:14 by didierv]
didierv
parents: 1094
diff changeset
225 q.type = type;
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
226
2108
8de911beca70 [xemacs-hg @ 2004-06-02 09:16:14 by didierv]
didierv
parents: 1094
diff changeset
227 for(;;)
8de911beca70 [xemacs-hg @ 2004-06-02 09:16:14 by didierv]
didierv
parents: 1094
diff changeset
228 {
8de911beca70 [xemacs-hg @ 2004-06-02 09:16:14 by didierv]
didierv
parents: 1094
diff changeset
229 /*
8de911beca70 [xemacs-hg @ 2004-06-02 09:16:14 by didierv]
didierv
parents: 1094
diff changeset
230 * look for match event
8de911beca70 [xemacs-hg @ 2004-06-02 09:16:14 by didierv]
didierv
parents: 1094
diff changeset
231 */
8de911beca70 [xemacs-hg @ 2004-06-02 09:16:14 by didierv]
didierv
parents: 1094
diff changeset
232 if (XCheckIfEvent (XtDisplay(w), event, isMine, (char*)&q))
8de911beca70 [xemacs-hg @ 2004-06-02 09:16:14 by didierv]
didierv
parents: 1094
diff changeset
233 return TRUE;
8de911beca70 [xemacs-hg @ 2004-06-02 09:16:14 by didierv]
didierv
parents: 1094
diff changeset
234 if (_XT_WAIT_FOR_SOMETHING (TRUE, TRUE, FALSE, TRUE, &timeout, app)
8de911beca70 [xemacs-hg @ 2004-06-02 09:16:14 by didierv]
didierv
parents: 1094
diff changeset
235 != -1)
8de911beca70 [xemacs-hg @ 2004-06-02 09:16:14 by didierv]
didierv
parents: 1094
diff changeset
236 continue;
8de911beca70 [xemacs-hg @ 2004-06-02 09:16:14 by didierv]
didierv
parents: 1094
diff changeset
237 if (timeout == 0)
8de911beca70 [xemacs-hg @ 2004-06-02 09:16:14 by didierv]
didierv
parents: 1094
diff changeset
238 return FALSE;
8de911beca70 [xemacs-hg @ 2004-06-02 09:16:14 by didierv]
didierv
parents: 1094
diff changeset
239 }
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
240 }