+ (*a)->data.interdiraction.inter.any.interactive = TRUE;
+ (*a)->data.interdiraction.direction = OB_DIRECTION_WEST;
+ (*a)->data.interdiraction.dialog = TRUE;
+ (*a)->data.interdiraction.dock_windows = FALSE;
+ (*a)->data.interdiraction.desktop_windows = FALSE;
+}
+
+void setup_action_directional_focus_northeast(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.interdiraction.inter.any.interactive = TRUE;
+ (*a)->data.interdiraction.direction = OB_DIRECTION_NORTHEAST;
+ (*a)->data.interdiraction.dialog = TRUE;
+ (*a)->data.interdiraction.dock_windows = FALSE;
+ (*a)->data.interdiraction.desktop_windows = FALSE;
+}
+
+void setup_action_directional_focus_southeast(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.interdiraction.inter.any.interactive = TRUE;
+ (*a)->data.interdiraction.direction = OB_DIRECTION_SOUTHEAST;
+ (*a)->data.interdiraction.dialog = TRUE;
+ (*a)->data.interdiraction.dock_windows = FALSE;
+ (*a)->data.interdiraction.desktop_windows = FALSE;
+}
+
+void setup_action_directional_focus_southwest(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.interdiraction.inter.any.interactive = TRUE;
+ (*a)->data.interdiraction.direction = OB_DIRECTION_SOUTHWEST;
+ (*a)->data.interdiraction.dialog = TRUE;
+ (*a)->data.interdiraction.dock_windows = FALSE;
+ (*a)->data.interdiraction.desktop_windows = FALSE;
+}
+
+void setup_action_directional_focus_northwest(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.interdiraction.inter.any.interactive = TRUE;
+ (*a)->data.interdiraction.direction = OB_DIRECTION_NORTHWEST;
+ (*a)->data.interdiraction.dialog = TRUE;
+ (*a)->data.interdiraction.dock_windows = FALSE;
+ (*a)->data.interdiraction.desktop_windows = FALSE;
+}
+
+void setup_action_send_to_desktop(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.sendto.any.client_action = OB_CLIENT_ACTION_ALWAYS;
+ (*a)->data.sendto.follow = TRUE;
+}
+
+void setup_action_send_to_desktop_prev(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.sendtodir.inter.any.client_action = OB_CLIENT_ACTION_ALWAYS;
+ (*a)->data.sendtodir.inter.any.interactive = TRUE;
+ (*a)->data.sendtodir.dir = OB_DIRECTION_WEST;
+ (*a)->data.sendtodir.linear = TRUE;
+ (*a)->data.sendtodir.wrap = TRUE;
+ (*a)->data.sendtodir.follow = TRUE;
+}
+
+void setup_action_send_to_desktop_next(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.sendtodir.inter.any.client_action = OB_CLIENT_ACTION_ALWAYS;
+ (*a)->data.sendtodir.inter.any.interactive = TRUE;
+ (*a)->data.sendtodir.dir = OB_DIRECTION_EAST;
+ (*a)->data.sendtodir.linear = TRUE;
+ (*a)->data.sendtodir.wrap = TRUE;
+ (*a)->data.sendtodir.follow = TRUE;
+}
+
+void setup_action_send_to_desktop_left(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.sendtodir.inter.any.client_action = OB_CLIENT_ACTION_ALWAYS;
+ (*a)->data.sendtodir.inter.any.interactive = TRUE;
+ (*a)->data.sendtodir.dir = OB_DIRECTION_WEST;
+ (*a)->data.sendtodir.linear = FALSE;
+ (*a)->data.sendtodir.wrap = TRUE;
+ (*a)->data.sendtodir.follow = TRUE;
+}
+
+void setup_action_send_to_desktop_right(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.sendtodir.inter.any.client_action = OB_CLIENT_ACTION_ALWAYS;
+ (*a)->data.sendtodir.inter.any.interactive = TRUE;
+ (*a)->data.sendtodir.dir = OB_DIRECTION_EAST;
+ (*a)->data.sendtodir.linear = FALSE;
+ (*a)->data.sendtodir.wrap = TRUE;
+ (*a)->data.sendtodir.follow = TRUE;
+}
+
+void setup_action_send_to_desktop_up(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.sendtodir.inter.any.client_action = OB_CLIENT_ACTION_ALWAYS;
+ (*a)->data.sendtodir.inter.any.interactive = TRUE;
+ (*a)->data.sendtodir.dir = OB_DIRECTION_NORTH;
+ (*a)->data.sendtodir.linear = FALSE;
+ (*a)->data.sendtodir.wrap = TRUE;
+ (*a)->data.sendtodir.follow = TRUE;
+}
+
+void setup_action_send_to_desktop_down(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.sendtodir.inter.any.client_action = OB_CLIENT_ACTION_ALWAYS;
+ (*a)->data.sendtodir.inter.any.interactive = TRUE;
+ (*a)->data.sendtodir.dir = OB_DIRECTION_SOUTH;
+ (*a)->data.sendtodir.linear = FALSE;
+ (*a)->data.sendtodir.wrap = TRUE;
+ (*a)->data.sendtodir.follow = TRUE;
+}
+
+void setup_action_desktop(ObAction **a, ObUserAction uact)
+{
+/*
+ (*a)->data.desktop.inter.any.interactive = FALSE;
+*/
+}
+
+void setup_action_desktop_prev(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.desktopdir.inter.any.interactive = TRUE;
+ (*a)->data.desktopdir.dir = OB_DIRECTION_WEST;
+ (*a)->data.desktopdir.linear = TRUE;
+ (*a)->data.desktopdir.wrap = TRUE;
+}
+
+void setup_action_desktop_next(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.desktopdir.inter.any.interactive = TRUE;
+ (*a)->data.desktopdir.dir = OB_DIRECTION_EAST;
+ (*a)->data.desktopdir.linear = TRUE;
+ (*a)->data.desktopdir.wrap = TRUE;
+}
+
+void setup_action_desktop_left(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.desktopdir.inter.any.interactive = TRUE;
+ (*a)->data.desktopdir.dir = OB_DIRECTION_WEST;
+ (*a)->data.desktopdir.linear = FALSE;
+ (*a)->data.desktopdir.wrap = TRUE;
+}
+
+void setup_action_desktop_right(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.desktopdir.inter.any.interactive = TRUE;
+ (*a)->data.desktopdir.dir = OB_DIRECTION_EAST;
+ (*a)->data.desktopdir.linear = FALSE;
+ (*a)->data.desktopdir.wrap = TRUE;
+}
+
+void setup_action_desktop_up(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.desktopdir.inter.any.interactive = TRUE;
+ (*a)->data.desktopdir.dir = OB_DIRECTION_NORTH;
+ (*a)->data.desktopdir.linear = FALSE;
+ (*a)->data.desktopdir.wrap = TRUE;
+}
+
+void setup_action_desktop_down(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.desktopdir.inter.any.interactive = TRUE;
+ (*a)->data.desktopdir.dir = OB_DIRECTION_SOUTH;
+ (*a)->data.desktopdir.linear = FALSE;
+ (*a)->data.desktopdir.wrap = TRUE;
+}
+
+void setup_action_cycle_windows_next(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.cycle.inter.any.interactive = TRUE;
+ (*a)->data.cycle.linear = FALSE;
+ (*a)->data.cycle.forward = TRUE;
+ (*a)->data.cycle.dialog = TRUE;
+ (*a)->data.cycle.dock_windows = FALSE;
+ (*a)->data.cycle.desktop_windows = FALSE;
+ (*a)->data.cycle.all_desktops = FALSE;
+}
+
+void setup_action_cycle_windows_previous(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.cycle.inter.any.interactive = TRUE;
+ (*a)->data.cycle.linear = FALSE;
+ (*a)->data.cycle.forward = FALSE;
+ (*a)->data.cycle.dialog = TRUE;
+ (*a)->data.cycle.dock_windows = FALSE;
+ (*a)->data.cycle.desktop_windows = FALSE;
+ (*a)->data.cycle.all_desktops = FALSE;
+}
+
+void setup_action_movefromedge_north(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.diraction.any.client_action = OB_CLIENT_ACTION_ALWAYS;
+ (*a)->data.diraction.direction = OB_DIRECTION_NORTH;
+ (*a)->data.diraction.hang = TRUE;
+}
+
+void setup_action_movefromedge_south(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.diraction.any.client_action = OB_CLIENT_ACTION_ALWAYS;
+ (*a)->data.diraction.direction = OB_DIRECTION_SOUTH;
+ (*a)->data.diraction.hang = TRUE;
+}
+
+void setup_action_movefromedge_east(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.diraction.any.client_action = OB_CLIENT_ACTION_ALWAYS;
+ (*a)->data.diraction.direction = OB_DIRECTION_EAST;
+ (*a)->data.diraction.hang = TRUE;
+}
+
+void setup_action_movefromedge_west(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.diraction.any.client_action = OB_CLIENT_ACTION_ALWAYS;
+ (*a)->data.diraction.direction = OB_DIRECTION_WEST;
+ (*a)->data.diraction.hang = TRUE;
+}
+
+void setup_action_movetoedge_north(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.diraction.any.client_action = OB_CLIENT_ACTION_ALWAYS;
+ (*a)->data.diraction.direction = OB_DIRECTION_NORTH;
+ (*a)->data.diraction.hang = FALSE;
+}
+
+void setup_action_movetoedge_south(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.diraction.any.client_action = OB_CLIENT_ACTION_ALWAYS;
+ (*a)->data.diraction.direction = OB_DIRECTION_SOUTH;
+ (*a)->data.diraction.hang = FALSE;
+}
+
+void setup_action_movetoedge_east(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.diraction.any.client_action = OB_CLIENT_ACTION_ALWAYS;
+ (*a)->data.diraction.direction = OB_DIRECTION_EAST;
+ (*a)->data.diraction.hang = FALSE;
+}
+
+void setup_action_movetoedge_west(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.diraction.any.client_action = OB_CLIENT_ACTION_ALWAYS;
+ (*a)->data.diraction.direction = OB_DIRECTION_WEST;
+ (*a)->data.diraction.hang = FALSE;
+}
+
+void setup_action_growtoedge_north(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.diraction.any.client_action = OB_CLIENT_ACTION_ALWAYS;
+ (*a)->data.diraction.direction = OB_DIRECTION_NORTH;
+}
+
+void setup_action_growtoedge_south(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.diraction.any.client_action = OB_CLIENT_ACTION_ALWAYS;
+ (*a)->data.diraction.direction = OB_DIRECTION_SOUTH;
+}
+
+void setup_action_growtoedge_east(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.diraction.any.client_action = OB_CLIENT_ACTION_ALWAYS;
+ (*a)->data.diraction.direction = OB_DIRECTION_EAST;
+}
+
+void setup_action_growtoedge_west(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.diraction.any.client_action = OB_CLIENT_ACTION_ALWAYS;
+ (*a)->data.diraction.direction = OB_DIRECTION_WEST;
+}
+
+void setup_action_top_layer(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.layer.any.client_action = OB_CLIENT_ACTION_ALWAYS;
+ (*a)->data.layer.layer = 1;
+}
+
+void setup_action_normal_layer(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.layer.any.client_action = OB_CLIENT_ACTION_ALWAYS;
+ (*a)->data.layer.layer = 0;
+}
+
+void setup_action_bottom_layer(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.layer.any.client_action = OB_CLIENT_ACTION_ALWAYS;
+ (*a)->data.layer.layer = -1;
+}
+
+void setup_action_move(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.moveresize.any.client_action = OB_CLIENT_ACTION_ALWAYS;
+ (*a)->data.moveresize.keyboard =
+ (uact == OB_USER_ACTION_NONE ||
+ uact == OB_USER_ACTION_KEYBOARD_KEY ||
+ uact == OB_USER_ACTION_MENU_SELECTION);
+ (*a)->data.moveresize.corner = 0;
+}
+
+void setup_action_resize(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.moveresize.any.client_action = OB_CLIENT_ACTION_ALWAYS;
+ (*a)->data.moveresize.keyboard =
+ (uact == OB_USER_ACTION_NONE ||
+ uact == OB_USER_ACTION_KEYBOARD_KEY ||
+ uact == OB_USER_ACTION_MENU_SELECTION);
+ (*a)->data.moveresize.corner = 0;
+}
+
+void setup_action_showmenu(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.showmenu.any.client_action = OB_CLIENT_ACTION_OPTIONAL;
+ /* you cannot call ShowMenu from inside a menu, cuz the menu code makes
+ assumptions that there is only one menu (and submenus) open at
+ a time! */
+ if (uact == OB_USER_ACTION_MENU_SELECTION) {
+ action_unref(*a);
+ *a = NULL;