iHighlight and simple menu items added. - 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 eaa31fec602e3aec1402e83f4e767775f7641bc9 /scm/thingmenu/commit/eaa31fec602e3aec1402e83f4e767775f7641bc9.gph bitreich.org 70 1parent 338b4a391a7991d938921284fe500afeceab1a1b /scm/thingmenu/commit/338b4a391a7991d938921284fe500afeceab1a1b.gph bitreich.org 70 hAuthor: Christoph Lohmann <20h@r-36.net> URL:mailto:20h@r-36.net bitreich.org 70 iDate: Thu, 30 Jun 2011 20:05:08 +0200 Err bitreich.org 70 i Err bitreich.org 70 iHighlight and simple menu items added. Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M config.def.h | 4 +++- Err bitreich.org 70 i M config.h | 4 +++- Err bitreich.org 70 i M thingmenu.c | 65 +++++++++++++++++++++++++------- Err bitreich.org 70 i Err bitreich.org 70 i3 files changed, 58 insertions(+), 15 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/config.def.h b/config.def.h /scm/thingmenu/file/config.def.h.gph bitreich.org 70 i@@ -3,5 +3,7 @@ static const char *font = "-*-*-medium-*-*-*-14-*-*-*-*-*-*-*"; Err bitreich.org 70 i static const char *normbgcolor = "#222222"; Err bitreich.org 70 i static const char *normfgcolor = "#cccccc"; Err bitreich.org 70 i static const char *pressbgcolor = "#ffffff"; Err bitreich.org 70 i-static const char *pressfgcolor = "#555555"; Err bitreich.org 70 i+static const char *pressfgcolor = "#000000"; Err bitreich.org 70 i+static const char *highlightbgcolor = "#bbbbbb"; Err bitreich.org 70 i+static const char *highlightfgcolor = "#000000"; Err bitreich.org 70 i Err bitreich.org 70 1diff --git a/config.h b/config.h /scm/thingmenu/file/config.h.gph bitreich.org 70 i@@ -3,5 +3,7 @@ static const char *font = "-*-*-medium-*-*-*-14-*-*-*-*-*-*-*"; Err bitreich.org 70 i static const char *normbgcolor = "#222222"; Err bitreich.org 70 i static const char *normfgcolor = "#cccccc"; Err bitreich.org 70 i static const char *pressbgcolor = "#ffffff"; Err bitreich.org 70 i-static const char *pressfgcolor = "#555555"; Err bitreich.org 70 i+static const char *pressfgcolor = "#000000"; Err bitreich.org 70 i+static const char *highlightbgcolor = "#bbbbbb"; Err bitreich.org 70 i+static const char *highlightfgcolor = "#000000"; 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@@ -31,6 +31,8 @@ typedef unsigned long ulong; Err bitreich.org 70 i typedef struct { Err bitreich.org 70 i ulong norm[ColLast]; Err bitreich.org 70 i ulong press[ColLast]; Err bitreich.org 70 i+ ulong high[ColLast]; Err bitreich.org 70 i+ Err bitreich.org 70 i Drawable drawable; Err bitreich.org 70 i GC gc; Err bitreich.org 70 i struct { Err bitreich.org 70 i@@ -47,11 +49,13 @@ typedef struct { Err bitreich.org 70 i char *cmd; Err bitreich.org 70 i uint width; Err bitreich.org 70 i int x, y, w, h; Err bitreich.org 70 i+ Bool highlighted; Err bitreich.org 70 i Bool pressed; Err bitreich.org 70 i Bool forceexit; Err bitreich.org 70 i } Entry; 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 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@@ -81,6 +85,7 @@ static void (*handler[LASTEvent]) (XEvent *) = { Err bitreich.org 70 i [UnmapNotify] = unmapnotify, Err bitreich.org 70 i [Expose] = expose, Err bitreich.org 70 i [LeaveNotify] = leavenotify, Err bitreich.org 70 i+ [MotionNotify] = motionnotify Err bitreich.org 70 i }; Err bitreich.org 70 i Err bitreich.org 70 i static Display *dpy; Err bitreich.org 70 i@@ -98,6 +103,30 @@ int oneshot = 1; Err bitreich.org 70 i #include "config.h" Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i+motionnotify(XEvent *e) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ XPointerMovedEvent *ev = &e->xmotion; Err bitreich.org 70 i+ int i; Err bitreich.org 70 i+ Err bitreich.org 70 i+ for(i = 0; i < nentries; i++) { Err bitreich.org 70 i+ if(ev->x > entries[i]->x Err bitreich.org 70 i+ && ev->x < entries[i]->x + entries[i]->w Err bitreich.org 70 i+ && ev->y > entries[i]->y Err bitreich.org 70 i+ && ev->y < entries[i]->y + entries[i]->h) { Err bitreich.org 70 i+ if (entries[i]->highlighted != True) { Err bitreich.org 70 i+ entries[i]->highlighted = True; Err bitreich.org 70 i+ drawentry(entries[i]); Err bitreich.org 70 i+ } Err bitreich.org 70 i+ continue; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ if (entries[i]->highlighted == True) { 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+} 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@@ -177,6 +206,8 @@ drawentry(Entry *e) Err bitreich.org 70 i Err bitreich.org 70 i if(e->pressed) Err bitreich.org 70 i col = dc.press; Err bitreich.org 70 i+ else if(e->highlighted) Err bitreich.org 70 i+ col = dc.high; Err bitreich.org 70 i else Err bitreich.org 70 i col = dc.norm; Err bitreich.org 70 i Err bitreich.org 70 i@@ -225,8 +256,9 @@ findentry(int x, int y) Err bitreich.org 70 i for(i = 0; i < nentries; i++) { Err bitreich.org 70 i if(x > entries[i]->x && x < entries[i]->x + entries[i]->w Err bitreich.org 70 i && y > entries[i]->y Err bitreich.org 70 i- && y < entries[i]->y + entries[i]->h) Err bitreich.org 70 i+ && y < entries[i]->y + entries[i]->h) { Err bitreich.org 70 i return entries[i]; Err bitreich.org 70 i+ } Err bitreich.org 70 i } Err bitreich.org 70 i return NULL; Err bitreich.org 70 i } Err bitreich.org 70 i@@ -258,11 +290,9 @@ initfont(const char *fontstr) Err bitreich.org 70 i XFreeStringList(missing); Err bitreich.org 70 i } Err bitreich.org 70 i if(dc.font.set) { Err bitreich.org 70 i- XFontSetExtents *font_extents; Err bitreich.org 70 i XFontStruct **xfonts; Err bitreich.org 70 i char **font_names; Err bitreich.org 70 i dc.font.ascent = dc.font.descent = 0; Err bitreich.org 70 i- font_extents = XExtentsOfFontSet(dc.font.set); Err bitreich.org 70 i n = XFontsOfFontSet(dc.font.set, &xfonts, &font_names); Err bitreich.org 70 i for(i = 0, dc.font.ascent = 0, dc.font.descent = 0; i < n; i++) { Err bitreich.org 70 i dc.font.ascent = MAX(dc.font.ascent, (*xfonts)->ascent); Err bitreich.org 70 i@@ -374,6 +404,9 @@ setup(void) Err bitreich.org 70 i dc.norm[ColFG] = getcolor(normfgcolor); Err bitreich.org 70 i dc.press[ColBG] = getcolor(pressbgcolor); Err bitreich.org 70 i dc.press[ColFG] = getcolor(pressfgcolor); Err bitreich.org 70 i+ dc.high[ColBG] = getcolor(highlightbgcolor); Err bitreich.org 70 i+ dc.high[ColFG] = getcolor(highlightfgcolor); Err bitreich.org 70 i+ Err bitreich.org 70 i dc.drawable = XCreatePixmap(dpy, root, ww, wh, DefaultDepth(dpy, screen)); Err bitreich.org 70 i dc.gc = XCreateGC(dpy, root, 0, 0); Err bitreich.org 70 i if(!dc.font.set) Err bitreich.org 70 i@@ -388,7 +421,8 @@ setup(void) 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+ ButtonPressMask|ExposureMask|LeaveWindowMask| Err bitreich.org 70 i+ 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 i@@ -512,19 +546,24 @@ main(int argc, char *argv[]) Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i for (; argv[i]; i++) { Err bitreich.org 70 i- sscanf(argv[i], "%1024m[^:]:%1024m[^\n]", &label, &cmd); Err bitreich.org 70 i- if (label == NULL || cmd == NULL) { Err bitreich.org 70 i- if (label == NULL) Err bitreich.org 70 i- free(label); Err bitreich.org 70 i- if (cmd == NULL) Err bitreich.org 70 i- free(cmd); Err bitreich.org 70 i- usage(argv[0]); Err bitreich.org 70 i+ label = argv[i]; Err bitreich.org 70 i+ cmd = strchr(label, ':'); Err bitreich.org 70 i+ if (cmd == NULL) { Err bitreich.org 70 i+ cmd = label; Err bitreich.org 70 i+ } else { Err bitreich.org 70 i+ *cmd++ = '\0'; Err bitreich.org 70 i } Err bitreich.org 70 i+ Err bitreich.org 70 i entries = realloc(entries, sizeof(entries[0])*(++nentries)); Err bitreich.org 70 i entries[nentries-1] = malloc(sizeof(*entries[0])); Err bitreich.org 70 i bzero(entries[nentries-1], sizeof(*entries[0])); Err bitreich.org 70 i- entries[nentries-1]->label = label; Err bitreich.org 70 i- entries[nentries-1]->cmd = cmd; Err bitreich.org 70 i+ Err bitreich.org 70 i+ entries[nentries-1]->label = strdup(label); Err bitreich.org 70 i+ if (entries[nentries-1]->label == NULL) Err bitreich.org 70 i+ die("strdup returned NULL\n"); Err bitreich.org 70 i+ entries[nentries-1]->cmd = strdup(cmd); Err bitreich.org 70 i+ if (entries[nentries-1]->cmd == NULL) Err bitreich.org 70 i+ die("strdup returned NULL\n"); Err bitreich.org 70 i } Err bitreich.org 70 i if (nentries < 1) Err bitreich.org 70 i usage(argv[0]); Err bitreich.org 70 .