mirror of
https://github.com/0intro/wmii
synced 2025-03-14 02:33:15 +03:00
proceeded with tag integration
This commit is contained in:
parent
5df09bbf3f
commit
95a2527e11
@ -158,6 +158,7 @@ detach_fromarea(Client *c)
|
||||
destroy_area(a);
|
||||
arrange_tag(t, True);
|
||||
}
|
||||
update_ctags();
|
||||
}
|
||||
|
||||
char *
|
||||
@ -210,7 +211,7 @@ relax_area(Area *a)
|
||||
Frame *f = a->frame[i];
|
||||
unsigned int tmp = f->rect.height;
|
||||
f->rect.height += (a->rect.height - h);
|
||||
resize_client(f->client, &f->rect, 0, True);
|
||||
resize_client(f->client, &f->rect, nil, True);
|
||||
h += (f->rect.height - tmp);
|
||||
}
|
||||
}
|
||||
@ -223,7 +224,7 @@ relax_area(Area *a)
|
||||
f->rect.y = yoff;
|
||||
if(a->mode != Colmax)
|
||||
yoff = f->rect.y + f->rect.height + hdiff;
|
||||
resize_client(f->client, &f->rect, 0, False);
|
||||
resize_client(f->client, &f->rect, nil, False);
|
||||
}
|
||||
}
|
||||
|
||||
@ -248,7 +249,7 @@ arrange_area(Area *a)
|
||||
else
|
||||
f->rect.height =
|
||||
a->rect.height - f->rect.y + a->rect.y;
|
||||
resize_client(f->client, &f->rect, 0, True);
|
||||
resize_client(f->client, &f->rect, nil, True);
|
||||
}
|
||||
break;
|
||||
case Colstack:
|
||||
@ -263,14 +264,14 @@ arrange_area(Area *a)
|
||||
else
|
||||
f->rect.height = bar_height();
|
||||
yoff += f->rect.height;
|
||||
resize_client(f->client, &f->rect, 0, True);
|
||||
resize_client(f->client, &f->rect, nil, True);
|
||||
}
|
||||
break;
|
||||
case Colmax:
|
||||
for(i = 0; i < a->nframe; i++) {
|
||||
Frame *f = a->frame[i];
|
||||
f->rect = a->rect;
|
||||
resize_client(f->client, &f->rect, 0, True);
|
||||
resize_client(f->client, &f->rect, nil, True);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
@ -341,8 +341,9 @@ attach_client(Client *c)
|
||||
}
|
||||
|
||||
void
|
||||
detach_client(Client *c, Bool unmap)
|
||||
detach_fromtag(Tag *t, Client *c, Bool unmap)
|
||||
{
|
||||
/* TODO: later check c->frame's if it is a member of t */
|
||||
Frame *f = c->frame;
|
||||
if(f) {
|
||||
if(!c->destroyed) {
|
||||
@ -359,6 +360,15 @@ detach_client(Client *c, Bool unmap)
|
||||
destroy_client(c);
|
||||
}
|
||||
|
||||
void
|
||||
detach_client(Client *c, Bool unmap)
|
||||
{
|
||||
int i;
|
||||
for(i = 0; i < ntag; i++)
|
||||
if(is_clientof(tag[i], c))
|
||||
detach_fromtag(tag[i], client[i], unmap);
|
||||
}
|
||||
|
||||
Client *
|
||||
sel_client_of_tag(Tag *t)
|
||||
{
|
||||
@ -433,7 +443,7 @@ resize_client(Client *c, XRectangle *r, XPoint *pt, Bool ignore_xcall)
|
||||
int px = sel * rect.width;
|
||||
|
||||
|
||||
if(area2index(f->area) > 0)
|
||||
if((area2index(f->area) > 0) && pt)
|
||||
resize_area(c, r, pt);
|
||||
else
|
||||
f->rect = *r;
|
||||
|
@ -41,7 +41,7 @@ static char Enocommand[] = "command not supported";
|
||||
* /keys/ FsDkeys
|
||||
* /keys/foo FsFkey
|
||||
* /tags/ FsDtags
|
||||
* /tags/foo FsFtag
|
||||
* /tags/foo FsFtags
|
||||
* /bar/ FsDbar
|
||||
* /bar/expand FsFexpand id of expandable label
|
||||
* /bar/new/ FsDlabel
|
||||
@ -1094,6 +1094,7 @@ xwrite(IXPConn *c, Fcall *fcall)
|
||||
if(fcall->count > sizeof(f->client->tags))
|
||||
return "tags value too long";
|
||||
memcpy(f->client->tags, fcall->data, fcall->count);
|
||||
f->client->tags[fcall->count] = 0;
|
||||
update_ctags();
|
||||
break;
|
||||
case FsFgeom:
|
||||
|
72
cmd/wm/tag.c
72
cmd/wm/tag.c
@ -42,6 +42,8 @@ destroy_tag(Tag *t)
|
||||
|
||||
cext_array_detach((void **)tag, t, &tagsz);
|
||||
ntag--;
|
||||
if(sel >= ntag)
|
||||
sel = 0;
|
||||
|
||||
for(i = 0; i < ntag; i++)
|
||||
XChangeProperty(dpy, root, net_atom[NetNumWS], XA_CARDINAL,
|
||||
@ -130,20 +132,8 @@ tid2index(unsigned short id)
|
||||
return -1;
|
||||
}
|
||||
|
||||
void
|
||||
select_tag(char *arg)
|
||||
{
|
||||
Client *c;
|
||||
Tag *t = ctag2tag(arg);
|
||||
if(!t)
|
||||
return;
|
||||
focus_tag(t);
|
||||
if((c = sel_client_of_tag(t)))
|
||||
focus_client(c);
|
||||
}
|
||||
|
||||
Tag *
|
||||
ctag2tag(char *name)
|
||||
get_tag(char *name)
|
||||
{
|
||||
unsigned int i;
|
||||
Tag *t;
|
||||
@ -163,6 +153,18 @@ ctag2tag(char *name)
|
||||
return t;
|
||||
}
|
||||
|
||||
void
|
||||
select_tag(char *arg)
|
||||
{
|
||||
Client *c;
|
||||
Tag *t = get_tag(arg);
|
||||
if(!t)
|
||||
return;
|
||||
focus_tag(t);
|
||||
if((c = sel_client_of_tag(t)))
|
||||
focus_client(c);
|
||||
}
|
||||
|
||||
Bool
|
||||
has_ctag(char *tag)
|
||||
{
|
||||
@ -173,27 +175,47 @@ has_ctag(char *tag)
|
||||
return False;
|
||||
}
|
||||
|
||||
Bool
|
||||
is_clientof(Tag *t, Client *c)
|
||||
{
|
||||
unsigned int i, j;
|
||||
for(i = 0; i < t->narea; i++) {
|
||||
Area *a = t->area[i];
|
||||
for(j = 0; j < a->nframe; j++)
|
||||
if(a->frame[j]->client == c)
|
||||
return True;
|
||||
}
|
||||
return False;
|
||||
}
|
||||
|
||||
void
|
||||
update_ctags()
|
||||
{
|
||||
unsigned int i;
|
||||
unsigned int i, j, k;
|
||||
char buf[256];
|
||||
char *tags[128];
|
||||
|
||||
for(i = 0; i < nctag; i++) {
|
||||
Bool exists = False;
|
||||
for(j = 0; j < nclient; j++)
|
||||
if(strstr(client[j]->tags, ctag[i]))
|
||||
exists = True;
|
||||
if(!exists) {
|
||||
for(j = 0; j < ntag; j++)
|
||||
if(strstr(tag[j]->name, ctag[i])) {
|
||||
destroy_tag(tag[j]);
|
||||
j--;
|
||||
}
|
||||
}
|
||||
free(ctag[i]);
|
||||
ctag[i] = nil;
|
||||
}
|
||||
nctag = 0;
|
||||
|
||||
for(i = 0; i < nclient; i++) {
|
||||
unsigned int j, k;
|
||||
cext_strlcpy(buf, client[i]->tags, sizeof(buf));
|
||||
fprintf(stderr, "update_ctags: %s\n", buf);
|
||||
j = cext_tokenize(tags, 128, buf, ' ');
|
||||
fprintf(stderr, "update_ctags: %d\n", j);
|
||||
for(k = 0; k < j; k++) {
|
||||
fprintf(stderr, "update_ctags: tag=%s\n", tags[k]);
|
||||
if(!has_ctag(tags[k])) {
|
||||
ctag = (char **)cext_array_attach((void **)ctag, strdup(tags[k]),
|
||||
sizeof(char *), &ctagsz);
|
||||
@ -201,6 +223,16 @@ update_ctags()
|
||||
}
|
||||
}
|
||||
}
|
||||
for(i = 0; i < nctag; i++)
|
||||
fprintf(stderr, "tag=%s\n", ctag[i]);
|
||||
|
||||
for(i = 0; i < nclient; i++)
|
||||
for(j = 0; j < ntag; j++) {
|
||||
if(strstr(client[i]->tags, tag[j]->name)) {
|
||||
if(!is_clientof(tag[j], client[i]))
|
||||
attach_totag(tag[j], client[i]);
|
||||
}
|
||||
else {
|
||||
if(is_clientof(tag[j], client[i]))
|
||||
detach_fromtag(tag[j], client[i], False);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -251,6 +251,7 @@ void select_client(Client *c, char *arg);
|
||||
void sendtoarea_client(Client *c, char *arg);
|
||||
void resize_all_clients();
|
||||
void focus(Client *c);
|
||||
void detach_fromtag(Tag *t, Client *c, Bool unmap);
|
||||
|
||||
/* event.c */
|
||||
void init_x_event_handler();
|
||||
@ -293,7 +294,7 @@ void select_tag(char *arg);
|
||||
int tag2index(Tag *t);
|
||||
Bool has_ctag(char *tag);
|
||||
void update_ctags();
|
||||
Tag *ctag2tag(char *name);
|
||||
Bool is_clientof(Tag *t, Client *c);
|
||||
|
||||
/* wm.c */
|
||||
void scan_wins();
|
||||
|
11
rc/wmiirc
11
rc/wmiirc
@ -70,6 +70,15 @@ $MODKEY-n
|
||||
$MODKEY-m
|
||||
$MODKEY-s
|
||||
$MODKEY-equal
|
||||
$MODKEY-1
|
||||
$MODKEY-2
|
||||
$MODKEY-3
|
||||
$MODKEY-4
|
||||
$MODKEY-5
|
||||
$MODKEY-6
|
||||
$MODKEY-7
|
||||
$MODKEY-8
|
||||
$MODKEY-9
|
||||
$MODKEY-Shift-1
|
||||
$MODKEY-Shift-2
|
||||
$MODKEY-Shift-3
|
||||
@ -126,6 +135,8 @@ do
|
||||
xwrite /ws/sel/ctl select next;;
|
||||
$MODKEY-k)
|
||||
xwrite /ws/sel/ctl select prev;;
|
||||
$MODKEY-[0-9])
|
||||
xwrite /ws/sel/sel/tags `echo $1 | sed 's/.*-//'`;;
|
||||
$MODKEY-Shift-[0-9])
|
||||
xwrite /ctl select `echo $1 | sed 's/.*-//'`;;
|
||||
esac;;
|
||||
|
Loading…
x
Reference in New Issue
Block a user