1
0
Fork 0
forked from len0rd/rockbox

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
This commit is contained in:
Björn Stenberg 2002-04-19 14:02:23 +00:00
parent f9429cc11b
commit 5d4094fc98
2 changed files with 70 additions and 69 deletions

View file

@ -91,6 +91,8 @@ static char *default_defaults[] = {
0 0
}; };
extern Display* dpy;
static XrmOptionDescRec *merged_options; static XrmOptionDescRec *merged_options;
static int merged_options_size; static int merged_options_size;
static char **merged_defaults; static char **merged_defaults;
@ -179,83 +181,82 @@ static Atom XA_WM_PROTOCOLS, XA_WM_DELETE_WINDOW;
/* Dead-trivial event handling: exits if "q" or "ESC" are typed. /* Dead-trivial event handling: exits if "q" or "ESC" are typed.
Exit if the WM_PROTOCOLS WM_DELETE_WINDOW ClientMessage is received. Exit if the WM_PROTOCOLS WM_DELETE_WINDOW ClientMessage is received.
*/ */
void int
screenhack_handle_event (Display *dpy, XEvent *event) screenhack_handle_event (Display *dpy, XEvent *event)
{ {
switch (event->xany.type) int key=0;
switch (event->xany.type)
{ {
case KeyPress: case KeyPress:
{ {
KeySym keysym; KeySym keysym;
unsigned char c = 0; unsigned char c = 0;
XLookupString (&event->xkey, &c, 1, &keysym, 0); XLookupString (&event->xkey, &c, 1, &keysym, 0);
if (c == 'q' || if (! (keysym >= XK_Shift_L && keysym <= XK_Hyper_R))
c == 'Q' || XBell (dpy, 0); /* beep for non-chord keys */
c == 3 || /* ^C */ key = keysym;
c == 27) /* ESC */ fprintf(stderr, "KEY PRESSED: %c (%02x)\n", c, c);
exit (0); }
else if (! (keysym >= XK_Shift_L && keysym <= XK_Hyper_R)) break;
XBell (dpy, 0); /* beep for non-chord keys */ case ResizeRequest:
screen_resized(event->xresizerequest.width, event->xresizerequest.height);
fprintf(stderr, "KEY PRESSED: %c (%02x)\n", c, c); screen_redraw();
} fprintf(stderr, "WINDOW RESIZED to width %d height %d\n",
break; event->xresizerequest.width, event->xresizerequest.height);
case ResizeRequest: break;
screen_resized(event->xresizerequest.width, event->xresizerequest.height); default:
screen_redraw(); fprintf(stderr, "EVENT: %d (see /usr/include/X11/X.h)\n",
fprintf(stderr, "WINDOW RESIZED to width %d height %d\n", event->xany.type);
event->xresizerequest.width, event->xresizerequest.height); break;
break; case Expose:
default: screen_redraw();
fprintf(stderr, "EVENT: %d (see /usr/include/X11/X.h)\n", fprintf(stderr, "EXPOSE: x: %d y: %d width: %d height: %d\n",
event->xany.type); event->xexpose.x, event->xexpose.y,
break; event->xexpose.width, event->xexpose.height);
case Expose: break;
screen_redraw(); case ButtonPress:
fprintf(stderr, "EXPOSE: x: %d y: %d width: %d height: %d\n", fprintf(stderr, "BUTTON PRESSED\n");
event->xexpose.x, event->xexpose.y, break;
event->xexpose.width, event->xexpose.height); case ClientMessage:
break; {
case ButtonPress: if (event->xclient.message_type != XA_WM_PROTOCOLS)
fprintf(stderr, "BUTTON PRESSED\n"); {
break; char *s = XGetAtomName(dpy, event->xclient.message_type);
case ClientMessage: if (!s) s = "(null)";
{ fprintf (stderr, "%s: unknown ClientMessage %s received!\n",
if (event->xclient.message_type != XA_WM_PROTOCOLS) progname, s);
{ }
char *s = XGetAtomName(dpy, event->xclient.message_type); else if (event->xclient.data.l[0] != XA_WM_DELETE_WINDOW)
if (!s) s = "(null)"; {
fprintf (stderr, "%s: unknown ClientMessage %s received!\n", char *s1 = XGetAtomName(dpy, event->xclient.message_type);
progname, s); char *s2 = XGetAtomName(dpy, event->xclient.data.l[0]);
} if (!s1) s1 = "(null)";
else if (event->xclient.data.l[0] != XA_WM_DELETE_WINDOW) if (!s2) s2 = "(null)";
{ fprintf (stderr, "%s: unknown ClientMessage %s[%s] received!\n",
char *s1 = XGetAtomName(dpy, event->xclient.message_type); progname, s1, s2);
char *s2 = XGetAtomName(dpy, event->xclient.data.l[0]); }
if (!s1) s1 = "(null)"; else
if (!s2) s2 = "(null)"; {
fprintf (stderr, "%s: unknown ClientMessage %s[%s] received!\n", exit (0);
progname, s1, s2); }
} }
else break;
{
exit (0);
}
}
break;
} }
return key;
} }
void int
screenhack_handle_events (Display *dpy) screenhack_handle_events (void)
{ {
while (XPending (dpy)) int key=0;
while (XPending (dpy))
{ {
XEvent event; XEvent event;
XNextEvent (dpy, &event); XNextEvent (dpy, &event);
screenhack_handle_event (dpy, &event); key=screenhack_handle_event (dpy, &event);
} }
return key;
} }

View file

@ -89,8 +89,8 @@ extern XrmOptionDescRec options [];
extern char *defaults []; extern char *defaults [];
extern void screenhack (Display*,Window); extern void screenhack (Display*,Window);
extern void screenhack_handle_event (Display*, XEvent*); extern int screenhack_handle_event (Display*, XEvent*);
extern void screenhack_handle_events (Display*); extern int screenhack_handle_events (void);
extern void screen_redraw(); extern void screen_redraw();
extern void screen_resized(); extern void screen_resized();