mirror of
https://github.com/vale981/spectrwm
synced 2025-03-05 09:51:38 -05:00
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.
This commit is contained in:
parent
4055b75e4a
commit
c2a4935a92
2 changed files with 44 additions and 17 deletions
|
@ -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
|
||||
|
|
55
spectrwm.c
55
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;
|
||||
|
|
Loading…
Add table
Reference in a new issue