wmii

git clone git://oldgit.suckless.org/wmii/
Log | Files | Refs | README | LICENSE

commit 82d419781aa3a3c84e6acebb9dbcda9a77971bb7
parent 96597b39ca94b3cbff6c0cdd98db73b904503651
Author: Anselm R. Garbe <garbeam@wmii.de>
Date:   Sun,  5 Feb 2006 15:26:10 +0200

proceeded with wmiibar bugfixes


Diffstat:
cmd/wmiibar.c | 56+++++++++++++++++++++++++++++++++++++-------------------
1 file changed, 37 insertions(+), 19 deletions(-)

diff --git a/cmd/wmiibar.c b/cmd/wmiibar.c @@ -25,7 +25,7 @@ * filesystem specification * / Droot * /font Ffont <xlib font name> - * /color Fcolor <#RRGGBB> <#RRGGBB> <#RRGGBB> + * /defcolor Fdefcolor <#RRGGBB> <#RRGGBB> <#RRGGBB> * /event Fevent * /expand Fexpand id of expandable label * /ctl Fctl command interface @@ -41,6 +41,7 @@ enum { Ditem, Fctl, Ffont, + Fdefcolor, Fexpand, Fevent, Fdata, /* data to display */ @@ -80,6 +81,8 @@ static GC gc; static Window win; static XRectangle brect, rect; static Pixmap pmap; +static char defcolstr[24]; +static Color defcolor; static void do_pend_fcall(char *event); @@ -104,10 +107,8 @@ new_item() static unsigned int id = 1; Item *it = cext_emallocz(sizeof(Item)); it->id = id++; - if(nitem > 0) { - cext_strlcpy(it->colstr, item[0]->colstr, sizeof(it->colstr)); - it->color = item[0]->color; - } + cext_strlcpy(it->colstr, defcolstr, sizeof(it->colstr)); + it->color = defcolor; item = (Item **)cext_array_attach((void **)item, it, sizeof(Item *), &itemsz); nitem++; } @@ -132,14 +133,14 @@ draw() d.rect.y = 0; d.font = xfont; - if(nitem == 1) { /* /default only */ - d.color = item[0]->color; + if(!nitem) { /* /default only */ + d.color = defcolor; blitz_drawlabel(dpy, &d); } else { if(!iexpand) iexpand = nitem - 1; - for(i = 1; i < nitem; i++) { + for(i = 0; i < nitem; i++) { Item *it = item[i]; it->rect.x = it->rect.y = 0; it->rect.width = it->rect.height = brect.height; @@ -156,13 +157,13 @@ draw() if(w >= brect.width) { /* failsafe mode, give all labels same width */ w = brect.width / nitem; - for(i = 1; i < nitem; i++) + for(i = 0; i < nitem; i++) item[i]->rect.width = w; i--; item[i]->rect.width = brect.width - ((i - 1) * w); } else item[iexpand]->rect.width = brect.width - w; - for(i = 1; i < nitem; i++) { + for(i = 0; i < nitem; i++) { d.color = item[i]->color; if(i > 1) item[i]->rect.x = item[i - 1]->rect.x + item[i - 1]->rect.width; @@ -281,6 +282,7 @@ qid_to_name(Qid *qid) break; case Fctl: return "ctl"; break; case Ffont: return "font"; break; + case Fdefcolor: return "defcolor"; break; case Fexpand: return "expand"; break; case Fdata: return "data"; break; case Fevent: return "event"; break; @@ -302,6 +304,8 @@ name_to_type(char *name) return Fctl; if(!strncmp(name, "font", 5)) return Ffont; + if(!strncmp(name, "defcolor", 9)) + return Fdefcolor; if(!strncmp(name, "expand", 7)) return Fexpand; if(!strncmp(name, "data", 5)) @@ -340,7 +344,7 @@ mkqid(Qid *dir, char *wname, Qid *new) if(!strncmp(wname, "new", 4)) new->path = mkqpath(Ditem, NEW_ITEM); else { - i = cext_strtonum(wname, 1, 0xffff, &err); + i = cext_strtonum(wname, 0, 0xffff, &err); if(err || (i >= nitem)) return -1; new->path = mkqpath(Ditem, item[i]->id); @@ -477,6 +481,9 @@ type_to_stat(Stat *stat, char *name, Qid *dir) return mkstat(stat, dir, name, strlen(font), DMREAD | DMWRITE); break; + case Fdefcolor: + return mkstat(stat, dir, name, 24, DMREAD | DMWRITE); + break; case Fexpand: snprintf(buf, sizeof(buf), "%u", iexpand); return mkstat(stat, dir, name, strlen(buf), DMREAD | DMWRITE); @@ -488,8 +495,6 @@ type_to_stat(Stat *stat, char *name, Qid *dir) DMREAD | DMWRITE); break; case Fcolor: - if(i == nitem) - i = 0; return mkstat(stat, dir, name, 24, DMREAD | DMWRITE); break; } @@ -552,7 +557,7 @@ xread(IXPConn *c, Fcall *fcall) len += type_to_stat(&stat, "color", &m->qid); len += type_to_stat(&stat, "new", &m->qid); len += type_to_stat(&stat, "event", &m->qid); - for(i = 1; i < nitem; i++) { + for(i = 0; i < nitem; i++) { snprintf(buf, sizeof(buf), "%u", i); len += type_to_stat(&stat, buf, &m->qid); if(len <= fcall->offset) @@ -590,7 +595,7 @@ xread(IXPConn *c, Fcall *fcall) p = ixp_enc_stat(p, &stat); fcall->count += type_to_stat(&stat, "event", &m->qid); p = ixp_enc_stat(p, &stat); - for(i = 1; i < nitem; i++) { + for(i = 0; i < nitem; i++) { snprintf(buf, sizeof(buf), "%u", i); len = type_to_stat(&stat, buf, &m->qid); if(fcall->count + len > fcall->iounit) @@ -616,6 +621,10 @@ xread(IXPConn *c, Fcall *fcall) if((fcall->count = strlen(font))) memcpy(p, font, fcall->count); break; + case Fdefcolor: + if((fcall->count = strlen(defcolstr))) + memcpy(p, defcolstr, fcall->count); + break; case Fexpand: snprintf(buf, sizeof(buf), "%u", iexpand); fcall->count = strlen(buf); @@ -701,6 +710,16 @@ xwrite(IXPConn *c, Fcall *fcall) xfont = blitz_getfont(dpy, font); update_geometry(); break; + case Fdefcolor: + if((fcall->count != 24) + || (fcall->data[0] != '#') || (fcall->data[8] != '#') + || (fcall->data[16] != '#') + ) + return "wrong color format"; + memcpy(defcolstr, fcall->data, fcall->count); + defcolstr[fcall->count] = 0; + blitz_loadcolor(dpy, screen, defcolstr, &defcolor); + break; case Fexpand: { const char *err; @@ -840,7 +859,7 @@ main(int argc, char *argv[]) XGCValues gcv; /* command line args */ - for(i = 1; (i < argc) && (argv[i][0] == '-'); i++) { + for(i = 0; (i < argc) && (argv[i][0] == '-'); i++) { switch (argv[i][1]) { case 'v': fprintf(stdout, "%s", version); @@ -884,9 +903,8 @@ main(int argc, char *argv[]) ixp_server_open_conn(&srv, ConnectionNumber(dpy), check_x_event, nil); /* default settings */ - new_item(); - cext_strlcpy(item[0]->colstr, BLITZ_SEL_COLOR, sizeof(item[0]->colstr)); - blitz_loadcolor(dpy, screen, item[0]->colstr, &item[0]->color); + cext_strlcpy(defcolstr, BLITZ_SEL_COLOR, sizeof(defcolstr)); + blitz_loadcolor(dpy, screen, defcolstr, &defcolor); /* X stuff */ font = strdup(BLITZ_FONT);