mirror of
https://github.com/0intro/wmii
synced 2024-12-24 20:36:58 +03:00
some more additions to column layout, still ths annoying deini/init bug
This commit is contained in:
parent
5806667ac7
commit
23335d5717
@ -327,7 +327,6 @@ void detach_client_from_frame(Client *c, Bool unmap)
|
||||
c->rect.x = f->rect.x;
|
||||
c->rect.y = f->rect.y;
|
||||
reparent_client(c, root, c->rect.x, c->rect.y);
|
||||
XSync(dpy, False);
|
||||
}
|
||||
if ((client = cext_stack_get_top_item(&f->clients))) {
|
||||
sel_client(client);
|
||||
|
@ -35,9 +35,15 @@ static Container *get_frames_col(Area *a);
|
||||
static Action *get_actions_col(Area *a);
|
||||
|
||||
static void select_frame(void *obj, char *arg);
|
||||
static void swap_frame(void *obj, char *arg);
|
||||
static void new_col(void *obj, char *arg);
|
||||
static void destroy_col(void *obj, char *arg);
|
||||
|
||||
static Action lcol_acttbl[] = {
|
||||
{"select", select_frame},
|
||||
{"swap", swap_frame},
|
||||
{"new", new_col},
|
||||
{"destroy", destroy_col},
|
||||
{0, 0}
|
||||
};
|
||||
|
||||
@ -328,3 +334,59 @@ static void select_frame(void *obj, char *arg)
|
||||
draw_frame(f, nil);
|
||||
}
|
||||
}
|
||||
|
||||
static void swap_frame(void *obj, char *arg)
|
||||
{
|
||||
Area *a = obj;
|
||||
Acme *acme = a->aux;
|
||||
Column *col = get_sel_column(acme);
|
||||
Frame *f = cext_stack_get_top_item(&col->frames);
|
||||
if (!f || !arg)
|
||||
return;
|
||||
}
|
||||
|
||||
static void update_column_width(Area *a)
|
||||
{
|
||||
Acme *acme = a->aux;
|
||||
size_t size = cext_sizeof(&acme->columns);
|
||||
unsigned int i, width = a->rect.width / cext_sizeof(&acme->columns);
|
||||
|
||||
for (i = 0; i < size; i++) {
|
||||
Column *col = cext_list_get_item(&acme->columns, i);
|
||||
col->refresh = True;
|
||||
col->rect.x = i * width;
|
||||
col->rect.width = width;
|
||||
}
|
||||
arrange_col(a);
|
||||
}
|
||||
|
||||
static void new_col(void *obj, char *arg)
|
||||
{
|
||||
Area *a = obj;
|
||||
Acme *acme = a->aux;
|
||||
Column *col = cext_emallocz(sizeof(Column));
|
||||
cext_attach_item(&acme->columns, col);
|
||||
update_column_width(a);
|
||||
}
|
||||
|
||||
static void destroy_col(void *obj, char *arg)
|
||||
{
|
||||
Area *a = obj;
|
||||
Acme *acme = a->aux;
|
||||
Column *col = get_sel_column(acme);
|
||||
size_t size;
|
||||
|
||||
if (cext_sizeof(&acme->columns) > 1) {
|
||||
while (cext_sizeof(&col->frames)) {
|
||||
Frame *f = cext_stack_get_top_item(&col->frames);
|
||||
while ((size = cext_sizeof(&f->clients))) {
|
||||
detach_col(a, cext_stack_get_top_item(&f->clients), a->page != get_sel_page());
|
||||
if (size == 1)
|
||||
break;
|
||||
}
|
||||
}
|
||||
cext_detach_item(&acme->columns, col);
|
||||
free(col);
|
||||
update_column_width(a);
|
||||
}
|
||||
}
|
||||
|
@ -54,14 +54,17 @@ static void init_float(Area *a)
|
||||
static void iter_detach_float(void *client, void *area)
|
||||
{
|
||||
Area *a = area;
|
||||
detach_float(a, client, a->page == get_sel_page());
|
||||
fprintf(stderr, "layout_float: detach_float(0x%x)\n", client);
|
||||
detach_float(a, client, a->page != get_sel_page());
|
||||
}
|
||||
|
||||
static void deinit_float(Area *a)
|
||||
{
|
||||
fprintf(stderr, "%s", "layout_float: deinit enter\n");
|
||||
cext_list_iterate(&a->clients, a, iter_detach_float);
|
||||
free(a->aux);
|
||||
a->aux = nil;
|
||||
fprintf(stderr, "%s", "layout_float: deinit exit\n");
|
||||
}
|
||||
|
||||
static Bool attach_float(Area *a, Client *c)
|
||||
|
@ -389,12 +389,9 @@ static void _attach_client(void *obj, char *cmd)
|
||||
|
||||
static void _detach_client(void *obj, char *cmd)
|
||||
{
|
||||
Frame *f = get_sel_frame();
|
||||
Client *c;
|
||||
if (!f)
|
||||
return;
|
||||
c = cext_stack_get_top_item(&f->clients);
|
||||
f->area->layout->detach(f->area, c, False);
|
||||
Client *c = get_sel_client();
|
||||
if (c)
|
||||
detach_client(c, False);
|
||||
}
|
||||
|
||||
static void _select_page(void *obj, char *cmd)
|
||||
|
2
rc/wmirc
2
rc/wmirc
@ -132,6 +132,8 @@ kbind normal $MODKEY-d 'wmir write /wm/ctl detach'
|
||||
kbind normal $MODKEY-a 'wmir write /wm/ctl attach'
|
||||
kbind normal $MODKEY-S-a 'wmir write /wm/ctl ''detached clients'''
|
||||
kbind normal $MODKEY-S-c 'wmir write /wm/sel/layout/sel/name column'
|
||||
kbind normal $MODKEY-S-n 'wmir write /wm/sel/layout/sel/ctl new'
|
||||
kbind normal $MODKEY-S-d 'wmir write /wm/sel/layout/sel/ctl destroy'
|
||||
kbind normal $MODKEY-S-f 'wmir write /wm/sel/layout/sel/name float'
|
||||
kbind normal $MODKEY-Return 'wmir write /wm/sel/ctl ''select zoomed'''
|
||||
kbind normal $MODKEY-C-y 'wmir write /wm/ctl new'
|
||||
|
Loading…
Reference in New Issue
Block a user