summaryrefslogtreecommitdiff
path: root/openbox/actions
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-08-04 23:35:36 -0400
committerDana Jansens <danakj@orodu.net>2007-08-04 23:35:36 -0400
commitf55ae9e56945892825928cfb021b5e739d0d5224 (patch)
tree19a26efae2532bc046160289adca8a8dc45ac3a7 /openbox/actions
parent98b9ed97ebbcf22185359c8f6f1d539a105cd258 (diff)
parentfa085b73389de3af8236919f4e39c4c20d16ed7c (diff)
Merge branch 'backport'
Diffstat (limited to 'openbox/actions')
-rw-r--r--openbox/actions/desktop.c6
-rw-r--r--openbox/actions/growtoedge.c100
-rw-r--r--openbox/actions/restart.c4
-rw-r--r--openbox/actions/unfocus.c2
4 files changed, 81 insertions, 31 deletions
diff --git a/openbox/actions/desktop.c b/openbox/actions/desktop.c
index d3a0d0c3..75949be2 100644
--- a/openbox/actions/desktop.c
+++ b/openbox/actions/desktop.c
@@ -132,10 +132,8 @@ static gboolean run_func(ObActionsData *data, gpointer options)
d = o->abs.desktop;
break;
case RELATIVE:
- d = screen_cycle_desktop(o->rel.dir,
- o->rel.wrap,
- o->rel.linear,
- FALSE, TRUE, FALSE);
+ d = screen_find_desktop(screen_desktop,
+ o->rel.dir, o->rel.wrap, o->rel.linear);
break;
}
diff --git a/openbox/actions/growtoedge.c b/openbox/actions/growtoedge.c
index 501c64de..2e2b7011 100644
--- a/openbox/actions/growtoedge.c
+++ b/openbox/actions/growtoedge.c
@@ -57,39 +57,89 @@ static void free_func(gpointer options)
g_free(o);
}
+static gboolean do_grow(ObActionsData *data, gint x, gint y, gint w, gint h)
+{
+ gint realw, realh, lw, lh;
+
+ realw = w;
+ realh = h;
+ client_try_configure(data->client, &x, &y, &realw, &realh,
+ &lw, &lh, TRUE);
+ /* if it's going to be resized smaller than it intended, don't
+ move the window over */
+ if (x != data->client->area.x) x += w - realw;
+ if (y != data->client->area.y) y += h - realh;
+
+ if (x != data->client->area.x || y != data->client->area.y ||
+ realw != data->client->area.width ||
+ realh != data->client->area.height)
+ {
+ actions_client_move(data, TRUE);
+ client_move_resize(data->client, x, y, realw, realh);
+ actions_client_move(data, FALSE);
+ return TRUE;
+ }
+ return FALSE;
+}
+
/* Always return FALSE because its not interactive */
static gboolean run_func(ObActionsData *data, gpointer options)
{
Options *o = options;
+ gint x, y, w, h;
+ ObDirection opp;
+ gint half;
- if (data->client) {
- gint x, y, w, h, realw, realh, lw, lh;
-
+ if (!data->client ||
/* don't allow vertical resize if shaded */
- if (o->dir != OB_DIRECTION_NORTH || o->dir != OB_DIRECTION_SOUTH ||
- !data->client->shaded)
- {
- client_find_resize_directional(data->client, o->dir, TRUE,
- &x, &y, &w, &h);
- realw = w;
- realh = h;
- client_try_configure(data->client, &x, &y, &realw, &realh,
- &lw, &lh, TRUE);
- /* if it's going to be resized smaller than it intended, don't
- move the window over */
- if (x != data->client->area.x) x += w - realw;
- if (y != data->client->area.y) y += h - realh;
-
- if (x != data->client->area.x || y != data->client->area.y ||
- w != data->client->area.width ||
- h != data->client->area.height)
- {
- actions_client_move(data, TRUE);
- client_move_resize(data->client, x, y, realw, realh);
- actions_client_move(data, FALSE);
- }
+ ((o->dir == OB_DIRECTION_NORTH || o->dir == OB_DIRECTION_SOUTH) &&
+ data->client->shaded))
+ {
+ return FALSE;
+ }
+
+ /* try grow */
+ client_find_resize_directional(data->client, o->dir, TRUE,
+ &x, &y, &w, &h);
+ if (do_grow(data, x, y, w, h))
+ return FALSE;
+
+ /* we couldn't grow, so try shrink! */
+ opp = (o->dir == OB_DIRECTION_NORTH ? OB_DIRECTION_SOUTH :
+ (o->dir == OB_DIRECTION_SOUTH ? OB_DIRECTION_NORTH :
+ (o->dir == OB_DIRECTION_EAST ? OB_DIRECTION_WEST :
+ OB_DIRECTION_EAST)));
+ client_find_resize_directional(data->client, opp, FALSE,
+ &x, &y, &w, &h);
+ switch (opp) {
+ case OB_DIRECTION_NORTH:
+ half = data->client->area.y + data->client->area.height / 2;
+ if (y > half) {
+ h += y - half;
+ y = half;
+ }
+ break;
+ case OB_DIRECTION_SOUTH:
+ half = data->client->area.height / 2;
+ if (h < half)
+ h = half;
+ break;
+ case OB_DIRECTION_WEST:
+ half = data->client->area.x + data->client->area.width / 2;
+ if (x > half) {
+ w += x - half;
+ x = half;
}
+ break;
+ case OB_DIRECTION_EAST:
+ half = data->client->area.width / 2;
+ if (w < half)
+ w = half;
+ break;
+ default: g_assert_not_reached();
}
+ if (do_grow(data, x, y, w, h))
+ return FALSE;
return FALSE;
}
diff --git a/openbox/actions/restart.c b/openbox/actions/restart.c
index f7f1dfc0..fff0a87f 100644
--- a/openbox/actions/restart.c
+++ b/openbox/actions/restart.c
@@ -25,7 +25,9 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node)
o = g_new0(Options, 1);
- if ((n = parse_find_node("execute", node))) {
+ if ((n = parse_find_node("command", node)) ||
+ (n = parse_find_node("execute", node)))
+ {
gchar *s = parse_string(doc, n);
o->cmd = parse_expand_tilde(s);
g_free(s);
diff --git a/openbox/actions/unfocus.c b/openbox/actions/unfocus.c
index 70384f4d..0527d2a0 100644
--- a/openbox/actions/unfocus.c
+++ b/openbox/actions/unfocus.c
@@ -12,6 +12,6 @@ void action_unfocus_startup()
static gboolean run_func(ObActionsData *data, gpointer options)
{
if (data->client && data->client == focus_client)
- focus_fallback(FALSE, FALSE, TRUE);
+ focus_fallback(FALSE, FALSE, TRUE, FALSE);
return FALSE;
}