X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Factions%2Fdirectionaldesktop.c;h=d9aacdd8925b42e0d2d1c3c5bb156bdc254147eb;hb=97792a403a52c12c2601a7b2caebdea197f0b5f0;hp=c052e6e0053579d01c5d4f5bfc99aabc0a6dc7df;hpb=6973d5b8a50844ef8eecf076f8f15d5ece4270ef;p=chaz%2Fopenbox diff --git a/openbox/actions/directionaldesktop.c b/openbox/actions/directionaldesktop.c index c052e6e0..d9aacdd8 100644 --- a/openbox/actions/directionaldesktop.c +++ b/openbox/actions/directionaldesktop.c @@ -1,11 +1,14 @@ #include "openbox/actions.h" #include "openbox/screen.h" +#include "openbox/client.h" #include 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 +32,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 +60,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 +85,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; }