diff --git a/config.h b/config.h index 2eb4afa..8a07caf 100644 --- a/config.h +++ b/config.h @@ -61,57 +61,57 @@ binding keys[] = { // Focus the top-most window in a spot. - { .mod = Mod4Mask, .key = XK_Left, .act = ACTION_FOCUS, .num = SPOT1 }, - { .mod = Mod4Mask, .key = XK_Up, .act = ACTION_FOCUS, .num = SPOT2 }, - { .mod = Mod4Mask, .key = XK_Right, .act = ACTION_FOCUS, .num = SPOT2 }, - { .mod = Mod4Mask, .key = XK_Down, .act = ACTION_FOCUS, .num = SPOT3 }, + { .mod = Mod4Mask, .key = XK_Left, .act = action_focus, .num = SPOT1 }, + { .mod = Mod4Mask, .key = XK_Up, .act = action_focus, .num = SPOT2 }, + { .mod = Mod4Mask, .key = XK_Right, .act = action_focus, .num = SPOT2 }, + { .mod = Mod4Mask, .key = XK_Down, .act = action_focus, .num = SPOT3 }, // Move the current window to another spot. - { .mod = ShiftMask|Mod4Mask, .key = XK_Left, .act = ACTION_MOVE, .num = SPOT1 }, - { .mod = ShiftMask|Mod4Mask, .key = XK_Up, .act = ACTION_MOVE, .num = SPOT2 }, - { .mod = ShiftMask|Mod4Mask, .key = XK_Right, .act = ACTION_MOVE, .num = SPOT2 }, - { .mod = ShiftMask|Mod4Mask, .key = XK_Down, .act = ACTION_MOVE, .num = SPOT3 }, + { .mod = ShiftMask|Mod4Mask, .key = XK_Left, .act = action_move, .num = SPOT1 }, + { .mod = ShiftMask|Mod4Mask, .key = XK_Up, .act = action_move, .num = SPOT2 }, + { .mod = ShiftMask|Mod4Mask, .key = XK_Right, .act = action_move, .num = SPOT2 }, + { .mod = ShiftMask|Mod4Mask, .key = XK_Down, .act = action_move, .num = SPOT3 }, // Flip between the top two windows in the current spot. - { .mod = Mod4Mask, .key = XK_Tab, .act = ACTION_OTHER }, + { .mod = Mod4Mask, .key = XK_Tab, .act = action_other }, // Cycle through all windows in the current spot. - { .mod = Mod4Mask, .key = XK_grave, .act = ACTION_CYCLE }, + { .mod = Mod4Mask, .key = XK_grave, .act = action_cycle }, // Gracefully close the current window. - { .mod = Mod4Mask, .key = XK_Escape, .act = ACTION_CLOSE }, + { .mod = Mod4Mask, .key = XK_Escape, .act = action_close }, // Toggle current window full screen. - { .mod = Mod4Mask, .key = XK_f, .act = ACTION_FULLSCREEN_TOGGLE }, + { .mod = Mod4Mask, .key = XK_f, .act = action_fullscreen }, // Toggle current window above. - { .mod = Mod4Mask, .key = XK_a, .act = ACTION_ABOVE_TOGGLE }, + { .mod = Mod4Mask, .key = XK_a, .act = action_above }, // Switch focus between monitors. - { .mod = Mod4Mask, .key = XK_Next, .act = ACTION_FOCUS_MONITOR, .num = +1 }, - { .mod = Mod4Mask, .key = XK_Prior, .act = ACTION_FOCUS_MONITOR, .num = -1 }, + { .mod = Mod4Mask, .key = XK_Next, .act = action_focus_monitor, .num = +1 }, + { .mod = Mod4Mask, .key = XK_Prior, .act = action_focus_monitor, .num = -1 }, // Move windows between monitors. - { .mod = ShiftMask|Mod4Mask, .key = XK_Next, .act = ACTION_MOVE_MONITOR, .num = +1 }, - { .mod = ShiftMask|Mod4Mask, .key = XK_Prior, .act = ACTION_MOVE_MONITOR, .num = -1 }, + { .mod = ShiftMask|Mod4Mask, .key = XK_Next, .act = action_move_monitor, .num = +1 }, + { .mod = ShiftMask|Mod4Mask, .key = XK_Prior, .act = action_move_monitor, .num = -1 }, // Launcher - { .mod = Mod4Mask, .key = XK_x, .act = ACTION_COMMAND, .data = "dmenu_run" }, + { .mod = Mod4Mask, .key = XK_x, .act = action_command, .data = "dmenu_run" }, // Snapshot state - { .mod = Mod4Mask, .key = XK_s, .act = ACTION_SNAPSHOT }, - { .mod = Mod4Mask, .key = XK_r, .act = ACTION_ROLLBACK }, + { .mod = Mod4Mask, .key = XK_s, .act = action_snapshot }, + { .mod = Mod4Mask, .key = XK_r, .act = action_rollback }, // Find or start apps by WM_CLASS (lower case match). // Only works for apps that use some form of their binary name as their class... - { .mod = AnyModifier, .key = XK_F1, .act = ACTION_FIND_OR_START, .data = "konsole" }, - { .mod = AnyModifier, .key = XK_F2, .act = ACTION_FIND_OR_START, .data = "chromium" }, - { .mod = AnyModifier, .key = XK_F3, .act = ACTION_FIND_OR_START, .data = "pcmanfm" }, - { .mod = AnyModifier, .key = XK_F4, .act = ACTION_FIND_OR_START, .data = "kate" }, + { .mod = AnyModifier, .key = XK_F1, .act = action_find_or_start, .data = "konsole" }, + { .mod = AnyModifier, .key = XK_F2, .act = action_find_or_start, .data = "chromium" }, + { .mod = AnyModifier, .key = XK_F3, .act = action_find_or_start, .data = "pcmanfm" }, + { .mod = AnyModifier, .key = XK_F4, .act = action_find_or_start, .data = "kate" }, - { .mod = AnyModifier, .key = XK_F5, .act = ACTION_FIND_OR_START, .data = "firefox" }, - { .mod = AnyModifier, .key = XK_F6, .act = ACTION_FIND_OR_START, .data = "xchat" }, - { .mod = AnyModifier, .key = XK_F7, .act = ACTION_FIND_OR_START, .data = "pidgin" }, + { .mod = AnyModifier, .key = XK_F5, .act = action_find_or_start, .data = "firefox" }, + { .mod = AnyModifier, .key = XK_F6, .act = action_find_or_start, .data = "xchat" }, + { .mod = AnyModifier, .key = XK_F7, .act = action_find_or_start, .data = "pidgin" }, - { .mod = AnyModifier, .key = XK_Menu, .act = ACTION_COMMAND, .data = "xowl" }, + { .mod = AnyModifier, .key = XK_Menu, .act = action_command, .data = "xowl" }, }; \ No newline at end of file diff --git a/xoat.c b/xoat.c index 7e37088..b945e2e 100644 --- a/xoat.c +++ b/xoat.c @@ -52,7 +52,6 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. X(XOAT_SPOT),\ X(XOAT_EXIT),\ X(XOAT_RESTART),\ - X(_MOTIF_WM_HINTS),\ X(_NET_SUPPORTED),\ X(_NET_ACTIVE_WINDOW),\ X(_NET_CLOSE_WINDOW),\ @@ -96,32 +95,6 @@ enum { MONITOR_CURRENT=-1 }; enum { SPOT1=1, SPOT2, SPOT3, SPOT_CURRENT, SPOT_SMART, SPOT1_LEFT, SPOT1_RIGHT }; enum { FOCUS_IGNORE=1, FOCUS_STEAL, }; -enum { - ACTION_NONE, - ACTION_MOVE, - ACTION_FOCUS, - ACTION_CYCLE, - ACTION_CLOSE, - ACTION_OTHER, - ACTION_COMMAND, - ACTION_FIND_OR_START, - ACTION_MOVE_MONITOR, - ACTION_FOCUS_MONITOR, - ACTION_FULLSCREEN_TOGGLE, - ACTION_ABOVE_TOGGLE, - ACTION_SNAPSHOT, - ACTION_ROLLBACK, - ACTIONS -}; - -typedef struct { - unsigned int mod; - KeySym key; - short act; - void *data; - int num; -} binding; - typedef struct { short x, y, w, h; } box; @@ -152,6 +125,28 @@ typedef struct { Window windows[STACK]; } stack; +typedef struct { + unsigned int mod; + KeySym key; + void (*act)(void*, int, client*); + void *data; + int num; +} binding; + +void action_move(void*, int, client*); +void action_focus(void*, int, client*); +void action_close(void*, int, client*); +void action_cycle(void*, int, client*); +void action_other(void*, int, client*); +void action_command(void*, int, client*); +void action_find_or_start(void*, int, client*); +void action_move_monitor(void*, int, client*); +void action_focus_monitor(void*, int, client*); +void action_fullscreen(void*, int, client*); +void action_above(void*, int, client*); +void action_snapshot(void*, int, client*); +void action_rollback(void*, int, client*); + #include "config.h" Display *display; @@ -749,24 +744,6 @@ void action_rollback(void *data, int num, client *cli) } } -// key actions -void (*actions[ACTIONS])(void*, int, client*) = { - [ACTION_NONE] = NULL, - [ACTION_MOVE] = action_move, - [ACTION_FOCUS] = action_focus, - [ACTION_CYCLE] = action_cycle, - [ACTION_CLOSE] = action_close, - [ACTION_OTHER] = action_other, - [ACTION_COMMAND] = action_command, - [ACTION_FIND_OR_START] = action_find_or_start, - [ACTION_MOVE_MONITOR] = action_move_monitor, - [ACTION_FOCUS_MONITOR] = action_focus_monitor, - [ACTION_FULLSCREEN_TOGGLE] = action_fullscreen, - [ACTION_ABOVE_TOGGLE] = action_above, - [ACTION_SNAPSHOT] = action_snapshot, - [ACTION_ROLLBACK] = action_rollback, -}; - // ------- event handlers -------- void create_notify(XEvent *e) @@ -874,7 +851,7 @@ void key_press(XEvent *ev) if (bind && bind->act) { client *cli = window_build_client(current); - actions[bind->act](bind->data, bind->num, cli); + bind->act(bind->data, bind->num, cli); client_free(cli); } } @@ -1081,4 +1058,4 @@ int main(int argc, char *argv[]) handlers[ev.type](&ev); } return EXIT_SUCCESS; -} +} \ No newline at end of file