commit ec0d3809c816ba8dfb7e9857e484cb31677a9788
parent 07a14591d1ae662e45513a597de2f0e351079c09
Author: Anselm R. Garbe <garbeam@wmii.de>
Date: Mon, 30 Jan 2006 17:40:08 +0200
simplified wmiibar
Diffstat:
| cmd/wmiibar.c | | | 83 | ++++++++++++++----------------------------------------------------------------- |
| rc/status | | | 1 | - |
2 files changed, 14 insertions(+), 70 deletions(-)
diff --git a/cmd/wmiibar.c b/cmd/wmiibar.c
@@ -24,14 +24,12 @@
/*
* filesystem specification
* / Droot
- * /display Fdisplay 'north', 'south', 'none'
* /font Ffont <xlib font name>
+ * /color Fcolor <#RRGGBB> <#RRGGBB> <#RRGGBB>
* /event Fevent
* /expand Fexpand id of expandable label
* /ctl Fctl command interface
* /new Dnew returns content of new item
- * /default/ Ditem
- * /default/color Fcolor <#RRGGBB> <#RRGGBB> <#RRGGBB>
* /1/ Ditem
* /1/data Fdata <arbitrary data which gets displayed>
* /1/color Fcolor <#RRGGBB> <#RRGGBB> <#RRGGBB>
@@ -42,7 +40,6 @@ enum {
Droot,
Ditem,
Fctl,
- Fdisplay,
Ffont,
Fexpand,
Fevent,
@@ -79,7 +76,6 @@ static Qid root_qid;
static Display *dpy;
static int screen_num;
static char *font = nil;
-static Align align = CENTER;
static XFontStruct *xfont;
static GC gc;
static Window win;
@@ -207,8 +203,7 @@ update_geometry()
char buf[64];
brect = rect;
brect.height = xfont->ascent + xfont->descent + 4;
- if(align == SOUTH)
- brect.y = rect.height - brect.height;
+ brect.y = rect.height - brect.height;
XMoveResizeWindow(dpy, win, brect.x, brect.y, brect.width, brect.height);
XSync(dpy, False);
XFreePixmap(dpy, pmap);
@@ -284,15 +279,12 @@ qid_to_name(Qid *qid)
switch(type) {
case Droot: return "/"; break;
case Ditem:
- if(!i)
- return "default";
- else if(i == nitem)
+ if(i == nitem)
return "new";
snprintf(buf, sizeof(buf), "%u", i);
return buf;
break;
case Fctl: return "ctl"; break;
- case Fdisplay: return "display"; break;
case Ffont: return "font"; break;
case Fexpand: return "expand"; break;
case Fdata: return "data"; break;
@@ -309,12 +301,10 @@ name_to_type(char *name)
unsigned int i;
if(!name || !name[0] || !strncmp(name, "/", 2) || !strncmp(name, "..", 3))
return Droot;
- if(!strncmp(name, "default", 8) || !strncmp(name, "new", 4))
+ if(!strncmp(name, "new", 4))
return Ditem;
if(!strncmp(name, "ctl", 4))
return Fctl;
- if(!strncmp(name, "display", 8))
- return Fdisplay;
if(!strncmp(name, "font", 5))
return Ffont;
if(!strncmp(name, "expand", 7))
@@ -349,9 +339,7 @@ mkqid(Qid *dir, char *wname, Qid *new)
break;
case Ditem:
new->type = IXP_QTDIR;
- if(!strncmp(wname, "default", 8))
- new->path = mkqpath(Ditem, 0);
- else if(!strncmp(wname, "new", 4))
+ if(!strncmp(wname, "new", 4))
new->path = mkqpath(Ditem, nitem);
else {
unsigned short i = cext_strtonum(wname, 1, 0xffff, &err);
@@ -490,12 +478,6 @@ type_to_stat(Stat *stat, char *name, unsigned short i)
case Fctl:
return mkstat(stat, &root_qid, name, 0, DMWRITE);
break;
- case Fdisplay:
- if(align == SOUTH || align == NORTH)
- return mkstat(stat, &root_qid, name, 6, DMREAD | DMWRITE);
- else
- return mkstat(stat, &root_qid, name, 5, DMREAD | DMWRITE);
- break;
case Fevent:
return mkstat(stat, &root_qid, name, 0, DMREAD);
break;
@@ -573,15 +555,14 @@ xread(IXPConn *c)
case Droot:
/* jump to offset */
len = type_to_stat(&stat, "ctl", 0);
- len += type_to_stat(&stat, "display", 0);
len += type_to_stat(&stat, "font", 0);
+ len += type_to_stat(&stat, "color", 0);
len += type_to_stat(&stat, "new", 0);
len += type_to_stat(&stat, "event", 0);
- len += type_to_stat(&stat, "default", 0);
for(i = 1; i < nitem; i++) {
snprintf(buf, sizeof(buf), "%u", i);
len += type_to_stat(&stat, buf, i);
- if(len < c->fcall->offset)
+ if(len <= c->fcall->offset)
continue;
else
break;
@@ -590,7 +571,7 @@ xread(IXPConn *c)
for(; i < nitem; i++) {
snprintf(buf, sizeof(buf), "%u", i);
len = type_to_stat(&stat, buf, i);
- if(c->fcall->count + len >= c->fcall->iounit)
+ if(c->fcall->count + len > c->fcall->iounit)
break;
c->fcall->count += len;
p = ixp_enc_stat(p, &stat);
@@ -608,20 +589,18 @@ xread(IXPConn *c)
case Droot:
c->fcall->count = type_to_stat(&stat, "ctl", 0);
p = ixp_enc_stat(p, &stat);
- c->fcall->count += type_to_stat(&stat, "display", 0);
- p = ixp_enc_stat(p, &stat);
c->fcall->count += type_to_stat(&stat, "font", 0);
p = ixp_enc_stat(p, &stat);
+ c->fcall->count += type_to_stat(&stat, "color", 0);
+ p = ixp_enc_stat(p, &stat);
c->fcall->count += type_to_stat(&stat, "new", 0);
p = ixp_enc_stat(p, &stat);
c->fcall->count += type_to_stat(&stat, "event", 0);
p = ixp_enc_stat(p, &stat);
- c->fcall->count += type_to_stat(&stat, "default", 0);
- p = ixp_enc_stat(p, &stat);
for(i = 1; i < nitem; i++) {
snprintf(buf, sizeof(buf), "%u", i);
len = type_to_stat(&stat, buf, i);
- if(c->fcall->count + len >= c->fcall->iounit)
+ if(c->fcall->count + len > c->fcall->iounit)
break;
c->fcall->count += len;
p = ixp_enc_stat(p, &stat);
@@ -630,11 +609,6 @@ xread(IXPConn *c)
case Ditem:
if(i > nitem)
goto error_xread;
- if(!i) {
- c->fcall->count = type_to_stat(&stat, "color", i);
- p = ixp_enc_stat(p, &stat);
- break;
- }
if(i == nitem)
new_item();
c->fcall->count = type_to_stat(&stat, "color", i);
@@ -646,22 +620,6 @@ xread(IXPConn *c)
errstr = Enoperm;
return -1;
break;
- case Fdisplay:
- switch(align) {
- case SOUTH:
- memcpy(p, "south", 5);
- c->fcall->count = 5;
- break;
- case NORTH:
- memcpy(p, "north", 5);
- c->fcall->count = 5;
- break;
- default:
- memcpy(p, "none", 4);
- c->fcall->count = 4;
- break;
- }
- break;
case Ffont:
if((c->fcall->count = strlen(font)))
memcpy(p, font, c->fcall->count);
@@ -746,22 +704,6 @@ xwrite(IXPConn *c)
errstr = "command not supported";
return -1;
break;
- case Fdisplay:
- if(c->fcall->count != 6 && c->fcall->count != 5)
- goto error_xwrite;
- memcpy(buf, c->fcall->data, c->fcall->count);
- buf[c->fcall->count] = 0;
- if(blitz_strtoalign(&align, buf) == -1)
- goto error_xwrite;
- update_geometry();
- if(align == NORTH || align == SOUTH) {
- XMapRaised(dpy, win);
- draw();
- }
- else
- XUnmapWindow(dpy, win);
- XSync(dpy, False);
- break;
case Ffont:
if(font)
free(font);
@@ -1066,6 +1008,9 @@ main(int argc, char *argv[])
DefaultDepth(dpy, screen_num));
/* main loop */
+ XMapRaised(dpy, win);
+ draw();
+
errstr = ixp_server_loop(&srv);
if(errstr)
diff --git a/rc/status b/rc/status
@@ -28,7 +28,6 @@ fn statustext {
text=`{statustext}
xwrite /new/data $"text
-xwrite /display south
while(xwrite /1/data $"text) {
sleep 2
text=`{statustext}