From: Reginald Kennedy Date: Thu, 6 Sep 2012 10:48:41 +0000 (+0800) Subject: Add new key binding: bar_toggle_ws (M-S-b) X-Git-Url: https://jasonwoof.com/gitweb/?a=commitdiff_plain;h=c2a4935a927a5bd0fcd4b9d086bf2e07c2155122;p=spectrwm.git Add new key binding: bar_toggle_ws (M-S-b) It is now possible to toggle the status bar on each workspace. bar_toggle is a 'master switch' to change the visiblity of bars on all regions. --- diff --git a/spectrwm.1 b/spectrwm.1 index 5875d5a..3ef5233 100644 --- a/spectrwm.1 +++ b/spectrwm.1 @@ -508,6 +508,8 @@ swap_next swap_prev .It Cm M-b bar_toggle +.It Cm M-S-b +bar_toggle_ws .It Cm M-x wind_del .It Cm M-S-x @@ -624,7 +626,9 @@ Swap with next window in workspace. .It Cm swap_prev Swap with previous window in workspace. .It Cm bar_toggle -Toggle status bar in all workspaces. +Toggle overall visibility of status bars. +.It Cm bar_toggle_ws +Toggle status bar on current workspace. .It Cm wind_del Delete current window in workspace. .It Cm wind_kill diff --git a/spectrwm.c b/spectrwm.c index c792278..af2fe15 100644 --- a/spectrwm.c +++ b/spectrwm.c @@ -494,6 +494,7 @@ struct workspace { int idx; /* workspace index */ char *name; /* workspace name */ int always_raise; /* raise windows on focus */ + int bar_enabled; /* bar visibility */ struct layout *cur_layout; /* current layout handlers */ struct ws_win *focus; /* may be NULL */ struct ws_win *focus_prev; /* may be NULL */ @@ -587,6 +588,8 @@ union arg { #define SWM_ARG_ID_MOVEDOWN (101) #define SWM_ARG_ID_MOVELEFT (102) #define SWM_ARG_ID_MOVERIGHT (103) +#define SWM_ARG_ID_BAR_TOGGLE (110) +#define SWM_ARG_ID_BAR_TOGGLE_WS (111) char **argv; }; @@ -712,6 +715,7 @@ struct spawn_list spawns = TAILQ_HEAD_INITIALIZER(spawns); /* user/key callable function IDs */ enum keyfuncid { KF_BAR_TOGGLE, + KF_BAR_TOGGLE_WS, KF_BUTTON2, KF_CYCLE_LAYOUT, KF_FLIP_LAYOUT, @@ -2175,6 +2179,14 @@ bar_fmt_print(void) TAILQ_FOREACH(r, &screens[i].rl, entry) { if (r->bar == NULL) continue; + + if (r->ws->bar_enabled) + xcb_map_window(conn, r->bar->id); + else { + xcb_unmap_window(conn, r->bar->id); + continue; + } + bar_fmt(fmtexp, fmtnew, r, sizeof fmtnew); bar_replace(fmtnew, fmtrep, r, sizeof fmtrep); if (bar_font_legacy) @@ -2232,20 +2244,27 @@ bar_toggle(struct swm_region *r, union arg *args) DNPRINTF(SWM_D_BAR, "bar_toggle\n"); - num_screens = xcb_setup_roots_length(xcb_get_setup(conn)); - if (bar_enabled) { - for (i = 0; i < num_screens; i++) - TAILQ_FOREACH(tmpr, &screens[i].rl, entry) - if (tmpr->bar) - xcb_unmap_window(conn, tmpr->bar->id); - } else { - for (i = 0; i < num_screens; i++) - TAILQ_FOREACH(tmpr, &screens[i].rl, entry) - if (tmpr->bar) - xcb_map_window(conn, tmpr->bar->id); + switch (args->id) { + case SWM_ARG_ID_BAR_TOGGLE_WS: + /* Only change if master switch is enabled. */ + if (bar_enabled) + r->ws->bar_enabled = !r->ws->bar_enabled; + break; + case SWM_ARG_ID_BAR_TOGGLE: + bar_enabled = !bar_enabled; + break; } - bar_enabled = !bar_enabled; + /* update bars as necessary */ + num_screens = xcb_setup_roots_length(xcb_get_setup(conn)); + for (i = 0; i < num_screens; i++) + TAILQ_FOREACH(tmpr, &screens[i].rl, entry) + if (tmpr->bar) { + if (bar_enabled && tmpr->ws->bar_enabled) + xcb_map_window(conn, tmpr->bar->id); + else + xcb_unmap_window(conn, tmpr->bar->id); + } stack(); @@ -3781,7 +3800,7 @@ stack(void) { g = r->g; g.w -= 2 * border_width; g.h -= 2 * border_width; - if (bar_enabled) { + if (bar_enabled && r->ws->bar_enabled) { if (!bar_at_bottom) g.y += bar_height; g.h -= bar_height; @@ -4074,7 +4093,8 @@ stack_master(struct workspace *ws, struct swm_geometry *g, int rot, int flip) else win_g.y += last_h + 2 * border_width; - if (disable_border && !bar_enabled && winno == 1){ + if (disable_border && !(bar_enabled && ws->bar_enabled) && + winno == 1){ bordered = 0; win_g.w += 2 * border_width; win_g.h += 2 * border_width; @@ -4291,7 +4311,7 @@ max_stack(struct workspace *ws, struct swm_geometry *g) if (X(w) != gg.x || Y(w) != gg.y || WIDTH(w) != gg.w || HEIGHT(w) != gg.h) { w->g = gg; - if (bar_enabled){ + if (bar_enabled && ws->bar_enabled){ w->bordered = 1; } else { w->bordered = 0; @@ -5382,7 +5402,8 @@ struct keyfunc { union arg args; } keyfuncs[KF_INVALID + 1] = { /* name function argument */ - { "bar_toggle", bar_toggle, {0} }, + { "bar_toggle", bar_toggle, {.id = SWM_ARG_ID_BAR_TOGGLE} }, + { "bar_toggle_ws", bar_toggle, {.id = SWM_ARG_ID_BAR_TOGGLE_WS} }, { "button2", pressbutton, {2} }, { "cycle_layout", cycle_layout, {0} }, { "flip_layout", stack_config, {.id = SWM_ARG_ID_FLIPLAYOUT} }, @@ -6081,6 +6102,7 @@ setup_keys(void) setkeybinding(MODKEY_SHIFT, XK_F11, KF_MVWS_21, NULL); setkeybinding(MODKEY_SHIFT, XK_F12, KF_MVWS_22, NULL); setkeybinding(MODKEY, XK_b, KF_BAR_TOGGLE, NULL); + setkeybinding(MODKEY_SHIFT, XK_b, KF_BAR_TOGGLE_WS,NULL); setkeybinding(MODKEY, XK_Tab, KF_FOCUS_NEXT, NULL); setkeybinding(MODKEY_SHIFT, XK_Tab, KF_FOCUS_PREV, NULL); setkeybinding(MODKEY_SHIFT, XK_x, KF_WIND_KILL, NULL); @@ -8605,6 +8627,7 @@ setup_screens(void) ws = &screens[i].ws[j]; ws->idx = j; ws->name = NULL; + ws->bar_enabled = 1; ws->focus = NULL; ws->focus_prev = NULL; ws->focus_pending = NULL;