fix grow to edge stuff. also fix key-resizing terminals.
This commit is contained in:
parent
256c82a9f1
commit
6f79080a4b
2 changed files with 22 additions and 20 deletions
|
@ -3957,7 +3957,7 @@ void client_find_edge_directional(ObClient *self, ObDirection dir,
|
|||
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;
|
||||
|
@ -3968,7 +3968,7 @@ void client_find_edge_directional(ObClient *self, ObDirection dir,
|
|||
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;
|
||||
|
@ -4065,36 +4065,36 @@ void client_find_resize_directional(ObClient *self, ObDirection side,
|
|||
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;
|
||||
|
@ -4103,32 +4103,34 @@ void client_find_resize_directional(ObClient *self, ObDirection side,
|
|||
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;
|
||||
|
|
|
@ -167,14 +167,14 @@ void moveresize_start(ObClient *c, gint x, gint y, guint b, guint32 cnr)
|
|||
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;
|
||||
|
|
Loading…
Reference in a new issue