mirror of
https://github.com/0intro/wmii
synced 2024-11-25 23:30:24 +03:00
enabled basic navigation in column layout
This commit is contained in:
parent
4435f84131
commit
0e4b36e0ff
@ -4,6 +4,7 @@
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "wm.h"
|
||||
|
||||
@ -61,3 +62,35 @@ aid_to_index(Page *p, unsigned short id)
|
||||
return i;
|
||||
return -1;
|
||||
}
|
||||
|
||||
void
|
||||
select_area(Area *a, char *arg)
|
||||
{
|
||||
Area *new;
|
||||
Page *p = a->page;
|
||||
int i = area_to_index(a);
|
||||
if(i == -1)
|
||||
return;
|
||||
if(!strncmp(arg, "prev", 5)) {
|
||||
if(!i)
|
||||
i = p->narea - 1;
|
||||
else
|
||||
i--;
|
||||
} else if(!strncmp(arg, "next", 5)) {
|
||||
if(i + 1 < p->narea)
|
||||
i++;
|
||||
else
|
||||
i = 0;
|
||||
}
|
||||
else {
|
||||
const char *errstr;
|
||||
i = cext_strtonum(arg, 1, p->narea, &errstr);
|
||||
if(errstr)
|
||||
return;
|
||||
i--;
|
||||
}
|
||||
new = p->area[i];
|
||||
if(new->nclient)
|
||||
focus_client(new->client[new->sel], True);
|
||||
}
|
||||
|
||||
|
@ -547,26 +547,6 @@ resize_client(Client *c, XRectangle *r, XPoint *pt)
|
||||
configure_client(c);
|
||||
}
|
||||
|
||||
/*
|
||||
static void
|
||||
max_client(void *obj, char *arg)
|
||||
{
|
||||
Client *c = obj;
|
||||
|
||||
if(c->maximized) {
|
||||
c->frame.rect = c->frame.revert;
|
||||
resize_client(c, &c->frame.revert, nil);
|
||||
}
|
||||
else {
|
||||
c->frame.revert = c->frame.rect;
|
||||
c->frame.rect = c->area->rect;
|
||||
XRaiseWindow(dpy, c->frame.win);
|
||||
resize_client(c, &c->frame.rect, nil);
|
||||
}
|
||||
c->maximized = !c->maximized;
|
||||
}
|
||||
*/
|
||||
|
||||
int
|
||||
cid_to_index(Area *a, unsigned short id)
|
||||
{
|
||||
@ -591,31 +571,27 @@ client_to_index(Client *c)
|
||||
void
|
||||
select_client(Client *c, char *arg)
|
||||
{
|
||||
if(area_to_index(c->area) > 0)
|
||||
select_column(c, arg);
|
||||
else {
|
||||
Area *a = c->area;
|
||||
int i = client_to_index(c);
|
||||
if(i == -1)
|
||||
return;
|
||||
if(!strncmp(arg, "prev", 5)) {
|
||||
if(!i)
|
||||
i = a->nclient - 1;
|
||||
else
|
||||
i--;
|
||||
} else if(!strncmp(arg, "next", 5)) {
|
||||
if(i + 1 < a->nclient)
|
||||
i++;
|
||||
else
|
||||
i = 0;
|
||||
}
|
||||
else {
|
||||
const char *errstr;
|
||||
i = cext_strtonum(arg, 1, a->nclient, &errstr);
|
||||
if(errstr)
|
||||
return;
|
||||
Area *a = c->area;
|
||||
int i = client_to_index(c);
|
||||
if(i == -1)
|
||||
return;
|
||||
if(!strncmp(arg, "prev", 5)) {
|
||||
if(!i)
|
||||
i = a->nclient - 1;
|
||||
else
|
||||
i--;
|
||||
}
|
||||
focus_client(a->client[i], True);
|
||||
} else if(!strncmp(arg, "next", 5)) {
|
||||
if(i + 1 < a->nclient)
|
||||
i++;
|
||||
else
|
||||
i = 0;
|
||||
}
|
||||
else {
|
||||
const char *errstr;
|
||||
i = cext_strtonum(arg, 1, a->nclient, &errstr);
|
||||
if(errstr)
|
||||
return;
|
||||
i--;
|
||||
}
|
||||
focus_client(a->client[i], True);
|
||||
}
|
||||
|
@ -42,7 +42,7 @@ arrange_page(Page *p, Bool update_colums)
|
||||
for(i = 1; i < p->narea; i++) {
|
||||
Area *a = p->area[i];
|
||||
if(update_colums) {
|
||||
a->rect = rect;
|
||||
update_area_geometry(a);
|
||||
a->rect.x = (i - 1) * width;
|
||||
a->rect.width = width;
|
||||
}
|
||||
@ -161,48 +161,6 @@ resize_column(Client *c, XRectangle *r, XPoint *pt)
|
||||
drop_resize(c, r);
|
||||
}
|
||||
|
||||
void
|
||||
select_column(Client *c, char *arg)
|
||||
{
|
||||
Area *col = c->area;
|
||||
Page *p = col->page;
|
||||
size_t i;
|
||||
|
||||
for(i = 0; (i < col->clientsz) && col->client[i] && (col->client[i] != c); i++);
|
||||
if(!strncmp(arg, "prev", 5)) {
|
||||
if(!i)
|
||||
for(i = 0; (i < col->clientsz) && col->client[i]; i++);
|
||||
focus_client(col->client[i - 1], True);
|
||||
return;
|
||||
} else if(!strncmp(arg, "next", 5)) {
|
||||
if(col->client[i + 1])
|
||||
focus_client(col->client[i + 1], True);
|
||||
else
|
||||
focus_client(col->client[0], True);
|
||||
return;
|
||||
}
|
||||
|
||||
for(i = 0; (i < p->areasz) && p->area[i] && (p->area[i] != col); i++);
|
||||
if(!strncmp(arg, "west", 5)) {
|
||||
if(!i)
|
||||
for(i = 0; (i < p->areasz) && p->area[i]; i++);
|
||||
col = p->area[i - 1];
|
||||
} else if(!strncmp(arg, "east", 5)) {
|
||||
if(p->area[i + 1])
|
||||
col = p->area[i + 1];
|
||||
else
|
||||
col = p->area[0];
|
||||
} else {
|
||||
const char *errstr;
|
||||
for(i = 0; (i < p->areasz) && p->area[i]; i++);
|
||||
i = cext_strtonum(arg, 0, i - 1, &errstr);
|
||||
if(errstr)
|
||||
return;
|
||||
col = p->area[i];
|
||||
}
|
||||
focus_client(col->client[col->sel], True);
|
||||
}
|
||||
|
||||
Area *
|
||||
new_column(Area *old)
|
||||
{
|
||||
@ -216,6 +174,8 @@ new_column(Area *old)
|
||||
col = alloc_area(p);
|
||||
cext_array_detach((void **)old->client, c, &old->clientsz);
|
||||
old->nclient--;
|
||||
if(old->sel == old->nclient)
|
||||
old->sel = 0;
|
||||
col->client = (Client **)cext_array_attach((void **)col->client, c,
|
||||
sizeof(Client *), &col->clientsz);
|
||||
col->nclient++;
|
||||
|
@ -1065,6 +1065,8 @@ xwrite(IXPConn *c, Fcall *fcall)
|
||||
return Enocommand;
|
||||
break;
|
||||
case Dpage:
|
||||
if(!strncmp(buf, "select ", 7))
|
||||
select_area(page[i1]->area[page[i1]->sel], &buf[7]);
|
||||
break;
|
||||
case Darea:
|
||||
if(!strncmp(buf, "select ", 7)) {
|
||||
|
@ -84,7 +84,6 @@ struct Client {
|
||||
int proto;
|
||||
unsigned int border;
|
||||
Bool destroyed;
|
||||
Bool maximized;
|
||||
Area *area;
|
||||
Window win;
|
||||
Window trans;
|
||||
@ -197,6 +196,7 @@ void destroy_area(Area *a);
|
||||
int area_to_index(Area *a);
|
||||
int aid_to_index(Page *p, unsigned short id);
|
||||
void update_area_geometry(Area *a);
|
||||
void select_area(Area *a, char *arg);
|
||||
|
||||
/* bar.c */
|
||||
Label *new_label();
|
||||
@ -275,7 +275,6 @@ void spawn(char *cmd);
|
||||
void arrange_page(Page *p, Bool update_colums);
|
||||
void arrange_column(Area *col);
|
||||
void resize_column(Client *c, XRectangle *r, XPoint *pt);
|
||||
void select_column(Client *c, char *arg);
|
||||
Area *new_column(Area *old);
|
||||
|
||||
/* wm.c */
|
||||
|
@ -146,9 +146,9 @@ while(event=`{read}) {
|
||||
case $MODKEY-Control-y
|
||||
wmiir read /new >/dev/null >[2=1]
|
||||
case $MODKEY-h
|
||||
xwrite /sel/ctl 'select next'
|
||||
case $MODKEY-l
|
||||
xwrite /sel/ctl 'select prev'
|
||||
case $MODKEY-l
|
||||
xwrite /sel/ctl 'select next'
|
||||
case $MODKEY-Tab
|
||||
xwrite /sel/sel/ctl 'select next'
|
||||
case $MODKEY-j
|
||||
|
Loading…
Reference in New Issue
Block a user