summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjörn Stenberg <bjorn@haxx.se>2002-04-19 14:02:23 +0000
committerBjörn Stenberg <bjorn@haxx.se>2002-04-19 14:02:23 +0000
commit5d4094fc983bf296ca6edce39b9a545c8643ed0b (patch)
treec6251256440c22f62faa1ad582a397240abb279d
parentf9429cc11ba13efb90dc7c8b767a2e552298d0bd (diff)
downloadrockbox-5d4094fc983bf296ca6edce39b9a545c8643ed0b.tar.gz
rockbox-5d4094fc983bf296ca6edce39b9a545c8643ed0b.zip
Made handle_events a polling function to allow button scanning
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@146 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--uisimulator/screenhack.c135
-rw-r--r--uisimulator/screenhack.h4
2 files changed, 70 insertions, 69 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
diff --git a/uisimulator/screenhack.h b/uisimulator/screenhack.h
index fe68bc603e..12cd873e22 100644
--- a/uisimulator/screenhack.h
+++ b/uisimulator/screenhack.h
@@ -89,8 +89,8 @@ extern XrmOptionDescRec options [];
89extern char *defaults []; 89extern char *defaults [];
90 90
91extern void screenhack (Display*,Window); 91extern void screenhack (Display*,Window);
92extern void screenhack_handle_event (Display*, XEvent*); 92extern int screenhack_handle_event (Display*, XEvent*);
93extern void screenhack_handle_events (Display*); 93extern int screenhack_handle_events (void);
94extern void screen_redraw(); 94extern void screen_redraw();
95extern void screen_resized(); 95extern void screen_resized();
96 96