case OB_DIRECTION_WEST:
if (my_head <= head + 1)
skip_head = TRUE;
- if (my_head + my_size - 1 <= tail + 1)
+ if (my_head + my_size - 1 <= tail)
skip_tail = TRUE;
if (head < *dest)
skip_head = TRUE;
case OB_DIRECTION_EAST:
if (my_head >= head - 1)
skip_head = TRUE;
- if (my_head - my_size + 1 >= tail - 1)
+ if (my_head - my_size + 1 >= tail)
skip_tail = TRUE;
if (head > *dest)
skip_head = TRUE;
gboolean grow,
gint *x, gint *y, gint *w, gint *h)
{
- gint head, size;
+ gint head;
gint e, e_start, e_size, delta;
gboolean near;
ObDirection dir;
switch (side) {
case OB_DIRECTION_EAST:
- head = RECT_RIGHT(self->frame->area) + (self->size_inc.width - 1);
- size = self->frame->area.width;
+ head = RECT_RIGHT(self->frame->area) +
+ (self->size_inc.width - 1) * (grow ? 1 : -1);
e_start = RECT_TOP(self->frame->area);
e_size = self->frame->area.height;
dir = grow ? OB_DIRECTION_EAST : OB_DIRECTION_WEST;
break;
case OB_DIRECTION_WEST:
- head = RECT_LEFT(self->frame->area) - (self->size_inc.width - 1);
- size = self->frame->area.width;
+ head = RECT_LEFT(self->frame->area) -
+ (self->size_inc.width - 1) * (grow ? 1 : -1);
e_start = RECT_TOP(self->frame->area);
e_size = self->frame->area.height;
dir = grow ? OB_DIRECTION_WEST : OB_DIRECTION_EAST;
break;
case OB_DIRECTION_NORTH:
- head = RECT_TOP(self->frame->area) - (self->size_inc.height - 1);
- size = self->frame->area.height;
+ head = RECT_TOP(self->frame->area) -
+ (self->size_inc.height - 1) * (grow ? 1 : -1);
e_start = RECT_LEFT(self->frame->area);
e_size = self->frame->area.width;
dir = grow ? OB_DIRECTION_NORTH : OB_DIRECTION_SOUTH;
break;
case OB_DIRECTION_SOUTH:
- head = RECT_BOTTOM(self->frame->area) + (self->size_inc.height - 1);
- size = self->frame->area.height;
+ head = RECT_BOTTOM(self->frame->area) +
+ (self->size_inc.height - 1) * (grow ? 1 : -1);
e_start = RECT_LEFT(self->frame->area);
e_size = self->frame->area.width;
dir = grow ? OB_DIRECTION_SOUTH : OB_DIRECTION_NORTH;
g_assert_not_reached();
}
- client_find_edge_directional(self, dir, head, size,
+ ob_debug("head %d dir %d\n", head, dir);
+ client_find_edge_directional(self, dir, head, 1,
e_start, e_size, &e, &near);
+ ob_debug("edge %d\n", e);
*x = self->frame->area.x;
*y = self->frame->area.y;
*w = self->frame->area.width;
*h = self->frame->area.height;
switch (side) {
case OB_DIRECTION_EAST:
- if (near) --e;
+ if (grow == near) --e;
delta = e - RECT_RIGHT(self->frame->area);
*w += delta;
break;
case OB_DIRECTION_WEST:
- if (near) ++e;
+ if (grow == near) ++e;
delta = RECT_LEFT(self->frame->area) - e;
*x -= delta;
*w += delta;
break;
case OB_DIRECTION_NORTH:
- if (near) ++e;
+ if (grow == near) ++e;
delta = RECT_TOP(self->frame->area) - e;
*y -= delta;
*h += delta;
break;
case OB_DIRECTION_SOUTH:
- if (near) --e;
+ if (grow == near) --e;
delta = e - RECT_BOTTOM(self->frame->area);
*h += delta;
break;
moveresize_client = c;
start_cx = c->area.x;
start_cy = c->area.y;
+ start_cw = c->area.width;
+ start_ch = c->area.height;
/* these adjustments for the size_inc make resizing a terminal more
friendly. you essentially start the resize in the middle of the
increment instead of at 0, so you have to move half an increment
either way instead of a full increment one and 1 px the other. */
- start_cw = c->area.width + c->size_inc.width / 2;
- start_ch = c->area.height + c->size_inc.height / 2;
- start_x = x;
- start_y = y;
+ start_x = x - c->size_inc.width / 2;
+ start_y = y - c->size_inc.height / 2;
corner = cnr;
button = b;
key_resize_edge = -1;