summaryrefslogtreecommitdiff
path: root/uisimulator/x11/screenhack.c
diff options
context:
space:
mode:
Diffstat (limited to 'uisimulator/x11/screenhack.c')
-rw-r--r--uisimulator/x11/screenhack.c121
1 files changed, 59 insertions, 62 deletions
diff --git a/uisimulator/x11/screenhack.c b/uisimulator/x11/screenhack.c
index 0c795e7d19..72915f41a5 100644
--- a/uisimulator/x11/screenhack.c
+++ b/uisimulator/x11/screenhack.c
@@ -166,6 +166,7 @@ static int screenhack_ehandler (Display *dpy, XErrorEvent *error)
166 166
167static Bool MapNotify_event_p (Display *dpy, XEvent *event, XPointer window) 167static Bool MapNotify_event_p (Display *dpy, XEvent *event, XPointer window)
168{ 168{
169 (void)dpy;
169 return (event->xany.type == MapNotify && 170 return (event->xany.type == MapNotify &&
170 event->xvisibility.window == (Window) window); 171 event->xvisibility.window == (Window) window);
171} 172}
@@ -184,64 +185,60 @@ static Atom XA_WM_PROTOCOLS, XA_WM_DELETE_WINDOW;
184int screenhack_handle_event (Display *dpy, XEvent *event) 185int screenhack_handle_event (Display *dpy, XEvent *event)
185{ 186{
186 int key=0; 187 int key=0;
187 switch (event->xany.type) 188 switch (event->xany.type) {
188 { 189 case KeyPress:
189 case KeyPress: 190 {
190 { 191 KeySym keysym;
191 KeySym keysym; 192 unsigned char c = 0;
192 unsigned char c = 0; 193 XLookupString (&event->xkey, &c, 1, &keysym, 0);
193 XLookupString (&event->xkey, &c, 1, &keysym, 0); 194 if (! (keysym >= XK_Shift_L && keysym <= XK_Hyper_R))
194 if (! (keysym >= XK_Shift_L && keysym <= XK_Hyper_R)) 195 XBell (dpy, 0); /* beep for non-chord keys */
195 XBell (dpy, 0); /* beep for non-chord keys */ 196 key = keysym;
196 key = keysym; 197 /* fprintf(stderr, "KEY PRESSED: %c (%02x)\n", c, c); */
197/* fprintf(stderr, "KEY PRESSED: %c (%02x)\n", c, c); */ 198 }
198 } 199 break;
199 break; 200 case ResizeRequest:
200 case ResizeRequest: 201 screen_resized(event->xresizerequest.width,
201 screen_resized(event->xresizerequest.width, 202 event->xresizerequest.height);
202 event->xresizerequest.height); 203 screen_redraw();
203 screen_redraw(); 204 fprintf(stderr, "WINDOW RESIZED to width %d height %d\n",
204 fprintf(stderr, "WINDOW RESIZED to width %d height %d\n", 205 event->xresizerequest.width, event->xresizerequest.height);
205 event->xresizerequest.width, event->xresizerequest.height); 206 break;
206 break; 207 default:
207 default:
208/* fprintf(stderr, "EVENT: %d (see /usr/include/X11/X.h)\n", 208/* fprintf(stderr, "EVENT: %d (see /usr/include/X11/X.h)\n",
209 event->xany.type); 209 event->xany.type);
210*/ 210*/
211 break; 211 break;
212 case Expose: 212 case Expose:
213 screen_redraw(); 213 screen_redraw();
214 fprintf(stderr, "EXPOSE: x: %d y: %d width: %d height: %d\n", 214 fprintf(stderr, "EXPOSE: x: %d y: %d width: %d height: %d\n",
215 event->xexpose.x, event->xexpose.y, 215 event->xexpose.x, event->xexpose.y,
216 event->xexpose.width, event->xexpose.height); 216 event->xexpose.width, event->xexpose.height);
217 break; 217 break;
218 case ButtonPress: 218 case ButtonPress:
219 fprintf(stderr, "BUTTON PRESSED: x: %d y:%d\n",event->xbutton.x,event->xbutton.y); 219 fprintf(stderr, "BUTTON PRESSED: x: %d y:%d\n",event->xbutton.x,event->xbutton.y);
220 break; 220 break;
221 case ClientMessage: 221 case ClientMessage:
222 { 222 {
223 if (event->xclient.message_type != XA_WM_PROTOCOLS) 223 if (event->xclient.message_type != XA_WM_PROTOCOLS) {
224 { 224 char *s = XGetAtomName(dpy, event->xclient.message_type);
225 char *s = XGetAtomName(dpy, event->xclient.message_type); 225 if (!s) s = "(null)";
226 if (!s) s = "(null)"; 226 fprintf (stderr, "%s: unknown ClientMessage %s received!\n",
227 fprintf (stderr, "%s: unknown ClientMessage %s received!\n", 227 progname, s);
228 progname, s); 228 }
229 } 229 else if (event->xclient.data.l[0] != (int)XA_WM_DELETE_WINDOW) {
230 else if (event->xclient.data.l[0] != XA_WM_DELETE_WINDOW) 230 char *s1 = XGetAtomName(dpy, event->xclient.message_type);
231 { 231 char *s2 = XGetAtomName(dpy, event->xclient.data.l[0]);
232 char *s1 = XGetAtomName(dpy, event->xclient.message_type); 232 if (!s1) s1 = "(null)";
233 char *s2 = XGetAtomName(dpy, event->xclient.data.l[0]); 233 if (!s2) s2 = "(null)";
234 if (!s1) s1 = "(null)"; 234 fprintf (stderr, "%s: unknown ClientMessage %s[%s] received!\n",
235 if (!s2) s2 = "(null)"; 235 progname, s1, s2);
236 fprintf (stderr, "%s: unknown ClientMessage %s[%s] received!\n", 236 }
237 progname, s1, s2); 237 else {
238 } 238 exit (0);
239 else 239 }
240 { 240 }
241 exit (0); 241 break;
242 }
243 }
244 break;
245 } 242 }
246 return key; 243 return key;
247} 244}
@@ -311,10 +308,10 @@ static void visual_warning (Screen *screen, Window window, Visual *visual,
311 if (window == RootWindowOfScreen (screen)) 308 if (window == RootWindowOfScreen (screen))
312 strcpy (win, "root window"); 309 strcpy (win, "root window");
313 else 310 else
314 sprintf (win, "window 0x%x", (unsigned long) window); 311 sprintf (win, "window 0x%lx", (long) window);
315 312
316 if (window_p) 313 if (window_p)
317 sprintf (why, "-window-id 0x%x", (unsigned long) window); 314 sprintf (why, "-window-id 0x%lx", (long)window);
318 else 315 else
319 strcpy (why, "-root"); 316 strcpy (why, "-root");
320 317
@@ -333,8 +330,8 @@ static void visual_warning (Screen *screen, Window window, Visual *visual,
333 { 330 {
334 fprintf (stderr, "%s: ignoring `-visual %s' because of `%s'.\n", 331 fprintf (stderr, "%s: ignoring `-visual %s' because of `%s'.\n",
335 progname, visual_string, why); 332 progname, visual_string, why);
336 fprintf (stderr, "%s: using %s's visual 0x%x.\n", 333 fprintf (stderr, "%s: using %s's visual 0x%lx.\n",
337 progname, win, XVisualIDFromVisual (visual)); 334 progname, win, (long)XVisualIDFromVisual (visual));
338 } 335 }
339 free (visual_string); 336 free (visual_string);
340 } 337 }
@@ -345,8 +342,8 @@ static void visual_warning (Screen *screen, Window window, Visual *visual,
345 { 342 {
346 fprintf (stderr, "%s: ignoring `-install' because of `%s'.\n", 343 fprintf (stderr, "%s: ignoring `-install' because of `%s'.\n",
347 progname, why); 344 progname, why);
348 fprintf (stderr, "%s: using %s's colormap 0x%x.\n", 345 fprintf (stderr, "%s: using %s's colormap 0x%lx.\n",
349 progname, win, (unsigned long) cmap); 346 progname, win, (long) cmap);
350 } 347 }
351} 348}
352 349