commit 17a12e5c5d00cfde8b487143b12f93b273060886
parent 19d6272285ca027bbae993b11082c90e90911f3c
Author: Anselm R. Garbe <garbeam@wmii.de>
Date: Mon, 6 Mar 2006 16:35:07 +0100
changed default tag, allowing writing /def/tag
Diffstat:
7 files changed, 44 insertions(+), 29 deletions(-)
diff --git a/cmd/wm/area.c b/cmd/wm/area.c
@@ -114,8 +114,11 @@ void
attach_toarea(Area *a, Client *c)
{
static unsigned short id = 1;
- Frame *f = cext_emallocz(sizeof(Frame));
-
+ Frame *f;
+
+ if(is_clientof(a->tag, c))
+ return;
+ f = cext_emallocz(sizeof(Frame));
f->id = id++;
f->area = a;
f->client = c;
diff --git a/cmd/wm/client.c b/cmd/wm/client.c
@@ -332,7 +332,7 @@ attach_client(Client *c)
{
Tag *t;
if(!ntag)
- t = alloc_tag("nil");
+ t = alloc_tag(def.tag);
else
t = tag[sel];
diff --git a/cmd/wm/fs.c b/cmd/wm/fs.c
@@ -38,6 +38,7 @@ static char Enocommand[] = "command not supported";
* /def/font FsFfont xlib font name
* /def/selcolors FsFselcolors sel color
* /def/normcolors FsFnormcolors normal colors
+ * /def/tag FsFtag default tag
* /keys/ FsDkeys
* /keys/foo FsFkey
* /tags/ FsDtags
@@ -279,10 +280,12 @@ name2type(char *name, unsigned char dir_type)
return FsFdata;
if(!strncmp(name, "mode", 5))
return FsFmode;
+ if(!strncmp(name, "tag", 4))
+ return FsFtag;
if(name2key(name))
return FsFkey;
if(has_ctag(name))
- return FsFtags;
+ return FsFtag;
if(!strncmp(name, "sel", 4))
goto dyndir;
i = (unsigned short) cext_strtonum(name, 0, 0xffff, &err);
@@ -585,16 +588,14 @@ type2stat(Stat *stat, char *wname, Qid *dir)
return mkstat(stat, dir, wname, strlen(f->client->name), DMREAD);
break;
case FsFtags:
- switch(dir_type) {
- case FsDclient:
- f = tag[dir_i1]->area[dir_i2]->frame[dir_i3];
- return mkstat(stat, dir, wname, strlen(f->client->tags), DMREAD | DMWRITE);
- break;
- case FsDtags:
- return mkstat(stat, dir, wname, 0, 0);
- break;
- }
- break;
+ f = tag[dir_i1]->area[dir_i2]->frame[dir_i3];
+ return mkstat(stat, dir, wname, strlen(f->client->tags), DMREAD | DMWRITE);
+ break;
+ case FsFtag:
+ if(dir_type == FsDdef)
+ return mkstat(stat, dir, wname, strlen(def.tag), DMREAD | DMWRITE);
+ return mkstat(stat, dir, wname, 0, 0);
+ break;
case FsFkey:
return mkstat(stat, dir, wname, 0, DMWRITE);
break;
@@ -872,6 +873,8 @@ xread(IXPConn *c, Fcall *fcall)
p = ixp_enc_stat(p, &stat);
fcall->count += type2stat(&stat, "font", &m->qid);
p = ixp_enc_stat(p, &stat);
+ fcall->count += type2stat(&stat, "tag", &m->qid);
+ p = ixp_enc_stat(p, &stat);
break;
case FsDws:
fcall->count = type2stat(&stat, "ctl", &m->qid);
@@ -966,6 +969,10 @@ xread(IXPConn *c, Fcall *fcall)
if((fcall->count = strlen(label[i1]->colstr)))
memcpy(p, label[i1]->colstr, fcall->count);
break;
+ case FsFtag:
+ if((fcall->count = strlen(def.tag)))
+ memcpy(p, def.tag, fcall->count);
+ break;
case FsFselcolors:
if((fcall->count = strlen(def.selcolor)))
memcpy(p, def.selcolor, fcall->count);
@@ -1143,6 +1150,10 @@ xwrite(IXPConn *c, Fcall *fcall)
blitz_loadcolor(dpy, screen, label[i1]->colstr, &label[i1]->color);
draw_bar();
break;
+ case FsFtag:
+ memcpy(def.tag, fcall->data, fcall->count);
+ def.tag[fcall->count] = 0;
+ break;
case FsFselcolors:
if((fcall->count != 23)
|| (fcall->data[0] != '#') || (fcall->data[8] != '#')
diff --git a/cmd/wm/tag.c b/cmd/wm/tag.c
@@ -75,8 +75,8 @@ focus_tag(Tag *t)
sel = pi;
px = sel * rect.width;
- /* gives all(!) clients proper geometry (for use of different tagrs) */
- for(i = 0; i < nclient; i++) {
+ /* gives all(!) clients proper geometry (for use of different tags) */
+ for(i = 0; i < nclient; i++)
if(client[i]->frame) {
Frame *f = client[i]->frame;
pi = tag2index(f->area->tag);
@@ -84,7 +84,6 @@ focus_tag(Tag *t)
if(f->area->tag == t)
draw_client(client[i]);
}
- }
snprintf(buf, sizeof(buf), "WS %s\n", t->name);
write_event(buf);
XChangeProperty(dpy, root, net_atom[NetSelWS], XA_CARDINAL,
@@ -148,7 +147,7 @@ get_tag(char *name)
t = alloc_tag(name);
for(i = 0; i < nclient; i++)
- if(strstr(client[i]->tags, name))
+ if(!is_clientof(t, client[i]) && strstr(client[i]->tags, name))
attach_totag(t, client[i]);
return t;
}
@@ -195,7 +194,6 @@ update_ctags()
char buf[256];
char *tags[128];
- return;
for(i = 0; i < nctag; i++) {
Bool exists = False;
for(j = 0; j < nclient; j++)
diff --git a/cmd/wm/wm.c b/cmd/wm/wm.c
@@ -324,6 +324,7 @@ main(int argc, char *argv[])
def.font = strdup(BLITZ_FONT);
def.border = DEF_BORDER;
def.snap = DEF_SNAP;
+ cext_strlcpy(def.tag, "1", sizeof(def.tag));
cext_strlcpy(def.selcolor, BLITZ_SELCOLORS, sizeof(def.selcolor));
blitz_loadcolor(dpy, screen, def.selcolor, &def.sel);
cext_strlcpy(def.normcolor, BLITZ_NORMCOLORS, sizeof(def.normcolor));
diff --git a/cmd/wm/wm.h b/cmd/wm/wm.h
@@ -75,6 +75,7 @@ enum {
FsFctl,
FsFname,
FsFtags,
+ FsFtag,
FsFmode
};
@@ -90,6 +91,15 @@ typedef struct Area Area;
typedef struct Frame Frame;
typedef struct Client Client;
+struct Tag {
+ char name[256];
+ unsigned short id;
+ Area **area;
+ unsigned int areasz;
+ unsigned int narea;
+ unsigned int sel;
+};
+
struct Area {
unsigned short id;
Frame **frame;
@@ -101,15 +111,6 @@ struct Area {
XRectangle rect;
};
-struct Tag {
- char name[256];
- unsigned short id;
- Area **area;
- unsigned int areasz;
- unsigned int narea;
- unsigned int sel;
-};
-
struct Frame {
Area *area;
unsigned short id;
@@ -154,6 +155,7 @@ typedef struct {
typedef struct {
char selcolor[24];
char normcolor[24];
+ char tag[256];
char *font;
Color sel;
Color norm;
diff --git a/rc/wmiirc b/rc/wmiirc
@@ -40,7 +40,7 @@ do
done
xwrite /bar/new/colors $WMII_NORMCOLORS
xwrite /bar/new/colors $WMII_SELCOLORS
-xwrite /bar/0/data nil
+xwrite /bar/0/data 1
xwrite /bar/expand 1
# MISC