From 264edb053dcf5cc5b2043bb1b34ac6f116fc4c8c Mon Sep 17 00:00:00 2001 From: Mikael Magnusson Date: Sun, 29 Mar 2009 22:34:50 +0200 Subject: Avoid anonymous unions Some compilers, like sun studio and clang don't support them. --- openbox/actions/desktop.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) (limited to 'openbox/actions') diff --git a/openbox/actions/desktop.c b/openbox/actions/desktop.c index 203936d9..07416151 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; @@ -49,9 +49,9 @@ static gpointer setup_go_func(ObParseInst *i, xmlDocPtr doc, 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 = parse_find_node("to", node))) { gchar *s = parse_string(doc, n); @@ -59,43 +59,43 @@ static gpointer setup_go_func(ObParseInst *i, xmlDocPtr doc, 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 = parse_find_node("wrap", node))) - o->rel.wrap = parse_bool(doc, n); + o->u.rel.wrap = parse_bool(doc, n); return o; } @@ -127,11 +127,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; } -- cgit v1.2.3 From 3cd4db67aa430c85af8ac88dc40e9cfa63cc246a Mon Sep 17 00:00:00 2001 From: Nico Golde Date: Sat, 4 Jul 2009 14:26:50 +0200 Subject: Add "prev" and "next" as possible targets for moveto/resizeto actions. One of the Debian users asked if it's possible to send a window to other monitor when using xinerama, especially useful of you have 2 monitors and want to toggle a window to the other one. I wrote a patch that implements next and prev to also make that work for 3 or more workspaces. --- openbox/actions/moveresizeto.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'openbox/actions') diff --git a/openbox/actions/moveresizeto.c b/openbox/actions/moveresizeto.c index cdd772ad..acad73b5 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 { @@ -89,6 +91,10 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, 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 = parse_int(doc, n) - 1; } @@ -121,6 +127,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); -- cgit v1.2.3