summaryrefslogtreecommitdiff
path: root/uisimulator/screenhack.c
diff options
context:
space:
mode:
Diffstat (limited to 'uisimulator/screenhack.c')
-rw-r--r--uisimulator/screenhack.c135
1 files changed, 68 insertions, 67 deletions
diff --git a/uisimulator/screenhack.c b/uisimulator/screenhack.c
index f234a9711b..f4f5aaa348 100644
--- a/uisimulator/screenhack.c
+++ b/uisimulator/screenhack.c
@@ -91,6 +91,8 @@ static char *default_defaults[] = {
91 0 91 0
92}; 92};
93 93
94extern Display* dpy;
95
94static XrmOptionDescRec *merged_options; 96static XrmOptionDescRec *merged_options;
95static int merged_options_size; 97static int merged_options_size;
96static char **merged_defaults; 98static char **merged_defaults;
@@ -179,83 +181,82 @@ static Atom XA_WM_PROTOCOLS, XA_WM_DELETE_WINDOW;
179/* Dead-trivial event handling: exits if "q" or "ESC" are typed. 181/* Dead-trivial event handling: exits if "q" or "ESC" are typed.
180 Exit if the WM_PROTOCOLS WM_DELETE_WINDOW ClientMessage is received. 182 Exit if the WM_PROTOCOLS WM_DELETE_WINDOW ClientMessage is received.
181 */ 183 */
182void 184int
183screenhack_handle_event (Display *dpy, XEvent *event) 185screenhack_handle_event (Display *dpy, XEvent *event)
184{ 186{
185 switch (event->xany.type) 187 int key=0;
188 switch (event->xany.type)
186 { 189 {
187 case KeyPress: 190 case KeyPress:
188 { 191 {
189 KeySym keysym; 192 KeySym keysym;
190 unsigned char c = 0; 193 unsigned char c = 0;
191 XLookupString (&event->xkey, &c, 1, &keysym, 0); 194 XLookupString (&event->xkey, &c, 1, &keysym, 0);
192 if (c == 'q' || 195 if (! (keysym >= XK_Shift_L && keysym <= XK_Hyper_R))
193 c == 'Q' || 196 XBell (dpy, 0); /* beep for non-chord keys */
194 c == 3 || /* ^C */ 197 key = keysym;
195 c == 27) /* ESC */ 198 fprintf(stderr, "KEY PRESSED: %c (%02x)\n", c, c);
196 exit (0); 199 }
197 else if (! (keysym >= XK_Shift_L && keysym <= XK_Hyper_R)) 200 break;
198 XBell (dpy, 0); /* beep for non-chord keys */ 201 case ResizeRequest:
199 202 screen_resized(event->xresizerequest.width, event->xresizerequest.height);
200 fprintf(stderr, "KEY PRESSED: %c (%02x)\n", c, c); 203 screen_redraw();
201 } 204 fprintf(stderr, "WINDOW RESIZED to width %d height %d\n",
202 break; 205 event->xresizerequest.width, event->xresizerequest.height);
203 case ResizeRequest: 206 break;
204 screen_resized(event->xresizerequest.width, event->xresizerequest.height); 207 default:
205 screen_redraw(); 208 fprintf(stderr, "EVENT: %d (see /usr/include/X11/X.h)\n",
206 fprintf(stderr, "WINDOW RESIZED to width %d height %d\n", 209 event->xany.type);
207 event->xresizerequest.width, event->xresizerequest.height); 210 break;
208 break; 211 case Expose:
209 default: 212 screen_redraw();
210 fprintf(stderr, "EVENT: %d (see /usr/include/X11/X.h)\n", 213 fprintf(stderr, "EXPOSE: x: %d y: %d width: %d height: %d\n",
211 event->xany.type); 214 event->xexpose.x, event->xexpose.y,
212 break; 215 event->xexpose.width, event->xexpose.height);
213 case Expose: 216 break;
214 screen_redraw(); 217 case ButtonPress:
215 fprintf(stderr, "EXPOSE: x: %d y: %d width: %d height: %d\n", 218 fprintf(stderr, "BUTTON PRESSED\n");
216 event->xexpose.x, event->xexpose.y, 219 break;
217 event->xexpose.width, event->xexpose.height); 220 case ClientMessage:
218 break; 221 {
219 case ButtonPress: 222 if (event->xclient.message_type != XA_WM_PROTOCOLS)
220 fprintf(stderr, "BUTTON PRESSED\n"); 223 {
221 break; 224 char *s = XGetAtomName(dpy, event->xclient.message_type);
222 case ClientMessage: 225 if (!s) s = "(null)";
223 { 226 fprintf (stderr, "%s: unknown ClientMessage %s received!\n",
224 if (event->xclient.message_type != XA_WM_PROTOCOLS) 227 progname, s);
225 { 228 }
226 char *s = XGetAtomName(dpy, event->xclient.message_type); 229 else if (event->xclient.data.l[0] != XA_WM_DELETE_WINDOW)
227 if (!s) s = "(null)"; 230 {
228 fprintf (stderr, "%s: unknown ClientMessage %s received!\n", 231 char *s1 = XGetAtomName(dpy, event->xclient.message_type);
229 progname, s); 232 char *s2 = XGetAtomName(dpy, event->xclient.data.l[0]);
230 } 233 if (!s1) s1 = "(null)";
231 else if (event->xclient.data.l[0] != XA_WM_DELETE_WINDOW) 234 if (!s2) s2 = "(null)";
232 { 235 fprintf (stderr, "%s: unknown ClientMessage %s[%s] received!\n",
233 char *s1 = XGetAtomName(dpy, event->xclient.message_type); 236 progname, s1, s2);
234 char *s2 = XGetAtomName(dpy, event->xclient.data.l[0]); 237 }
235 if (!s1) s1 = "(null)"; 238 else
236 if (!s2) s2 = "(null)"; 239 {
237 fprintf (stderr, "%s: unknown ClientMessage %s[%s] received!\n", 240 exit (0);
238 progname, s1, s2); 241 }
239 } 242 }
240 else 243 break;
241 {
242 exit (0);
243 }
244 }
245 break;
246 } 244 }
245 return key;
247} 246}
248 247
249 248
250void 249int
251screenhack_handle_events (Display *dpy) 250screenhack_handle_events (void)
252{ 251{
253 while (XPending (dpy)) 252 int key=0;
253 while (XPending (dpy))
254 { 254 {
255 XEvent event; 255 XEvent event;
256 XNextEvent (dpy, &event); 256 XNextEvent (dpy, &event);
257 screenhack_handle_event (dpy, &event); 257 key=screenhack_handle_event (dpy, &event);
258 } 258 }
259 return key;
259} 260}
260 261
261 262