diff options
| author | Dana Jansens <danakj@orodu.net> | 2007-08-04 23:35:36 -0400 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2007-08-04 23:35:36 -0400 |
| commit | f55ae9e56945892825928cfb021b5e739d0d5224 (patch) | |
| tree | 19a26efae2532bc046160289adca8a8dc45ac3a7 /openbox/actions | |
| parent | 98b9ed97ebbcf22185359c8f6f1d539a105cd258 (diff) | |
| parent | fa085b73389de3af8236919f4e39c4c20d16ed7c (diff) | |
Merge branch 'backport'
Diffstat (limited to 'openbox/actions')
| -rw-r--r-- | openbox/actions/desktop.c | 6 | ||||
| -rw-r--r-- | openbox/actions/growtoedge.c | 100 | ||||
| -rw-r--r-- | openbox/actions/restart.c | 4 | ||||
| -rw-r--r-- | openbox/actions/unfocus.c | 2 |
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; } |
