From: Tony Crisci Date: Mon, 14 Apr 2014 18:52:56 +0000 (-0400) Subject: Move switch_mode to bindings.[ch] X-Git-Tag: 4.8~82 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=702906d0cf4cce5b850a0f7cc669b78e205ad9aa;p=i3%2Fi3 Move switch_mode to bindings.[ch] --- diff --git a/include/bindings.h b/include/bindings.h index 26532024..d3097902 100644 --- a/include/bindings.h +++ b/include/bindings.h @@ -42,3 +42,9 @@ Binding *get_keyboard_binding(uint16_t modifiers, bool key_release, xcb_keycode_ * */ void translate_keysyms(void); + +/** + * Switches the key bindings to the given mode, if the mode exists + * + */ +void switch_mode(const char *new_mode); diff --git a/include/config.h b/include/config.h index 0c3e25db..0bd68b9a 100644 --- a/include/config.h +++ b/include/config.h @@ -315,12 +315,6 @@ void load_configuration(xcb_connection_t *conn, const char *override_configfile, */ void ungrab_all_keys(xcb_connection_t *conn); -/** - * Switches the key bindings to the given mode, if the mode exists - * - */ -void switch_mode(const char *new_mode); - /** * Sends the current bar configuration as an event to all barconfig_update listeners. * This update mechnism currently only includes the hidden_state and the mode in the config. diff --git a/src/bindings.c b/src/bindings.c index 5dfe5472..c3e9c1b2 100644 --- a/src/bindings.c +++ b/src/bindings.c @@ -229,3 +229,33 @@ void translate_keysyms(void) { bind->number_keycodes); } } + +/* + * Switches the key bindings to the given mode, if the mode exists + * + */ +void switch_mode(const char *new_mode) { + struct Mode *mode; + + DLOG("Switching to mode %s\n", new_mode); + + SLIST_FOREACH(mode, &modes, modes) { + if (strcasecmp(mode->name, new_mode) != 0) + continue; + + ungrab_all_keys(conn); + bindings = mode->bindings; + translate_keysyms(); + grab_all_keys(conn, false); + + char *event_msg; + sasprintf(&event_msg, "{\"change\":\"%s\"}", mode->name); + + ipc_send_event("mode", I3_IPC_EVENT_MODE, event_msg); + FREE(event_msg); + + return; + } + + ELOG("ERROR: Mode not found\n"); +} diff --git a/src/config.c b/src/config.c index a8e66314..0f06511f 100644 --- a/src/config.c +++ b/src/config.c @@ -30,36 +30,6 @@ void ungrab_all_keys(xcb_connection_t *conn) { xcb_ungrab_key(conn, XCB_GRAB_ANY, root, XCB_BUTTON_MASK_ANY); } -/* - * Switches the key bindings to the given mode, if the mode exists - * - */ -void switch_mode(const char *new_mode) { - struct Mode *mode; - - LOG("Switching to mode %s\n", new_mode); - - SLIST_FOREACH(mode, &modes, modes) { - if (strcasecmp(mode->name, new_mode) != 0) - continue; - - ungrab_all_keys(conn); - bindings = mode->bindings; - translate_keysyms(); - grab_all_keys(conn, false); - - char *event_msg; - sasprintf(&event_msg, "{\"change\":\"%s\"}", mode->name); - - ipc_send_event("mode", I3_IPC_EVENT_MODE, event_msg); - FREE(event_msg); - - return; - } - - ELOG("ERROR: Mode not found\n"); -} - /* * Sends the current bar configuration as an event to all barconfig_update listeners. * This update mechnism currently only includes the hidden_state and the mode in the config.