iKeyboard navigation - thingmenu - A simple graphical menu launcher for X11. Err bitreich.org 70 hgit clone git://bitreich.org/thingmenu URL:git://bitreich.org/thingmenu bitreich.org 70 1Log /scm/thingmenu/log.gph bitreich.org 70 1Files /scm/thingmenu/files.gph bitreich.org 70 1Refs /scm/thingmenu/refs.gph bitreich.org 70 1Tags /scm/thingmenu/tag bitreich.org 70 1LICENSE /scm/thingmenu/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 2c8bfd20bd0a5f65d9b513083210049701420ad6 /scm/thingmenu/commit/2c8bfd20bd0a5f65d9b513083210049701420ad6.gph bitreich.org 70 1parent 3cf543dfa6b3f04acdead19043cb862e12ad3396 /scm/thingmenu/commit/3cf543dfa6b3f04acdead19043cb862e12ad3396.gph bitreich.org 70 hAuthor: Stephen Paul Weber URL:mailto:singpolyma@singpolyma.net bitreich.org 70 iDate: Tue, 1 Nov 2011 13:10:47 -0500 Err bitreich.org 70 i Err bitreich.org 70 iKeyboard navigation Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M thingmenu.c | 57 +++++++++++++++++++++++++++++-- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 54 insertions(+), 3 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/thingmenu.c b/thingmenu.c /scm/thingmenu/file/thingmenu.c.gph bitreich.org 70 i@@ -56,6 +56,7 @@ typedef struct { Err bitreich.org 70 i Err bitreich.org 70 i /* function declarations */ Err bitreich.org 70 i static void motionnotify(XEvent *e); Err bitreich.org 70 i+static void keyrelease(XEvent *e); Err bitreich.org 70 i static void buttonpress(XEvent *e); Err bitreich.org 70 i static void buttonrelease(XEvent *e); Err bitreich.org 70 i static void cleanup(void); Err bitreich.org 70 i@@ -79,6 +80,7 @@ static void updateentries(void); Err bitreich.org 70 i /* variables */ Err bitreich.org 70 i static int screen; Err bitreich.org 70 i static void (*handler[LASTEvent]) (XEvent *) = { Err bitreich.org 70 i+ [KeyRelease] = keyrelease, Err bitreich.org 70 i [ButtonPress] = buttonpress, Err bitreich.org 70 i [ButtonRelease] = buttonrelease, Err bitreich.org 70 i [ConfigureNotify] = configurenotify, Err bitreich.org 70 i@@ -140,6 +142,55 @@ motionnotify(XEvent *e) Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i+keyrelease(XEvent *e) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ int i; Err bitreich.org 70 i+ XKeyEvent *xkey = &e->xkey; Err bitreich.org 70 i+ KeySym key = XLookupKeysym(xkey, 0); Err bitreich.org 70 i+ Err bitreich.org 70 i+ /* Find highlighted entry */ Err bitreich.org 70 i+ for (i = 0; i < nentries && !entries[i]->highlighted; i++); Err bitreich.org 70 i+ Err bitreich.org 70 i+ switch (key) { Err bitreich.org 70 i+ case XK_k: Err bitreich.org 70 i+ key = XK_Up; Err bitreich.org 70 i+ case XK_j: Err bitreich.org 70 i+ if(key == XK_j) Err bitreich.org 70 i+ key = XK_Down; Err bitreich.org 70 i+ case XK_Up: Err bitreich.org 70 i+ case XK_Down: Err bitreich.org 70 i+ if (i < nentries) { Err bitreich.org 70 i+ entries[i]->highlighted = False; Err bitreich.org 70 i+ drawentry(entries[i]); Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (key == XK_Up) { Err bitreich.org 70 i+ i = ((i - 1) + nentries) % nentries; Err bitreich.org 70 i+ } else if(key == XK_Down) { Err bitreich.org 70 i+ if (i < nentries) { Err bitreich.org 70 i+ i = (i + 1) % nentries; Err bitreich.org 70 i+ } else { Err bitreich.org 70 i+ i = 0; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i+ entries[i]->highlighted = True; Err bitreich.org 70 i+ drawentry(entries[i]); Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ case XK_Return: Err bitreich.org 70 i+ case XK_space: Err bitreich.org 70 i+ if (i < nentries) { Err bitreich.org 70 i+ press(entries[i]); Err bitreich.org 70 i+ unpress(entries[i]); Err bitreich.org 70 i+ } Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ case XK_Escape: Err bitreich.org 70 i+ running = False; Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ } Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+void Err bitreich.org 70 i buttonpress(XEvent *e) Err bitreich.org 70 i { Err bitreich.org 70 i XButtonPressedEvent *ev = &e->xbutton; Err bitreich.org 70 i@@ -431,9 +482,9 @@ setup(void) Err bitreich.org 70 i win = XCreateWindow(dpy, root, wx, wy, ww, wh, 0, Err bitreich.org 70 i CopyFromParent, CopyFromParent, CopyFromParent, Err bitreich.org 70 i CWOverrideRedirect | CWBorderPixel | CWBackingPixel, &wa); Err bitreich.org 70 i- XSelectInput(dpy, win, StructureNotifyMask|ButtonReleaseMask| Err bitreich.org 70 i- ButtonPressMask|ExposureMask|LeaveWindowMask| Err bitreich.org 70 i- PointerMotionMask); Err bitreich.org 70 i+ XSelectInput(dpy, win, StructureNotifyMask|KeyReleaseMask| Err bitreich.org 70 i+ ButtonReleaseMask|ButtonPressMask| Err bitreich.org 70 i+ ExposureMask|LeaveWindowMask|PointerMotionMask); Err bitreich.org 70 i Err bitreich.org 70 i sizeh = XAllocSizeHints(); Err bitreich.org 70 i sizeh->flags = PMaxSize | PMinSize; Err bitreich.org 70 .