From e82d75b5ca3de5c1b947d418cd848cd8c2b89272 Mon Sep 17 00:00:00 2001 From: martin Date: Sat, 20 Jun 2009 03:11:49 +0200 Subject: [PATCH] Layout/Tag: Add request_update in Tag struct. WMFS Doesn't update layout each time you switch the tag, but only when it's requested. --- src/client.c | 14 ++++++++++++-- src/config.c | 2 +- src/mouse.c | 5 ++--- src/structs.h | 1 + src/tag.c | 20 +++++++++++++++++++- src/wmfs.c | 7 +++++++ src/wmfs.h | 1 + 7 files changed, 43 insertions(+), 7 deletions(-) diff --git a/src/client.c b/src/client.c index 834a690..3af3cce 100644 --- a/src/client.c +++ b/src/client.c @@ -725,7 +725,11 @@ client_set_wanted_tag(Client *c) { c->screen = i; c->tag = j; - arrange(i); + + if(c->tag != seltag[selscreen]) + tags[c->screen][c->tag].request_update = True; + + tags[c->screen][c->tag].layout.func(c->screen); } return; @@ -812,7 +816,13 @@ client_unmanage(Client *c) XSync(dpy, False); XUngrabServer(dpy); ewmh_get_client_list(); - arrange(c->screen); + + /* Arrange */ + if(c->tag != seltag[selscreen]) + tags[c->screen][c->tag].request_update = True; + else + tags[c->screen][c->tag].layout.func(c->screen); + XFree(c->title); /* To focus the previous client */ diff --git a/src/config.c b/src/config.c index 2dc12f7..f62634f 100644 --- a/src/config.c +++ b/src/config.c @@ -334,7 +334,7 @@ conf_tag_section(cfg_t *cfg_t) * MAXTAG (32) print an error and create only one. */ Tag default_tag = { "WMFS", NULL, 0, - 0.50, 1, False, IB_Top, + 0.50, 1, False, False, IB_Top, layout_name_to_struct(conf.layout, "tile_right", conf.nlayout, layout_list) }; conf.tag_round = cfg_getbool(cfg_t, "tag_round"); diff --git a/src/mouse.c b/src/mouse.c index d1a2a0d..299fe59 100644 --- a/src/mouse.c +++ b/src/mouse.c @@ -116,9 +116,8 @@ mouse_move(Client *c) { c->screen = selscreen; c->tag = i; - arrange(selscreen); - if(c->screen != oscreen) - arrange(oscreen); + tags[c->screen][c->tag].request_update = True; + arrange(oscreen); } } diff --git a/src/structs.h b/src/structs.h index 4307a20..b9b5456 100644 --- a/src/structs.h +++ b/src/structs.h @@ -214,6 +214,7 @@ typedef struct float mwfact; int nmaster; Bool resizehint; + Bool request_update; int barpos; Layout layout; } Tag; diff --git a/src/tag.c b/src/tag.c index 302cb77..aa60671 100644 --- a/src/tag.c +++ b/src/tag.c @@ -68,7 +68,23 @@ tag_set(int tag) if(tags[selscreen][otag].barpos != tags[selscreen][seltag[selscreen]].barpos) infobar_set_position(tags[selscreen][seltag[selscreen]].barpos); - arrange(selscreen); + /* arrange(selscreen); */ + for(c = clients; c; c = c->next) + if(c->screen == selscreen) + { + if(!ishide(c, selscreen)) + client_unhide(c); + else + client_hide(c); + } + + infobar_draw(selscreen); + + if(tags[selscreen][tag].request_update) + { + tags[selscreen][seltag[selscreen]].layout.func(selscreen); + tags[selscreen][tag].request_update = False; + } /* To focus the first client in the new tag */ for(c = clients; c; c = c->next) @@ -104,6 +120,8 @@ tag_transfert(Client *c, int tag) client_update_attributes(c); + tags[c->screen][tag].request_update = True; + return; } diff --git a/src/wmfs.c b/src/wmfs.c index cda885e..be07eb4 100644 --- a/src/wmfs.c +++ b/src/wmfs.c @@ -224,6 +224,10 @@ scan(void) client_update_attributes(c); } + /* Set update layout request */ + for(c = clients; c; c = c->next) + tags[c->screen][c->tag].request_update = True; + for(i = 0; i < screen_count(); ++i) arrange(i); @@ -330,7 +334,10 @@ set_statustext(char *str) void signal_handle(int sig) { + printf("pwet\n"); exiting = True; + quit(); + exit(EXIT_SUCCESS); return; } diff --git a/src/wmfs.h b/src/wmfs.h index a166ef2..041d649 100644 --- a/src/wmfs.h +++ b/src/wmfs.h @@ -351,6 +351,7 @@ Client *sel; func_name_list_t *func_list; func_name_list_t *layout_list; uint numlockmask; +int layout_update_request[2]; #endif /* WMFS_H */