remove unecessary jump table

This commit is contained in:
seanpringle
2012-09-17 13:46:32 +10:00
parent 83abf12f2e
commit 9153b2b5ea
2 changed files with 47 additions and 70 deletions

View File

@@ -61,50 +61,50 @@
binding keys[] = { binding keys[] = {
// Focus the top-most window in a spot. // Focus the top-most window in a spot.
{ .mod = Mod4Mask, .key = XK_Left, .act = ACTION_FOCUS, .num = SPOT1 }, { .mod = Mod4Mask, .key = XK_Left, .act = action_focus, .num = SPOT1 },
{ .mod = Mod4Mask, .key = XK_Up, .act = ACTION_FOCUS, .num = SPOT2 }, { .mod = Mod4Mask, .key = XK_Up, .act = action_focus, .num = SPOT2 },
{ .mod = Mod4Mask, .key = XK_Right, .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_Down, .act = action_focus, .num = SPOT3 },
// Move the current window to another spot. // Move the current window to another spot.
{ .mod = ShiftMask|Mod4Mask, .key = XK_Left, .act = ACTION_MOVE, .num = SPOT1 }, { .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_Up, .act = action_move, .num = SPOT2 },
{ .mod = ShiftMask|Mod4Mask, .key = XK_Right, .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_Down, .act = action_move, .num = SPOT3 },
// Flip between the top two windows in the current spot. // 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. // 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. // 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. // 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. // 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. // Switch focus between monitors.
{ .mod = Mod4Mask, .key = XK_Next, .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 }, { .mod = Mod4Mask, .key = XK_Prior, .act = action_focus_monitor, .num = -1 },
// Move windows between monitors. // Move windows between monitors.
{ .mod = ShiftMask|Mod4Mask, .key = XK_Next, .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 }, { .mod = ShiftMask|Mod4Mask, .key = XK_Prior, .act = action_move_monitor, .num = -1 },
// Launcher // 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 // Snapshot state
{ .mod = Mod4Mask, .key = XK_s, .act = ACTION_SNAPSHOT }, { .mod = Mod4Mask, .key = XK_s, .act = action_snapshot },
{ .mod = Mod4Mask, .key = XK_r, .act = ACTION_ROLLBACK }, { .mod = Mod4Mask, .key = XK_r, .act = action_rollback },
// Find or start apps by WM_CLASS (lower case match). // 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... // 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 = "urxvt" }, { .mod = AnyModifier, .key = XK_F1, .act = action_find_or_start, .data = "urxvt" },
{ .mod = AnyModifier, .key = XK_F2, .act = ACTION_FIND_OR_START, .data = "chromium" }, { .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_F3, .act = action_find_or_start, .data = "pcmanfm" },
}; };

69
xoat.c
View File

@@ -52,7 +52,6 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
X(XOAT_SPOT),\ X(XOAT_SPOT),\
X(XOAT_EXIT),\ X(XOAT_EXIT),\
X(XOAT_RESTART),\ X(XOAT_RESTART),\
X(_MOTIF_WM_HINTS),\
X(_NET_SUPPORTED),\ X(_NET_SUPPORTED),\
X(_NET_ACTIVE_WINDOW),\ X(_NET_ACTIVE_WINDOW),\
X(_NET_CLOSE_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 { SPOT1=1, SPOT2, SPOT3, SPOT_CURRENT, SPOT_SMART, SPOT1_LEFT, SPOT1_RIGHT };
enum { FOCUS_IGNORE=1, FOCUS_STEAL, }; 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 { typedef struct {
short x, y, w, h; short x, y, w, h;
} box; } box;
@@ -152,6 +125,28 @@ typedef struct {
Window windows[STACK]; Window windows[STACK];
} 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" #include "config.h"
Display *display; 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 -------- // ------- event handlers --------
void create_notify(XEvent *e) void create_notify(XEvent *e)
@@ -874,7 +851,7 @@ void key_press(XEvent *ev)
if (bind && bind->act) if (bind && bind->act)
{ {
client *cli = window_build_client(current); client *cli = window_build_client(current);
actions[bind->act](bind->data, bind->num, cli); bind->act(bind->data, bind->num, cli);
client_free(cli); client_free(cli);
} }
} }