diff options
| author | Dana Jansens <danakj@orodu.net> | 2007-06-23 14:07:21 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2007-06-23 14:07:21 +0000 |
| commit | 74aa6fe7cce662817ea4bca516d24d6d8d1e9a9b (patch) | |
| tree | 0cbe81c638b40f14b829517fa967a9eb6f868721 /openbox/actions | |
| parent | c62fefb0677aaf4dd5f13fc91a0261711507fab8 (diff) | |
let you send windows with the desktop and directionaldesktop actions
Diffstat (limited to 'openbox/actions')
| -rw-r--r-- | openbox/actions/desktop.c | 23 | ||||
| -rw-r--r-- | openbox/actions/directionaldesktop.c | 20 |
2 files changed, 38 insertions, 5 deletions
diff --git a/openbox/actions/desktop.c b/openbox/actions/desktop.c index 6da47740..4489f812 100644 --- a/openbox/actions/desktop.c +++ b/openbox/actions/desktop.c @@ -1,10 +1,13 @@ #include "openbox/actions.h" #include "openbox/screen.h" +#include "openbox/client.h" #include <glib.h> typedef struct { gboolean last; guint desktop; + gboolean send; + gboolean follow; } Options; static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); @@ -26,6 +29,7 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) Options *o; o = g_new0(Options, 1); + o->follow = TRUE; if ((n = parse_find_node("desktop", node))) { gchar *s = parse_string(doc, n); @@ -35,6 +39,11 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) o->desktop = parse_int(doc, n) - 1; g_free(s); } + if ((n = parse_find_node("send", node))) + o->send = parse_bool(doc, n); + if ((n = parse_find_node("follow", node))) + o->follow = parse_bool(doc, n); + return o; } @@ -56,8 +65,16 @@ static gboolean run_func(ObActionsData *data, gpointer options) else d = o->desktop; - if (d < screen_num_desktops) - screen_set_desktop(d, TRUE); - + if (d < screen_num_desktops && d != screen_desktop) { + gboolean go = !o->send; + if (o->send) { + if (data->client && client_normal(data->client)) { + client_set_desktop(data->client, d, o->follow, FALSE); + go = TRUE; + } + } + if (go) + screen_set_desktop(d, TRUE); + } return FALSE; } diff --git a/openbox/actions/directionaldesktop.c b/openbox/actions/directionaldesktop.c index c052e6e0..33e4afb0 100644 --- a/openbox/actions/directionaldesktop.c +++ b/openbox/actions/directionaldesktop.c @@ -6,6 +6,8 @@ typedef struct { gboolean linear; gboolean wrap; ObDirection dir; + gboolean send; + gboolean follow; } Options; static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); @@ -29,6 +31,7 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) o = g_new0(Options, 1); o->wrap = TRUE; o->dir = OB_DIRECTION_EAST; + o->follow = TRUE; if ((n = parse_find_node("wrap", node))) o->wrap = parse_bool(doc, n); @@ -56,6 +59,10 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) o->dir = OB_DIRECTION_EAST; g_free(s); } + if ((n = parse_find_node("send", node))) + o->send = parse_bool(doc, n); + if ((n = parse_find_node("follow", node))) + o->follow = parse_bool(doc, n); return o; } @@ -77,8 +84,17 @@ static gboolean run_func(ObActionsData *data, gpointer options) o->wrap, o->linear, FALSE, TRUE, FALSE); - if (d != screen_desktop) - screen_set_desktop(d, TRUE); + if (d < screen_num_desktops && d != screen_desktop) { + gboolean go = !o->send; + if (o->send) { + if (data->client && client_normal(data->client)) { + client_set_desktop(data->client, d, o->follow, FALSE); + go = TRUE; + } + } + if (go) + screen_set_desktop(d, TRUE); + } return FALSE; } |
