some more additions to column layout, still ths annoying deini/init bug

This commit is contained in:
garbeam 2005-12-11 19:00:27 +02:00
parent 5806667ac7
commit 23335d5717
5 changed files with 71 additions and 8 deletions

View File

@ -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);

View File

@ -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);
}
}

View File

@ -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)

View File

@ -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)

View File

@ -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'