X-Git-Url: https://code.delx.au/spectrwm/blobdiff_plain/f78f487b205ca3e8130550b5d29fabbf45f13960..aac2f2f4bae52bcac4487e785f64b2cf09d53ccd:/spectrwm.c diff --git a/spectrwm.c b/spectrwm.c index 680f5c1..4fbbe0b 100644 --- a/spectrwm.c +++ b/spectrwm.c @@ -9,6 +9,7 @@ * Copyright (c) 2011-2012 Lawrence Teo * Copyright (c) 2011-2012 Tiago Cunha * Copyright (c) 2012-2015 David Hill + * Copyright (c) 2014-2015 Yuri D'Elia * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -333,8 +334,7 @@ int term_width = 0; int font_adjusted = 0; unsigned int mod_key = MODKEY; bool warp_pointer = false; -unsigned int mouse_button_move = XCB_BUTTON_INDEX_1; -unsigned int mouse_button_resize = XCB_BUTTON_INDEX_3; +bool visible_noswap = false; /* dmenu search */ struct swm_region *search_r; @@ -404,6 +404,7 @@ char *bar_format = NULL; bool stack_enabled = true; bool clock_enabled = true; bool iconic_enabled = false; +bool maximize_hide_bar = false; bool urgent_enabled = false; bool urgent_collapse = false; char *clock_format = NULL; @@ -656,6 +657,8 @@ union arg { #define SWM_ARG_ID_LOWER (106) #define SWM_ARG_ID_BAR_TOGGLE (110) #define SWM_ARG_ID_BAR_TOGGLE_WS (111) +#define SWM_ARG_ID_CYCLERG_MOVE_UP (112) +#define SWM_ARG_ID_CYCLERG_MOVE_DOWN (113) char **argv; }; @@ -885,6 +888,8 @@ enum keyfuncid { KF_RG_7, KF_RG_8, KF_RG_9, + KF_RG_MOVE_NEXT, + KF_RG_MOVE_PREV, KF_RG_NEXT, KF_RG_PREV, KF_SCREEN_NEXT, @@ -892,10 +897,10 @@ enum keyfuncid { KF_SEARCH_WIN, KF_SEARCH_WORKSPACE, KF_SPAWN_CUSTOM, + KF_STACK_BALANCE, KF_STACK_INC, KF_STACK_DEC, KF_STACK_RESET, - KF_STACK_BALANCE, KF_SWAP_MAIN, KF_SWAP_NEXT, KF_SWAP_PREV, @@ -1124,8 +1129,6 @@ int setautorun(const char *, const char *, int); int setconfbinding(const char *, const char *, int); int setconfcolor(const char *, const char *, int); int setconfmodkey(const char *, const char *, int); -int setconfmousebuttonmove(const char *, const char *, int); -int setconfmousebuttonresize(const char *, const char *, int); int setconfquirk(const char *, const char *, int); int setconfregion(const char *, const char *, int); int setconfspawn(const char *, const char *, int); @@ -1173,7 +1176,6 @@ void unmap_window(struct ws_win *); void updatenumlockmask(void); void update_floater(struct ws_win *); void update_modkey(unsigned int); -unsigned char update_mousebutton(unsigned char, unsigned int); void update_win_stacking(struct ws_win *); void update_window(struct ws_win *); void update_window_color(struct ws_win *); @@ -2221,6 +2223,8 @@ bar_urgent(char *s, size_t sz) strlcat(s, "- ", sz); } } + if(urgent_collapse && s[0]) + s[strlen(s) - 1] = 0; } void @@ -3894,6 +3898,11 @@ switchws(struct swm_region *r, union arg *args) old_ws->r = NULL; unmap_old = true; } else { + if (visible_noswap) { + center_pointer(other_r); + return; + } + /* the other ws is visible in another region, exchange them */ other_r->ws_prior = new_ws; other_r->ws = old_ws; @@ -4043,6 +4052,7 @@ focusrg(struct swm_region *r, union arg *args) void cyclerg(struct swm_region *r, union arg *args) { + union arg a; struct swm_region *rr = NULL; int i, num_screens; @@ -4056,11 +4066,13 @@ cyclerg(struct swm_region *r, union arg *args) switch (args->id) { case SWM_ARG_ID_CYCLERG_UP: + case SWM_ARG_ID_CYCLERG_MOVE_UP: rr = TAILQ_NEXT(r, entry); if (rr == NULL) rr = TAILQ_FIRST(&screens[i].rl); break; case SWM_ARG_ID_CYCLERG_DOWN: + case SWM_ARG_ID_CYCLERG_MOVE_DOWN: rr = TAILQ_PREV(r, swm_region_list, entry); if (rr == NULL) rr = TAILQ_LAST(&screens[i].rl, swm_region_list); @@ -4071,9 +4083,22 @@ cyclerg(struct swm_region *r, union arg *args) if (rr == NULL) return; - focus_region(rr); - center_pointer(rr); - focus_flush(); + switch (args->id) { + case SWM_ARG_ID_CYCLERG_UP: + case SWM_ARG_ID_CYCLERG_DOWN: + focus_region(rr); + center_pointer(rr); + focus_flush(); + break; + case SWM_ARG_ID_CYCLERG_MOVE_UP: + case SWM_ARG_ID_CYCLERG_MOVE_DOWN: + a.id = rr->ws->idx; + switchws(r, &a); + break; + default: + return; + }; + DNPRINTF(SWM_D_FOCUS, "cyclerg: done\n"); } @@ -4654,7 +4679,7 @@ update_floater(struct ws_win *win) win->g = r->g; - if (bar_enabled && ws->bar_enabled) { + if (bar_enabled && ws->bar_enabled && !maximize_hide_bar) { if (!bar_at_bottom) Y(win) += bar_height; HEIGHT(win) -= bar_height; @@ -4949,9 +4974,6 @@ vertical_config(struct workspace *ws, int id) ws->l_state.vertical_mwin = 1; ws->l_state.vertical_stacks = 1; break; - case SWM_ARG_ID_STACKBALANCE: - ws->l_state.vertical_msize = SWM_V_SLICE / (ws->l_state.vertical_stacks + 1); - break; case SWM_ARG_ID_MASTERSHRINK: if (ws->l_state.vertical_msize > 1) ws->l_state.vertical_msize--; @@ -4967,6 +4989,9 @@ vertical_config(struct workspace *ws, int id) if (ws->l_state.vertical_mwin > 0) ws->l_state.vertical_mwin--; break; + case SWM_ARG_ID_STACKBALANCE: + ws->l_state.vertical_msize = SWM_V_SLICE / (ws->l_state.vertical_stacks + 1); + break; case SWM_ARG_ID_STACKINC: ws->l_state.vertical_stacks++; break; @@ -5002,9 +5027,6 @@ horizontal_config(struct workspace *ws, int id) ws->l_state.horizontal_msize = SWM_H_SLICE / 2; ws->l_state.horizontal_stacks = 1; break; - case SWM_ARG_ID_STACKBALANCE: - ws->l_state.horizontal_msize = SWM_H_SLICE / (ws->l_state.horizontal_stacks + 1); - break; case SWM_ARG_ID_MASTERSHRINK: if (ws->l_state.horizontal_msize > 1) ws->l_state.horizontal_msize--; @@ -5020,6 +5042,9 @@ horizontal_config(struct workspace *ws, int id) if (ws->l_state.horizontal_mwin > 0) ws->l_state.horizontal_mwin--; break; + case SWM_ARG_ID_STACKBALANCE: + ws->l_state.horizontal_msize = SWM_H_SLICE / (ws->l_state.horizontal_stacks + 1); + break; case SWM_ARG_ID_STACKINC: ws->l_state.horizontal_stacks++; break; @@ -6709,6 +6734,8 @@ struct keyfunc { { "rg_7", focusrg, {.id = 6} }, { "rg_8", focusrg, {.id = 7} }, { "rg_9", focusrg, {.id = 8} }, + { "rg_move_next", cyclerg, {.id = SWM_ARG_ID_CYCLERG_MOVE_UP} }, + { "rg_move_prev", cyclerg, {.id = SWM_ARG_ID_CYCLERG_MOVE_DOWN} }, { "rg_next", cyclerg, {.id = SWM_ARG_ID_CYCLERG_UP} }, { "rg_prev", cyclerg, {.id = SWM_ARG_ID_CYCLERG_DOWN} }, { "screen_next", cyclerg, {.id = SWM_ARG_ID_CYCLERG_UP} }, @@ -6716,10 +6743,10 @@ struct keyfunc { { "search_win", search_win, {0} }, { "search_workspace", search_workspace, {0} }, { "spawn_custom", NULL, {0} }, + { "stack_balance", stack_config, {.id = SWM_ARG_ID_STACKBALANCE} }, { "stack_inc", stack_config, {.id = SWM_ARG_ID_STACKINC} }, { "stack_dec", stack_config, {.id = SWM_ARG_ID_STACKDEC} }, { "stack_reset", stack_config, {.id = SWM_ARG_ID_STACKRESET} }, - { "stack_balance", stack_config, {.id = SWM_ARG_ID_STACKBALANCE} }, { "swap_main", swapwin, {.id = SWM_ARG_ID_SWAPMAIN} }, { "swap_next", swapwin, {.id = SWM_ARG_ID_SWAPNEXT} }, { "swap_prev", swapwin, {.id = SWM_ARG_ID_SWAPPREV} }, @@ -6815,31 +6842,6 @@ update_modkey(unsigned int mod) buttons[i].mask = mod; } -unsigned char -update_mousebutton(unsigned char type, unsigned int but) -{ - int i; - - switch (type) { - case 0: - mouse_button_move = but; - break; - case 1: - mouse_button_resize = but; - break; - } - - for (i = 0; i < LENGTH(buttons); i++) { - if (buttons[i].func == move) - buttons[i].button = mouse_button_move; - - if (buttons[i].func == resize) - buttons[i].button = mouse_button_resize; - } - - return(1); -} - int spawn_expand(struct swm_region *r, union arg *args, const char *spawn_name, char ***ret_args) @@ -7522,7 +7524,6 @@ setup_keys(void) setkeybinding(MODKEY_SHIFT, XK_comma, KF_STACK_INC, NULL); setkeybinding(MODKEY_SHIFT, XK_period, KF_STACK_DEC, NULL); setkeybinding(MODKEY_SHIFT, XK_space, KF_STACK_RESET, NULL); - setkeybinding(MODKEY_SHIFT, XK_h, KF_STACK_BALANCE, NULL); setkeybinding(MODKEY, XK_Return, KF_SWAP_MAIN, NULL); setkeybinding(MODKEY_SHIFT, XK_j, KF_SWAP_NEXT, NULL); setkeybinding(MODKEY_SHIFT, XK_k, KF_SWAP_PREV, NULL); @@ -8036,6 +8037,7 @@ enum { SWM_S_FOCUS_MODE, SWM_S_ICONIC_ENABLED, SWM_S_JAVA_WORKAROUND, + SWM_S_MAXIMIZE_HIDE_BAR, SWM_S_REGION_PADDING, SWM_S_SPAWN_ORDER, SWM_S_SPAWN_TERM, @@ -8047,6 +8049,7 @@ enum { SWM_S_URGENT_COLLAPSE, SWM_S_URGENT_ENABLED, SWM_S_VERBOSE_LAYOUT, + SWM_S_VISIBLE_NOSWAP, SWM_S_WARP_POINTER, SWM_S_WINDOW_CLASS_ENABLED, SWM_S_WINDOW_INSTANCE_ENABLED, @@ -8209,6 +8212,9 @@ setconfvalue(const char *selector, const char *value, int flags) case SWM_S_JAVA_WORKAROUND: java_workaround = (atoi(value) != 0); break; + case SWM_S_MAXIMIZE_HIDE_BAR: + maximize_hide_bar = atoi(value); + break; case SWM_S_REGION_PADDING: region_padding = atoi(value); if (region_padding < 0) @@ -8262,6 +8268,9 @@ setconfvalue(const char *selector, const char *value, int flags) layouts[i].l_string = plain_stacker; } break; + case SWM_S_VISIBLE_NOSWAP: + visible_noswap = (atoi(value) != 0); + break; case SWM_S_WARP_POINTER: warp_pointer = (atoi(value) != 0); break; @@ -8337,48 +8346,6 @@ setconfmodkey(const char *selector, const char *value, int flags) return (0); } -int -setconfmousebuttonmove(const char *selector, const char *value, int flags) -{ - /* suppress unused warnings since vars are needed */ - (void)selector; - (void)flags; - - if (strncasecmp(value, "But1", strlen("But1")) == 0) { - if (!update_mousebutton(0, XCB_BUTTON_INDEX_1)) - return (1); - } else if (strncasecmp(value, "But2", strlen("But2")) == 0) { - if (!update_mousebutton(0, XCB_BUTTON_INDEX_2)) - return (1); - } else if (strncasecmp(value, "But3", strlen("But3")) == 0) { - if (!update_mousebutton(0, XCB_BUTTON_INDEX_3)) - return (1); - } else - return (1); - return (0); -} - -int -setconfmousebuttonresize(const char *selector, const char *value, int flags) -{ - /* suppress unused warnings since vars are needed */ - (void)selector; - (void)flags; - - if (strncasecmp(value, "But1", strlen("But1")) == 0) { - if (!update_mousebutton(1, XCB_BUTTON_INDEX_1)) - return (1); - } else if (strncasecmp(value, "But2", strlen("But2")) == 0) { - if (!update_mousebutton(1, XCB_BUTTON_INDEX_2)) - return (1); - } else if (strncasecmp(value, "But3", strlen("But3")) == 0) { - if (!update_mousebutton(1, XCB_BUTTON_INDEX_3)) - return (1); - } else - return (1); - return (0); -} - int setconfcolor(const char *selector, const char *value, int flags) { @@ -8626,9 +8593,8 @@ struct config_option configopt[] = { { "java_workaround", setconfvalue, SWM_S_JAVA_WORKAROUND }, { "keyboard_mapping", setkeymapping, 0 }, { "layout", setlayout, 0 }, + { "maximize_hide_bar", setconfvalue, SWM_S_MAXIMIZE_HIDE_BAR }, { "modkey", setconfmodkey, 0 }, - { "move_button", setconfmousebuttonmove, 0 }, - { "resize_button", setconfmousebuttonresize, 0 }, { "program", setconfspawn, 0 }, { "quirk", setconfquirk, 0 }, { "region", setconfregion, 0 }, @@ -8645,6 +8611,7 @@ struct config_option configopt[] = { { "urgent_collapse", setconfvalue, SWM_S_URGENT_COLLAPSE }, { "urgent_enabled", setconfvalue, SWM_S_URGENT_ENABLED }, { "verbose_layout", setconfvalue, SWM_S_VERBOSE_LAYOUT }, + { "visible_noswap", setconfvalue, SWM_S_VISIBLE_NOSWAP }, { "warp_pointer", setconfvalue, SWM_S_WARP_POINTER }, { "window_class_enabled", setconfvalue, SWM_S_WINDOW_CLASS_ENABLED }, { "window_instance_enabled", setconfvalue, SWM_S_WINDOW_INSTANCE_ENABLED }, @@ -8794,12 +8761,6 @@ conf_load(const char *filename, int keymapping) if (line) free(line); fclose(config); - - if (mouse_button_move == mouse_button_resize) { - add_startup_exception("%s: move and resize mouse buttons match", - filename); - } - DNPRINTF(SWM_D_CONF, "conf_load: end\n"); return (0);