X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=spectrwm.c;h=993abfd52380806e6b0ecdb3b624f61b83580775;hb=09729fd71575cdd663856f441ba8671f4032feb1;hp=893d5208003d825ba5ac3986a1405036b755325c;hpb=77dc1e0928d50ff6af5d9a386f57c20099629eae;p=spectrwm.git diff --git a/spectrwm.c b/spectrwm.c index 893d520..993abfd 100644 --- a/spectrwm.c +++ b/spectrwm.c @@ -699,44 +699,224 @@ struct cursors { {"top_right_corner", XC_top_right_corner, XCB_CURSOR_NONE}, }; +/* spawn */ +struct spawn_prog { + TAILQ_ENTRY(spawn_prog) entry; + char *name; + int argc; + char **argv; +}; +TAILQ_HEAD(spawn_list, spawn_prog); +struct spawn_list spawns = TAILQ_HEAD_INITIALIZER(spawns); + +/* user/key callable function IDs */ +enum keyfuncid { + KF_BAR_TOGGLE, + KF_BUTTON2, + KF_CYCLE_LAYOUT, + KF_FLIP_LAYOUT, + KF_FLOAT_TOGGLE, + KF_FOCUS_MAIN, + KF_FOCUS_NEXT, + KF_FOCUS_PREV, + KF_HEIGHT_GROW, + KF_HEIGHT_SHRINK, + KF_ICONIFY, + KF_MASTER_SHRINK, + KF_MASTER_GROW, + KF_MASTER_ADD, + KF_MASTER_DEL, + KF_MOVE_DOWN, + KF_MOVE_LEFT, + KF_MOVE_RIGHT, + KF_MOVE_UP, + KF_MVWS_1, + KF_MVWS_2, + KF_MVWS_3, + KF_MVWS_4, + KF_MVWS_5, + KF_MVWS_6, + KF_MVWS_7, + KF_MVWS_8, + KF_MVWS_9, + KF_MVWS_10, + KF_MVWS_11, + KF_MVWS_12, + KF_MVWS_13, + KF_MVWS_14, + KF_MVWS_15, + KF_MVWS_16, + KF_MVWS_17, + KF_MVWS_18, + KF_MVWS_19, + KF_MVWS_20, + KF_MVWS_21, + KF_MVWS_22, + KF_NAME_WORKSPACE, + KF_QUIT, + KF_RAISE_TOGGLE, + KF_RESTART, + KF_SCREEN_NEXT, + KF_SCREEN_PREV, + KF_SEARCH_WIN, + KF_SEARCH_WORKSPACE, + KF_SPAWN_CUSTOM, + KF_STACK_INC, + KF_STACK_DEC, + KF_STACK_RESET, + KF_SWAP_MAIN, + KF_SWAP_NEXT, + KF_SWAP_PREV, + KF_UNICONIFY, + KF_VERSION, + KF_WIDTH_GROW, + KF_WIDTH_SHRINK, + KF_WIND_DEL, + KF_WIND_KILL, + KF_WS_1, + KF_WS_2, + KF_WS_3, + KF_WS_4, + KF_WS_5, + KF_WS_6, + KF_WS_7, + KF_WS_8, + KF_WS_9, + KF_WS_10, + KF_WS_11, + KF_WS_12, + KF_WS_13, + KF_WS_14, + KF_WS_15, + KF_WS_16, + KF_WS_17, + KF_WS_18, + KF_WS_19, + KF_WS_20, + KF_WS_21, + KF_WS_22, + KF_WS_NEXT, + KF_WS_NEXT_ALL, + KF_WS_PREV, + KF_WS_PREV_ALL, + KF_WS_PRIOR, + KF_DUMPWINS, /* MUST BE LAST */ + KF_INVALID +}; + +struct key { + RB_ENTRY(key) entry; + unsigned int mod; + KeySym keysym; + enum keyfuncid funcid; + char *spawn_name; +}; +RB_HEAD(key_tree, key); + /* function prototypes */ +void adjust_font(struct ws_win *); +void bar_class_name(char *, size_t, struct swm_region *); +void bar_class_title_name(char *, size_t, struct swm_region *); +void bar_cleanup(struct swm_region *); +void bar_extra_stop(void); +void bar_fmt(const char *, char *, struct swm_region *, size_t); +void bar_fmt_expand(char *, size_t); +void bar_fmt_print(void); +void bar_print(struct swm_region *, const char *); +void bar_print_legacy(struct swm_region *, const char *); +void bar_refresh(void); +void bar_replace(char *, char *, struct swm_region *, size_t); +void bar_replace_pad(char *, int *, size_t); +char * bar_replace_seq(char *, char *, struct swm_region *, size_t *, + size_t); +void bar_setup(struct swm_region *); +void bar_signal(int); +void bar_title_name(char *, size_t, struct swm_region *); +void bar_toggle(struct swm_region *, union arg *); +void bar_update(void); +void bar_urgent(char *, size_t); +void bar_window_float(char *, size_t, struct swm_region *); +void bar_window_name(char *, size_t, struct swm_region *); +void bar_workspace_name(char *, size_t, struct swm_region *); void buttonpress(xcb_button_press_event_t *); void check_conn(void); +void clear_keys(void); void clientmessage(xcb_client_message_event_t *); +void client_msg(struct ws_win *, xcb_atom_t, xcb_timestamp_t); int conf_load(const char *, int); void configurenotify(xcb_configure_notify_event_t *); void configurerequest(xcb_configure_request_event_t *); +void config_win(struct ws_win *, xcb_configure_request_event_t *); void constrain_window(struct ws_win *, struct swm_region *, int); +int count_win(struct workspace *, int); +void cursors_cleanup(void); +void cursors_load(void); +void custom_region(char *); +void cyclescr(struct swm_region *, union arg *); +void cyclews(struct swm_region *, union arg *); +void cycle_layout(struct swm_region *, union arg *); void destroynotify(xcb_destroy_notify_event_t *); +void dumpwins(struct swm_region *, union arg *); +int enable_wm(void); void enternotify(xcb_enter_notify_event_t *); void event_drain(uint8_t); void event_error(xcb_generic_error_t *); void event_handle(xcb_generic_event_t *); +void ewmh_autoquirk(struct ws_win *); +void ewmh_get_win_state(struct ws_win *); +int ewmh_set_win_fullscreen(struct ws_win *, int); +void ewmh_update_actions(struct ws_win *); +void ewmh_update_win_state(struct ws_win *, xcb_atom_t, long); char *expand_tilde(const char *); void expose(xcb_expose_event_t *); +void fake_keypress(struct ws_win *, xcb_keysym_t, uint16_t); +struct pid_e *find_pid(pid_t); +struct ws_win *find_unmanaged_window(xcb_window_t); struct ws_win *find_window(xcb_window_t); +void floating_toggle(struct swm_region *, union arg *); int floating_toggle_win(struct ws_win *); void focus(struct swm_region *, union arg *); -void focus_flush(void); -struct ws_win *get_focus_magic(struct ws_win *); -struct ws_win *get_focus_prev(struct ws_win *); -void focus_win(struct ws_win *); #ifdef SWM_DEBUG void focusin(xcb_focus_in_event_t *); +void focusout(xcb_focus_out_event_t *); #endif +void focus_flush(void); +void focus_win(struct ws_win *); +void fontset_init(void); +void free_window(struct ws_win *); xcb_atom_t get_atom_from_string(const char *); #ifdef SWM_DEBUG char *get_atom_name(xcb_atom_t); +#endif +struct ws_win *get_focus_magic(struct ws_win *); +struct ws_win *get_focus_prev(struct ws_win *); +#ifdef SWM_DEBUG char *get_notify_detail_label(uint8_t); char *get_notify_mode_label(uint8_t); #endif struct ws_win *get_pointer_win(xcb_window_t); struct ws_win *get_region_focus(struct swm_region *); xcb_screen_t *get_screen(int); +#ifdef SWM_DEBUG +char *get_stack_mode_name(uint8_t); +#endif +int32_t get_swm_iconic(struct ws_win *); char *get_win_name(xcb_window_t); +int get_ws_idx(xcb_window_t); uint32_t getstate(xcb_window_t); void grabbuttons(struct ws_win *); +void grabkeys(void); +void grab_windows(void); +void iconify(struct swm_region *, union arg *); +int isxlfd(char *); void keypress(xcb_key_press_event_t *); +int key_cmp(struct key *, struct key *); +void key_insert(unsigned int, KeySym, enum keyfuncid, const char *); +struct key *key_lookup(unsigned int, KeySym); +void key_remove(struct key *); +void key_replace(struct key *, unsigned int, KeySym, enum keyfuncid, + const char *); +void kill_refs(struct ws_win *); #ifdef SWM_DEBUG void leavenotify(xcb_leave_notify_event_t *); #endif @@ -746,18 +926,104 @@ void map_window(struct ws_win *); void mapnotify(xcb_map_notify_event_t *); void mappingnotify(xcb_mapping_notify_event_t *); void maprequest(xcb_map_request_event_t *); +void move(struct ws_win *, union arg *); +void move_step(struct swm_region *, union arg *); +uint32_t name_to_pixel(const char *); +void name_workspace(struct swm_region *, union arg *); void new_region(struct swm_screen *, int, int, int, int); +int parsekeys(char *, unsigned int, unsigned int *, KeySym *); +int parsequirks(char *, unsigned long *); int parse_rgb(const char *, uint16_t *, uint16_t *, uint16_t *); +void pressbutton(struct swm_region *, union arg *); +void priorws(struct swm_region *, union arg *); +#ifdef SWM_DEBUG +void print_win_geom(xcb_window_t); +#endif void propertynotify(xcb_property_notify_event_t *); -void spawn_select(struct swm_region *, union arg *, const char *, int *); +void quirk_insert(const char *, const char *, unsigned long); +void quirk_remove(struct quirk *); +void quirk_replace(struct quirk *, const char *, const char *, + unsigned long); +void quit(struct swm_region *, union arg *); +void raise_toggle(struct swm_region *, union arg *); +void resize(struct ws_win *, union arg *); +void resize_step(struct swm_region *, union arg *); +void restart(struct swm_region *, union arg *); +struct swm_region *root_to_region(xcb_window_t, int); void screenchange(xcb_randr_screen_change_notify_event_t *); +void scan_xrandr(int); +void search_do_resp(void); +void search_resp_name_workspace(const char *, unsigned long); +void search_resp_search_window(const char *); +void search_resp_search_workspace(const char *); +void search_resp_uniconify(const char *, unsigned long); +void search_win(struct swm_region *, union arg *); +void search_win_cleanup(void); +void search_workspace(struct swm_region *, union arg *); +void send_to_ws(struct swm_region *, union arg *); +int setautorun(char *, char *, int); +int setconfbinding(char *, char *, int); +int setconfcolor(char *, char *, int); +int setconfmodkey(char *, char *, int); +int setconfquirk(char *, char *, int); +int setconfregion(char *, char *, int); +int setconfspawn(char *, char *, int); +int setconfvalue(char *, char *, int); +void setkeybinding(unsigned int, KeySym, enum keyfuncid, const char *); +int setkeymapping(char *, char *, int); +int setlayout(char *, char *, int); +void setquirk(const char *, const char *, unsigned long); +void setscreencolor(char *, int, int); +void setspawn(const char *, const char *); +void setup_ewmh(void); +void setup_globals(void); +void setup_keys(void); +void setup_quirks(void); +void setup_screens(void); +void setup_spawn(void); +void set_child_transient(struct ws_win *, xcb_window_t *); +void set_swm_iconic(struct ws_win *, int); +void set_win_state(struct ws_win *, uint16_t); void shutdown_cleanup(void); +void sighdlr(int); +void socket_setnonblock(int); +void sort_windows(struct ws_win_list *); +void spawn(int, union arg *, int); +void spawn_custom(struct swm_region *, union arg *, const char *); +int spawn_expand(struct swm_region *, union arg *, const char *, char ***); +void spawn_insert(const char *, const char *); +void spawn_remove(struct spawn_prog *); +void spawn_replace(struct spawn_prog *, const char *, const char *); +void spawn_select(struct swm_region *, union arg *, const char *, int *); +void stack_config(struct swm_region *, union arg *); +void stack_floater(struct ws_win *, struct swm_region *); +void stack_master(struct workspace *, struct swm_geometry *, int, int); void store_float_geom(struct ws_win *, struct swm_region *); +char * strdupsafe(const char *); +void swapwin(struct swm_region *, union arg *); +void switchws(struct swm_region *, union arg *); +void teardown_ewmh(void); +void unfocus_win(struct ws_win *); +void uniconify(struct swm_region *, union arg *); void unmanage_window(struct ws_win *); void unmapnotify(xcb_unmap_notify_event_t *); -void unfocus_win(struct ws_win *); +void unmap_all(void); +void unmap_window(struct ws_win *); +void updatenumlockmask(void); +void update_modkey(unsigned int); void update_window(struct ws_win *); +int validate_win(struct ws_win *); +int validate_ws(struct workspace *); /*void visibilitynotify(xcb_visibility_notify_event_t *);*/ +void version(struct swm_region *, union arg *); +pid_t window_get_pid(xcb_window_t); +void wkill(struct swm_region *, union arg *); +void workaround(void); +void xft_init(struct swm_region *); + +RB_PROTOTYPE(key_tree, key, entry, key_cmp); +RB_GENERATE(key_tree, key, entry, key_cmp); +struct key_tree keys; void cursors_load(void) @@ -4785,7 +5051,7 @@ resize(struct ws_win *win, union arg *args) { xcb_timestamp_t timestamp = 0; struct swm_region *r = NULL; - int resize_step = 0; + int resize_stp = 0; struct swm_geometry g; int top = 0, left = 0, resizing; int dx, dy; @@ -4823,24 +5089,24 @@ resize(struct ws_win *win, union arg *args) switch (args->id) { case SWM_ARG_ID_WIDTHSHRINK: WIDTH(win) -= SWM_RESIZE_STEPS; - resize_step = 1; + resize_stp = 1; break; case SWM_ARG_ID_WIDTHGROW: WIDTH(win) += SWM_RESIZE_STEPS; - resize_step = 1; + resize_stp = 1; break; case SWM_ARG_ID_HEIGHTSHRINK: HEIGHT(win) -= SWM_RESIZE_STEPS; - resize_step = 1; + resize_stp = 1; break; case SWM_ARG_ID_HEIGHTGROW: HEIGHT(win) += SWM_RESIZE_STEPS; - resize_step = 1; + resize_stp = 1; break; default: break; } - if (resize_step) { + if (resize_stp) { constrain_window(win, r, 1); update_window(win); store_float_geom(win,r); @@ -4974,7 +5240,7 @@ void move(struct ws_win *win, union arg *args) { xcb_timestamp_t timestamp = 0; - int move_step = 0, moving; + int move_stp = 0, moving; struct swm_region *r = NULL; xcb_query_pointer_reply_t *qpr; xcb_generic_event_t *evt; @@ -5007,28 +5273,28 @@ move(struct ws_win *win, union arg *args) focus_flush(); - move_step = 0; + move_stp = 0; switch (args->id) { case SWM_ARG_ID_MOVELEFT: X(win) -= (SWM_MOVE_STEPS - border_width); - move_step = 1; + move_stp = 1; break; case SWM_ARG_ID_MOVERIGHT: X(win) += (SWM_MOVE_STEPS - border_width); - move_step = 1; + move_stp = 1; break; case SWM_ARG_ID_MOVEUP: Y(win) -= (SWM_MOVE_STEPS - border_width); - move_step = 1; + move_stp = 1; break; case SWM_ARG_ID_MOVEDOWN: Y(win) += (SWM_MOVE_STEPS - border_width); - move_step = 1; + move_stp = 1; break; default: break; } - if (move_step) { + if (move_stp) { constrain_window(win, r, 0); update_window(win); store_float_geom(win, r); @@ -5102,101 +5368,6 @@ move_step(struct swm_region *r, union arg *args) focus_flush(); } -/* user/key callable function IDs */ -enum keyfuncid { - KF_BAR_TOGGLE, - KF_BUTTON2, - KF_CYCLE_LAYOUT, - KF_FLIP_LAYOUT, - KF_FLOAT_TOGGLE, - KF_FOCUS_MAIN, - KF_FOCUS_NEXT, - KF_FOCUS_PREV, - KF_HEIGHT_GROW, - KF_HEIGHT_SHRINK, - KF_ICONIFY, - KF_MASTER_SHRINK, - KF_MASTER_GROW, - KF_MASTER_ADD, - KF_MASTER_DEL, - KF_MOVE_DOWN, - KF_MOVE_LEFT, - KF_MOVE_RIGHT, - KF_MOVE_UP, - KF_MVWS_1, - KF_MVWS_2, - KF_MVWS_3, - KF_MVWS_4, - KF_MVWS_5, - KF_MVWS_6, - KF_MVWS_7, - KF_MVWS_8, - KF_MVWS_9, - KF_MVWS_10, - KF_MVWS_11, - KF_MVWS_12, - KF_MVWS_13, - KF_MVWS_14, - KF_MVWS_15, - KF_MVWS_16, - KF_MVWS_17, - KF_MVWS_18, - KF_MVWS_19, - KF_MVWS_20, - KF_MVWS_21, - KF_MVWS_22, - KF_NAME_WORKSPACE, - KF_QUIT, - KF_RAISE_TOGGLE, - KF_RESTART, - KF_SCREEN_NEXT, - KF_SCREEN_PREV, - KF_SEARCH_WIN, - KF_SEARCH_WORKSPACE, - KF_SPAWN_CUSTOM, - KF_STACK_INC, - KF_STACK_DEC, - KF_STACK_RESET, - KF_SWAP_MAIN, - KF_SWAP_NEXT, - KF_SWAP_PREV, - KF_UNICONIFY, - KF_VERSION, - KF_WIDTH_GROW, - KF_WIDTH_SHRINK, - KF_WIND_DEL, - KF_WIND_KILL, - KF_WS_1, - KF_WS_2, - KF_WS_3, - KF_WS_4, - KF_WS_5, - KF_WS_6, - KF_WS_7, - KF_WS_8, - KF_WS_9, - KF_WS_10, - KF_WS_11, - KF_WS_12, - KF_WS_13, - KF_WS_14, - KF_WS_15, - KF_WS_16, - KF_WS_17, - KF_WS_18, - KF_WS_19, - KF_WS_20, - KF_WS_21, - KF_WS_22, - KF_WS_NEXT, - KF_WS_NEXT_ALL, - KF_WS_PREV, - KF_WS_PREV_ALL, - KF_WS_PRIOR, - KF_DUMPWINS, /* MUST BE LAST */ - KF_INVALID -}; - /* key definitions */ struct keyfunc { char name[SWM_FUNCNAME_LEN]; @@ -5296,14 +5467,6 @@ struct keyfunc { { "dumpwins", dumpwins, {0} }, /* MUST BE LAST */ { "invalid key func", NULL, {0} }, }; -struct key { - RB_ENTRY(key) entry; - unsigned int mod; - KeySym keysym; - enum keyfuncid funcid; - char *spawn_name; -}; -RB_HEAD(key_tree, key); int key_cmp(struct key *kp1, struct key *kp2) @@ -5321,9 +5484,6 @@ key_cmp(struct key *kp1, struct key *kp2) return (0); } -RB_GENERATE(key_tree, key, entry, key_cmp); -struct key_tree keys; - /* mouse */ enum { client_click, root_click }; struct button { @@ -5361,16 +5521,6 @@ update_modkey(unsigned int mod) buttons[i].mask = mod; } -/* spawn */ -struct spawn_prog { - TAILQ_ENTRY(spawn_prog) entry; - char *name; - int argc; - char **argv; -}; -TAILQ_HEAD(spawn_list, spawn_prog); -struct spawn_list spawns = TAILQ_HEAD_INITIALIZER(spawns); - int spawn_expand(struct swm_region *r, union arg *args, const char *spawn_name, char ***ret_args)