- gint x, y, width, height, dest;
- ObClient *c = data->client;
- Rect *a;
-
- a = screen_area(c->desktop, SCREEN_AREA_ALL_MONITORS, &c->frame->area);
- x = c->frame->area.x;
- y = c->frame->area.y;
- /* get the unshaded frame's dimensions..if it is shaded */
- width = c->area.width + c->frame->size.left + c->frame->size.right;
- height = c->area.height + c->frame->size.top + c->frame->size.bottom;
-
-#if 0
- dest = client_directional_edge_search(c, o->dir);
-
- switch(o->dir) {
- case OB_DIRECTION_NORTH:
- if (c->shaded) break; /* don't allow vertical resize if shaded */
-
- if (a->y == y)
- height = height / 2;
- else {
- height = c->frame->area.y + height - dest;
- y = dest;
- }
- break;
- case OB_DIRECTION_WEST:
- if (a->x == x)
- width = width / 2;
- else {
- width = c->frame->area.x + width - dest;
- x = dest;
+ gint x, y, w, h, realw, realh, lw, lh;
+
+ /* 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);