+ (*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.move = TRUE;
+ (*a)->data.moveresize.keyboard =
+ (uact == OB_USER_ACTION_NONE ||
+ uact == OB_USER_ACTION_KEYBOARD_KEY ||
+ uact == OB_USER_ACTION_MENU_SELECTION);
+}
+
+void setup_action_resize(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.moveresize.any.client_action = OB_CLIENT_ACTION_ALWAYS;
+ (*a)->data.moveresize.move = FALSE;
+ (*a)->data.moveresize.keyboard =
+ (uact == OB_USER_ACTION_NONE ||
+ uact == OB_USER_ACTION_KEYBOARD_KEY ||
+ uact == OB_USER_ACTION_MENU_SELECTION);
+}
+
+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;
+ }
+}
+
+void setup_client_action(ObAction **a, ObUserAction uact)
+{
+ (*a)->data.any.client_action = OB_CLIENT_ACTION_ALWAYS;