summaryrefslogtreecommitdiff
path: root/openbox/actions
diff options
context:
space:
mode:
authorMikael Magnusson <mikachu@gmail.com>2009-07-05 22:27:25 +0200
committerMikael Magnusson <mikachu@gmail.com>2009-09-19 15:03:12 +0200
commit308478e4a5f4dc76d69395dda8a9bc42cb69eec4 (patch)
tree54ec31d91428b2a7d3e4c7bdf902fe182abfc25d /openbox/actions
parent3f72b9d67f21781e513a9c058e8624b8b86b92ea (diff)
parentba1ac214dfdbc0539c922e84c2318c1bf2566c0c (diff)
Merge branch 'backport' into work
Conflicts: openbox/actions/desktop.c openbox/client.c openbox/event.c openbox/extensions.c openbox/popup.c openbox/screen.c parser/parse.c
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);