X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=openbox%2Factions%2Fgrowtoedge.c;h=630ead10c446861a103fbdd7ad9d0c009da43c05;hb=275fdf8c2a0d5c7d8f395b3269e644939e016696;hp=2e2b7011cf80a86d2d70d20313d94c1fbf0671a5;hpb=f55ae9e56945892825928cfb021b5e739d0d5224;p=chaz%2Fopenbox diff --git a/openbox/actions/growtoedge.c b/openbox/actions/growtoedge.c index 2e2b7011..630ead10 100644 --- a/openbox/actions/growtoedge.c +++ b/openbox/actions/growtoedge.c @@ -7,19 +7,27 @@ typedef struct { ObDirection dir; + gboolean shrink; } Options; static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); +static gpointer setup_shrink_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); static void free_func(gpointer options); static gboolean run_func(ObActionsData *data, gpointer options); -void action_growtoedge_startup() +void action_growtoedge_startup(void) { actions_register("GrowToEdge", setup_func, free_func, run_func, NULL, NULL); + + actions_register("ShrinkToEdge", + setup_shrink_func, + free_func, + run_func, + NULL, NULL); } static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) @@ -29,6 +37,7 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) o = g_new0(Options, 1); o->dir = OB_DIRECTION_NORTH; + o->shrink = FALSE; if ((n = parse_find_node("direction", node))) { gchar *s = parse_string(doc, n); @@ -50,6 +59,16 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) return o; } +static gpointer setup_shrink_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) +{ + Options *o; + + o = setup_func(i, doc, node); + o->shrink = TRUE; + + return o; +} + static void free_func(gpointer options) { Options *o = options; @@ -98,11 +117,13 @@ static gboolean run_func(ObActionsData *data, gpointer options) 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; + if (!o->shrink) { + /* 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 :