+Action *action_from_string(char *name)
+{
+ Action *a = NULL;
+ if (!g_ascii_strcasecmp(name, "execute")) {
+ a = action_new(action_execute);
+ } else if (!g_ascii_strcasecmp(name, "focus")) {
+ a = action_new(action_focus);
+ } else if (!g_ascii_strcasecmp(name, "unfocus")) {
+ a = action_new(action_unfocus);
+ } else if (!g_ascii_strcasecmp(name, "iconify")) {
+ a = action_new(action_iconify);
+ } else if (!g_ascii_strcasecmp(name, "raise")) {
+ a = action_new(action_raise);
+ } else if (!g_ascii_strcasecmp(name, "lower")) {
+ a = action_new(action_lower);
+ } else if (!g_ascii_strcasecmp(name, "focusraise")) {
+ a = action_new(action_focusraise);
+ } else if (!g_ascii_strcasecmp(name, "close")) {
+ a = action_new(action_close);
+ } else if (!g_ascii_strcasecmp(name, "kill")) {
+ a = action_new(action_kill);
+ } else if (!g_ascii_strcasecmp(name, "shadelower")) {
+ a = action_new(action_shadelower);
+ } else if (!g_ascii_strcasecmp(name, "unshaderaise")) {
+ a = action_new(action_unshaderaise);
+ } else if (!g_ascii_strcasecmp(name, "shade")) {
+ a = action_new(action_shade);
+ } else if (!g_ascii_strcasecmp(name, "unshade")) {
+ a = action_new(action_unshade);
+ } else if (!g_ascii_strcasecmp(name, "toggleshade")) {
+ a = action_new(action_toggle_shade);
+ } else if (!g_ascii_strcasecmp(name, "toggleomnipresent")) {
+ a = action_new(action_toggle_omnipresent);
+ } else if (!g_ascii_strcasecmp(name, "moverelativehorz")) {
+ a = action_new(action_move_relative_horz);
+ } else if (!g_ascii_strcasecmp(name, "moverelativevert")) {
+ a = action_new(action_move_relative_vert);
+ } else if (!g_ascii_strcasecmp(name, "resizerelativehorz")) {
+ a = action_new(action_resize_relative_horz);
+ } else if (!g_ascii_strcasecmp(name, "resizerelativevert")) {
+ a = action_new(action_resize_relative_vert);
+ } else if (!g_ascii_strcasecmp(name, "maximizefull")) {
+ a = action_new(action_maximize_full);
+ } else if (!g_ascii_strcasecmp(name, "unmaximizefull")) {
+ a = action_new(action_unmaximize_full);
+ } else if (!g_ascii_strcasecmp(name, "togglemaximizefull")) {
+ a = action_new(action_toggle_maximize_full);
+ } else if (!g_ascii_strcasecmp(name, "maximizehorz")) {
+ a = action_new(action_maximize_horz);
+ } else if (!g_ascii_strcasecmp(name, "unmaximizehorz")) {
+ a = action_new(action_unmaximize_horz);
+ } else if (!g_ascii_strcasecmp(name, "togglemaximizehorz")) {
+ a = action_new(action_toggle_maximize_horz);
+ } else if (!g_ascii_strcasecmp(name, "maximizevert")) {
+ a = action_new(action_maximize_vert);
+ } else if (!g_ascii_strcasecmp(name, "unmaximizevert")) {
+ a = action_new(action_unmaximize_vert);
+ } else if (!g_ascii_strcasecmp(name, "togglemaximizevert")) {
+ a = action_new(action_toggle_maximize_vert);
+ } else if (!g_ascii_strcasecmp(name, "sendtodesktop")) {
+ a = action_new(action_send_to_desktop);
+ a->data.sendto.follow = TRUE;
+ } else if (!g_ascii_strcasecmp(name, "sendtonextdesktop")) {
+ a = action_new(action_send_to_next_desktop);
+ a->data.sendtonextprev.wrap = FALSE;
+ a->data.sendtonextprev.follow = TRUE;
+ } else if (!g_ascii_strcasecmp(name, "sendtonextdesktopwrap")) {
+ a = action_new(action_send_to_next_desktop);
+ a->data.sendtonextprev.wrap = TRUE;
+ a->data.sendtonextprev.follow = TRUE;
+ } else if (!g_ascii_strcasecmp(name, "sendtopreviousdesktop")) {
+ a = action_new(action_send_to_previous_desktop);
+ a->data.sendtonextprev.wrap = FALSE;
+ a->data.sendtonextprev.follow = TRUE;
+ } else if (!g_ascii_strcasecmp(name, "sendtopreviousdesktopwrap")) {
+ a = action_new(action_send_to_previous_desktop);
+ a->data.sendtonextprev.wrap = TRUE;
+ a->data.sendtonextprev.follow = TRUE;
+ } else if (!g_ascii_strcasecmp(name, "desktop")) {
+ a = action_new(action_desktop);
+ } else if (!g_ascii_strcasecmp(name, "nextdesktop")) {
+ a = action_new(action_next_desktop);
+ a->data.nextprevdesktop.wrap = FALSE;
+ } else if (!g_ascii_strcasecmp(name, "nextdesktopwrap")) {
+ a = action_new(action_next_desktop);
+ a->data.nextprevdesktop.wrap = TRUE;
+ } else if (!g_ascii_strcasecmp(name, "previousdesktop")) {
+ a = action_new(action_previous_desktop);
+ a->data.nextprevdesktop.wrap = FALSE;
+ } else if (!g_ascii_strcasecmp(name, "previousdesktopwrap")) {
+ a = action_new(action_previous_desktop);
+ a->data.nextprevdesktop.wrap = TRUE;
+ } else if (!g_ascii_strcasecmp(name, "nextdesktopcolumn")) {
+ a = action_new(action_next_desktop_column);
+ a->data.nextprevdesktop.wrap = FALSE;
+ } else if (!g_ascii_strcasecmp(name, "nextdesktopcolumnwrap")) {
+ a = action_new(action_next_desktop_column);
+ a->data.nextprevdesktop.wrap = TRUE;
+ } else if (!g_ascii_strcasecmp(name, "previousdesktopcolumn")) {
+ a = action_new(action_previous_desktop_column);
+ a->data.nextprevdesktop.wrap = FALSE;
+ } else if (!g_ascii_strcasecmp(name, "previousdesktopcolumnwrap")) {
+ a = action_new(action_previous_desktop_column);
+ a->data.nextprevdesktop.wrap = TRUE;
+ } else if (!g_ascii_strcasecmp(name, "nextdesktoprow")) {
+ a = action_new(action_next_desktop_row);
+ a->data.nextprevdesktop.wrap = FALSE;
+ } else if (!g_ascii_strcasecmp(name, "nextdesktoprowwrap")) {
+ a = action_new(action_next_desktop_row);
+ a->data.nextprevdesktop.wrap = TRUE;
+ } else if (!g_ascii_strcasecmp(name, "previousdesktoprow")) {
+ a = action_new(action_previous_desktop_row);
+ a->data.nextprevdesktop.wrap = FALSE;
+ } else if (!g_ascii_strcasecmp(name, "previousdesktoprowwrap")) {
+ a = action_new(action_previous_desktop_row);
+ a->data.nextprevdesktop.wrap = TRUE;
+ } else if (!g_ascii_strcasecmp(name, "toggledecorations")) {
+ a = action_new(action_toggle_decorations);
+ } else if (!g_ascii_strcasecmp(name, "keyboardmove")) {
+ a = action_new(action_moveresize);
+ a->data.moveresize.corner = prop_atoms.net_wm_moveresize_move_keyboard;
+ } else if (!g_ascii_strcasecmp(name, "move")) {
+ a = action_new(action_moveresize);
+ a->data.moveresize.corner = prop_atoms.net_wm_moveresize_move;
+ } else if (!g_ascii_strcasecmp(name, "resize")) {
+ a = action_new(action_moveresize);
+ a->data.moveresize.corner = prop_atoms.net_wm_moveresize_size_topleft;
+ } else if (!g_ascii_strcasecmp(name, "keyboardresize")) {
+ a = action_new(action_moveresize);
+ a->data.moveresize.corner = prop_atoms.net_wm_moveresize_size_keyboard;
+ } else if (!g_ascii_strcasecmp(name, "restart")) {
+ a = action_new(action_restart);
+ } else if (!g_ascii_strcasecmp(name, "exit")) {
+ a = action_new(action_exit);
+ } else if (!g_ascii_strcasecmp(name, "showmenu")) {
+ a = action_new(action_showmenu);
+ } else if (!g_ascii_strcasecmp(name, "nextwindowlinear")) {
+ a = action_new(action_cycle_windows);
+ a->data.cycle.linear = TRUE;
+ a->data.cycle.forward = TRUE;
+ } else if (!g_ascii_strcasecmp(name, "previouswindowlinear")) {
+ a = action_new(action_cycle_windows);
+ a->data.cycle.linear = TRUE;
+ a->data.cycle.forward = FALSE;
+ } else if (!g_ascii_strcasecmp(name, "nextwindow")) {
+ a = action_new(action_cycle_windows);
+ a->data.cycle.linear = FALSE;
+ a->data.cycle.forward = TRUE;
+ } else if (!g_ascii_strcasecmp(name, "previouswindow")) {
+ a = action_new(action_cycle_windows);
+ a->data.cycle.linear = FALSE;
+ a->data.cycle.forward = FALSE;
+ }
+
+ return a;
+}
+