wmii

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

commit 7deb1e86ba0c61b00b933351b032a3c01814097d
parent 918ece162d37406cb140f62155bd6270f351c47e
Author: Anselm R. Garbe <garbeam@wmii.de>
Date:   Fri, 10 Feb 2006 18:32:35 +0100

added WMII_FONT, WMII_SELCOLORS and WMII_NORMCOLORS to wmiirc


Diffstat:
cmd/wm/bar.c | 14++++++++++++++
cmd/wm/fs.c | 94++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------
cmd/wm/wm.h | 6+++++-
rc/wmiirc | 10+++++++---
4 files changed, 110 insertions(+), 14 deletions(-)

diff --git a/cmd/wm/bar.c b/cmd/wm/bar.c @@ -28,6 +28,20 @@ detach_label(Label *l) } void +update_bar_geometry() +{ + brect = rect; + brect.height = xfont->ascent + xfont->descent + 4; + brect.y = rect.height - brect.height; + XMoveResizeWindow(dpy, winbar, brect.x, brect.y, brect.width, brect.height); + XSync(dpy, False); + XFreePixmap(dpy, pmapbar); + pmapbar = XCreatePixmap(dpy, winbar, brect.width, brect.height, DefaultDepth(dpy, screen)); + XSync(dpy, False); + draw_bar(); +} + +void draw_bar() { size_t i; diff --git a/cmd/wm/fs.c b/cmd/wm/fs.c @@ -37,6 +37,9 @@ static char Enocommand[] = "command not supported"; * /def/bar Fbar 0, 1 * /def/snap Fsnap 0..n * /def/inc Finc 0..n + * /def/font Ffont xlib font name + * /def/selcolors Fselcolors sel color + * /def/normcolors Fnormcolors normal colors * /keys/ Dkeys * /keys/foo Fkey * /bar/ Dbar @@ -44,7 +47,7 @@ static char Enocommand[] = "command not supported"; * /bar/new/ Dlabel * /bar/1/ Dlabel * /bar/1/data Fdata <arbitrary data which gets displayed> - * /bar/1/color Fcolor <#RRGGBB> <#RRGGBB> <#RRGGBB> + * /bar/1/colors Fcolors <#RRGGBB> <#RRGGBB> <#RRGGBB> * /event Fevent * /ctl Fctl command interface (root) * /new/ Dpage returns new page @@ -130,7 +133,7 @@ decode_qpath(Qid *qid, unsigned char *type, int *i1, int *i2, int *i3) case Dpage: *i1 = pid_to_index(i1id); break; case Fkey: *i1 = kid_to_index(i1id); break; case Fdata: - case Fcolor: + case Fcolors: case Dlabel: *i1 = lid_to_index(i1id); break; } if(i2id && (*i1 != -1)) { @@ -186,7 +189,10 @@ qid_to_name(Qid *qid) snprintf(buf, sizeof(buf), "%u", i3 + 1); return buf; break; - case Fcolor: return "color"; break; + case Fselcolors: return "selcolors"; break; + case Fnormcolors: return "normcolors"; break; + case Ffont: return "font"; break; + case Fcolors: return "colors"; break; case Fdata: return "data"; break; case Fexpand: return "expand"; break; case Fctl: return "ctl"; break; @@ -240,8 +246,14 @@ name_to_type(char *name, unsigned char dir_type) return Fgeom; if(!strncmp(name, "expand", 7)) return Fexpand; - if(!strncmp(name, "color", 6)) - return Fcolor; + if(!strncmp(name, "colors", 7)) + return Fcolors; + if(!strncmp(name, "selcolors", 10)) + return Fselcolors; + if(!strncmp(name, "normcolors", 11)) + return Fnormcolors; + if(!strncmp(name, "font", 5)) + return Ffont; if(!strncmp(name, "data", 5)) return Fdata; if(name_to_key(name)) @@ -381,7 +393,7 @@ mkqid(Qid *dir, char *wname, Qid *new, Bool iswalk) } break; case Fdata: - case Fcolor: + case Fcolors: if((dir_type == Dlabel) && (dir_i1 >= nlabel)) return -1; default: @@ -563,8 +575,12 @@ type_to_stat(Stat *stat, char *wname, Qid *dir) case Fdata: return mkstat(stat, dir, wname, (dir_i1 == nlabel) ? 0 : strlen(label[dir_i1]->data), DMREAD | DMWRITE); break; - case Fcolor: + case Fcolors: + case Fselcolors: + case Fnormcolors: return mkstat(stat, dir, wname, 23, DMREAD | DMWRITE); + case Ffont: + return mkstat(stat, dir, wname, strlen(def.font), DMREAD | DMWRITE); break; } return 0; @@ -822,7 +838,7 @@ xread(IXPConn *c, Fcall *fcall) case Dlabel: if(i1 >= nlabel) return Enofile; - fcall->count = type_to_stat(&stat, "color", &m->qid); + fcall->count = type_to_stat(&stat, "colors", &m->qid); p = ixp_enc_stat(p, &stat); fcall->count += type_to_stat(&stat, "data", &m->qid); p = ixp_enc_stat(p, &stat); @@ -836,6 +852,12 @@ xread(IXPConn *c, Fcall *fcall) p = ixp_enc_stat(p, &stat); fcall->count += type_to_stat(&stat, "snap", &m->qid); p = ixp_enc_stat(p, &stat); + fcall->count += type_to_stat(&stat, "selcolors", &m->qid); + p = ixp_enc_stat(p, &stat); + fcall->count += type_to_stat(&stat, "normcolors", &m->qid); + p = ixp_enc_stat(p, &stat); + fcall->count += type_to_stat(&stat, "font", &m->qid); + p = ixp_enc_stat(p, &stat); break; case Dpage: fcall->count = type_to_stat(&stat, "ctl", &m->qid); @@ -941,12 +963,24 @@ xread(IXPConn *c, Fcall *fcall) if((fcall->count = strlen(label[i1]->data))) memcpy(p, label[i1]->data, fcall->count); break; - case Fcolor: + case Fcolors: if(i1 >= nlabel) return Enofile; if((fcall->count = strlen(label[i1]->colstr))) memcpy(p, label[i1]->colstr, fcall->count); break; + case Fselcolors: + if((fcall->count = strlen(def.selcolor))) + memcpy(p, def.selcolor, fcall->count); + break; + case Fnormcolors: + if((fcall->count = strlen(def.normcolor))) + memcpy(p, def.normcolor, fcall->count); + break; + case Ffont: + if((fcall->count = strlen(def.font))) + memcpy(p, def.font, fcall->count); + break; default: return "invalid read"; break; @@ -1111,7 +1145,7 @@ xwrite(IXPConn *c, Fcall *fcall) draw_bar(); } break; - case Fcolor: + case Fcolors: if((i1 >= nlabel) || (fcall->count != 23) || (fcall->data[0] != '#') || (fcall->data[8] != '#') || (fcall->data[16] != '#') @@ -1122,6 +1156,46 @@ xwrite(IXPConn *c, Fcall *fcall) blitz_loadcolor(dpy, screen, label[i1]->colstr, &label[i1]->color); draw_bar(); break; + case Fselcolors: + if((i1 >= nlabel) || (fcall->count != 23) + || (fcall->data[0] != '#') || (fcall->data[8] != '#') + || (fcall->data[16] != '#') + ) + return "wrong color format"; + memcpy(def.selcolor, fcall->data, fcall->count); + def.selcolor[fcall->count] = 0; + blitz_loadcolor(dpy, screen, def.selcolor, &def.sel); + for(i = 0; i < nclient; i++) + if(client[i]->page == page[sel]) + draw_client(client[i]); + break; + case Fnormcolors: + if((i1 >= nlabel) || (fcall->count != 23) + || (fcall->data[0] != '#') || (fcall->data[8] != '#') + || (fcall->data[16] != '#') + ) + return "wrong color format"; + memcpy(def.normcolor, fcall->data, fcall->count); + def.normcolor[fcall->count] = 0; + blitz_loadcolor(dpy, screen, def.normcolor, &def.norm); + for(i = 0; i < nclient; i++) + if(client[i]->page == page[sel]) + draw_client(client[i]); + break; + case Ffont: + if(def.font) + free(def.font); + def.font = cext_emallocz(fcall->count + 1); + memcpy(def.font, fcall->data, fcall->count); + XFreeFont(dpy, xfont); + xfont = blitz_getfont(dpy, def.font); + for(i = 0; i < nclient; i++) { + if(!client[i]->page) + continue; + resize_client(client[i], &client[i]->frame.rect, 0); + } + update_bar_geometry(); + break; default: return "invalid write"; break; diff --git a/cmd/wm/wm.h b/cmd/wm/wm.h @@ -30,7 +30,10 @@ enum { Dlabel, Fexpand, Fdata, /* data to display */ - Fcolor, + Fcolors, + Ffont, + Fselcolors, + Fnormcolors, Fkey, Fborder, Fsnap, @@ -201,6 +204,7 @@ Label *new_label(); void detach_label(Label *l); void draw_bar(); int lid_to_index(unsigned short id); +void update_bar_geometry(); /* client.c */ Client *alloc_client(Window w, XWindowAttributes *wa); diff --git a/rc/wmiirc b/rc/wmiirc @@ -17,6 +17,10 @@ fn sigint { exit } +WMII_FONT='fixed' +WMII_SELCOLORS='#ffffff #555588 #8888bb' +WMII_NORMCOLORS='#dddddd #666666 #999999' + CLIENT_BAR=0 CLIENT_BORDER=3 MODKEY=Alt @@ -27,9 +31,9 @@ xwrite /def/bar $CLIENT_BAR xwrite /def/border $CLIENT_BORDER xwrite /def/inc 1 xwrite /def/snap 20 -#xwrite /def/font $FONT -#xwrite /def/selcolor $SEL_COLOR -#xwrite /def/normcolor $NORM_COLOR +xwrite /def/font $WMII_FONT +xwrite /def/selcolors $WMII_SELCOLORS +xwrite /def/normcolors $WMII_NORMCOLORS for(page in `{wmiir read / | grep '^d' | awk '{print $10}' | grep -v new}) { for(area in `{wmiir read /$page | grep '^d' | awk '{print $10}' | grep -v new}) { for(client in `{wmiir read /$page/$area | grep '^d' | awk '{print $10}'}) {