summaryrefslogtreecommitdiff
path: root/openbox/actions
diff options
context:
space:
mode:
Diffstat (limited to 'openbox/actions')
-rw-r--r--openbox/actions/desktop.c30
-rw-r--r--openbox/actions/moveresizeto.c11
2 files changed, 25 insertions, 16 deletions
diff --git a/openbox/actions/desktop.c b/openbox/actions/desktop.c
index e352aa2e..edd22aa2 100644
--- a/openbox/actions/desktop.c
+++ b/openbox/actions/desktop.c
@@ -21,7 +21,7 @@ typedef struct {
gboolean wrap;
ObDirection dir;
} rel;
- };
+ } u;
gboolean send;
gboolean follow;
} Options;
@@ -46,9 +46,9 @@ static gpointer setup_go_func(xmlNodePtr node)
o = g_new0(Options, 1);
/* don't go anywhere if theres no options given */
o->type = ABSOLUTE;
- o->abs.desktop = screen_desktop;
+ o->u.abs.desktop = screen_desktop;
/* wrap by default - it's handy! */
- o->rel.wrap = TRUE;
+ o->u.rel.wrap = TRUE;
if ((n = obt_parse_find_node(node, "to"))) {
gchar *s = obt_parse_node_string(n);
@@ -56,43 +56,43 @@ static gpointer setup_go_func(xmlNodePtr node)
o->type = LAST;
else if (!g_ascii_strcasecmp(s, "next")) {
o->type = RELATIVE;
- o->rel.linear = TRUE;
- o->rel.dir = OB_DIRECTION_EAST;
+ o->u.rel.linear = TRUE;
+ o->u.rel.dir = OB_DIRECTION_EAST;
}
else if (!g_ascii_strcasecmp(s, "previous")) {
o->type = RELATIVE;
- o->rel.linear = TRUE;
- o->rel.dir = OB_DIRECTION_WEST;
+ o->u.rel.linear = TRUE;
+ o->u.rel.dir = OB_DIRECTION_WEST;
}
else if (!g_ascii_strcasecmp(s, "north") ||
!g_ascii_strcasecmp(s, "up")) {
o->type = RELATIVE;
- o->rel.dir = OB_DIRECTION_NORTH;
+ o->u.rel.dir = OB_DIRECTION_NORTH;
}
else if (!g_ascii_strcasecmp(s, "south") ||
!g_ascii_strcasecmp(s, "down")) {
o->type = RELATIVE;
- o->rel.dir = OB_DIRECTION_SOUTH;
+ o->u.rel.dir = OB_DIRECTION_SOUTH;
}
else if (!g_ascii_strcasecmp(s, "west") ||
!g_ascii_strcasecmp(s, "left")) {
o->type = RELATIVE;
- o->rel.dir = OB_DIRECTION_WEST;
+ o->u.rel.dir = OB_DIRECTION_WEST;
}
else if (!g_ascii_strcasecmp(s, "east") ||
!g_ascii_strcasecmp(s, "right")) {
o->type = RELATIVE;
- o->rel.dir = OB_DIRECTION_EAST;
+ o->u.rel.dir = OB_DIRECTION_EAST;
}
else {
o->type = ABSOLUTE;
- o->abs.desktop = atoi(s) - 1;
+ o->u.abs.desktop = atoi(s) - 1;
}
g_free(s);
}
if ((n = obt_parse_find_node(node, "wrap")))
- o->rel.wrap = obt_parse_node_bool(n);
+ o->u.rel.wrap = obt_parse_node_bool(n);
return o;
}
@@ -123,11 +123,11 @@ static gboolean run_func(ObActionsData *data, gpointer options)
d = screen_last_desktop;
break;
case ABSOLUTE:
- d = o->abs.desktop;
+ d = o->u.abs.desktop;
break;
case RELATIVE:
d = screen_find_desktop(screen_desktop,
- o->rel.dir, o->rel.wrap, o->rel.linear);
+ o->u.rel.dir, o->u.rel.wrap, o->u.rel.linear);
break;
}
diff --git a/openbox/actions/moveresizeto.c b/openbox/actions/moveresizeto.c
index 357c7315..3ee3498a 100644
--- a/openbox/actions/moveresizeto.c
+++ b/openbox/actions/moveresizeto.c
@@ -6,7 +6,9 @@
enum {
CURRENT_MONITOR = -1,
- ALL_MONITORS = -2
+ ALL_MONITORS = -2,
+ NEXT_MONITOR = -3,
+ PREV_MONITOR = -4
};
typedef struct {
@@ -84,6 +86,10 @@ static gpointer setup_func(xmlNodePtr node)
if (g_ascii_strcasecmp(s, "current") != 0) {
if (!g_ascii_strcasecmp(s, "all"))
o->monitor = ALL_MONITORS;
+ else if(!g_ascii_strcasecmp(s, "next"))
+ o->monitor = NEXT_MONITOR;
+ else if(!g_ascii_strcasecmp(s, "prev"))
+ o->monitor = PREV_MONITOR;
else
o->monitor = obt_parse_node_int(n) - 1;
}
@@ -109,6 +115,9 @@ static gboolean run_func(ObActionsData *data, gpointer options)
cmon = client_monitor(c);
if (mon == CURRENT_MONITOR) mon = cmon;
else if (mon == ALL_MONITORS) mon = SCREEN_AREA_ALL_MONITORS;
+ else if (mon == NEXT_MONITOR) mon = (cmon + 1 > screen_num_monitors - 1) ? 0 : (cmon + 1);
+ else if (mon == PREV_MONITOR) mon = (cmon == 0) ? (screen_num_monitors - 1) : (cmon - 1);
+
area = screen_area(c->desktop, mon, NULL);
carea = screen_area(c->desktop, cmon, NULL);