diff options
| author | Mikael Magnusson <mikachu@gmail.com> | 2009-07-05 22:27:25 +0200 |
|---|---|---|
| committer | Mikael Magnusson <mikachu@gmail.com> | 2009-09-19 15:03:12 +0200 |
| commit | 308478e4a5f4dc76d69395dda8a9bc42cb69eec4 (patch) | |
| tree | 54ec31d91428b2a7d3e4c7bdf902fe182abfc25d /openbox/actions | |
| parent | 3f72b9d67f21781e513a9c058e8624b8b86b92ea (diff) | |
| parent | ba1ac214dfdbc0539c922e84c2318c1bf2566c0c (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.c | 30 | ||||
| -rw-r--r-- | openbox/actions/moveresizeto.c | 11 |
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); |
