-typedef struct
-{
- const gchar *name;
- void (*func)(union ActionData *);
- void (*setup)(ObAction **, ObUserAction uact);
-} ActionString;
-
-static ObAction *action_new(void (*func)(union ActionData *data))
-{
- ObAction *a = g_new0(ObAction, 1);
- a->ref = 1;
- a->func = func;
-
- return a;
-}
-
-void action_ref(ObAction *a)
-{
- ++a->ref;
-}
-
-void action_unref(ObAction *a)
-{
- if (a == NULL) return;
-
- if (--a->ref > 0) return;
-
- /* deal with pointers */
- if (a->func == action_execute || a->func == action_restart)
- g_free(a->data.execute.path);
- else if (a->func == action_debug)
- g_free(a->data.debug.string);
- else if (a->func == action_showmenu)
- g_free(a->data.showmenu.name);
-
- g_free(a);
-}
-
-ObAction* action_copy(const ObAction *src)
-{
- ObAction *a = action_new(src->func);
-
- a->data = src->data;
-
- /* deal with pointers */
- if (a->func == action_execute || a->func == action_restart)
- a->data.execute.path = g_strdup(a->data.execute.path);
- else if (a->func == action_debug)
- a->data.debug.string = g_strdup(a->data.debug.string);
- else if (a->func == action_showmenu)
- a->data.showmenu.name = g_strdup(a->data.showmenu.name);
-
- return a;
-}
-
-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_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_movefromedge_north(ObAction **a, ObUserAction uact)
{
action_unshaderaise,
setup_client_action
},
- {
- "sendtodesktopnext",
- action_send_to_desktop_dir,
- setup_action_send_to_desktop_next
- },
- {
- "sendtodesktopprevious",
- action_send_to_desktop_dir,
- setup_action_send_to_desktop_prev
- },
- {
- "sendtodesktopright",
- action_send_to_desktop_dir,
- setup_action_send_to_desktop_right
- },
- {
- "sendtodesktopleft",
- action_send_to_desktop_dir,
- setup_action_send_to_desktop_left
- },
- {
- "sendtodesktopup",
- action_send_to_desktop_dir,
- setup_action_send_to_desktop_up
- },
- {
- "sendtodesktopdown",
- action_send_to_desktop_dir,
- setup_action_send_to_desktop_down
- },
- {
- "toggledockautohide",
- action_toggle_dockautohide,
- NULL
- },
{
"sendtotoplayer",
action_send_to_layer,
void action_toggle_dockautohide(union ActionData *data)
{
- config_dock_hide = !config_dock_hide;
- dock_configure();
}
void action_remove_desktop(union ActionData *data)