X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Factions%2Fmovetofromedge.c;h=8db45097b50f1f87662ccf1da4bf935c7715ceaf;hb=01a35904fec67a7f92a0eb7f19457e79ca3d0988;hp=72a89c1c3aa5725dd93330ec76bae59fea053879;hpb=d9699d14700da5f227f6e5ad708519b1efdd874d;p=chaz%2Fopenbox diff --git a/openbox/actions/movetofromedge.c b/openbox/actions/movetofromedge.c index 72a89c1c..8db45097 100644 --- a/openbox/actions/movetofromedge.c +++ b/openbox/actions/movetofromedge.c @@ -6,24 +6,16 @@ typedef struct { ObDirection dir; - gboolean hang; } Options; static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); -static gpointer setup_to_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); -static gpointer setup_from_func(ObParseInst *i,xmlDocPtr doc, xmlNodePtr node); static void free_func(gpointer options); static gboolean run_func(ObActionsData *data, gpointer options); void action_movetofromedge_startup() { actions_register("MoveToEdge", - setup_to_func, - free_func, - run_func, - NULL, NULL); - actions_register("MoveFromEdge", - setup_from_func, + setup_func, free_func, run_func, NULL, NULL); @@ -57,20 +49,6 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) return o; } -static gpointer setup_to_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) -{ - Options *o = setup_func(i, doc, node); - o->hang = FALSE; - return o; -} - -static gpointer setup_from_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) -{ - Options *o = setup_func(i, doc, node); - o->hang = TRUE; - return o; -} - static void free_func(gpointer options) { Options *o = options; @@ -85,40 +63,13 @@ static gboolean run_func(ObActionsData *data, gpointer options) if (data->client) { gint x, y; - ObClient *c = data->client; - x = c->frame->area.x; - y = c->frame->area.y; - - switch(o->dir) { - case OB_DIRECTION_NORTH: - y = client_directional_edge_search(c, OB_DIRECTION_NORTH, - o->hang) - - (o->hang ? c->frame->area.height : 0); - break; - case OB_DIRECTION_WEST: - x = client_directional_edge_search(c, OB_DIRECTION_WEST, - o->hang) - - (o->hang ? c->frame->area.width : 0); - break; - case OB_DIRECTION_SOUTH: - y = client_directional_edge_search(c, OB_DIRECTION_SOUTH, - o->hang) - - (o->hang ? 0 : c->frame->area.height); - break; - case OB_DIRECTION_EAST: - x = client_directional_edge_search(c, OB_DIRECTION_EAST, - o->hang) - - (o->hang ? 0 : c->frame->area.width); - break; - default: - g_assert_not_reached(); + client_find_move_directional(data->client, o->dir, &x, &y); + if (x != data->client->area.x || y != data->client->area.y) { + actions_client_move(data, FALSE); + client_move(data->client, x, y); + actions_client_move(data, TRUE); } - frame_frame_gravity(c->frame, &x, &y); - - actions_client_move(data, FALSE); - client_move(c, x, y); - actions_client_move(data, TRUE); } return FALSE;