Merge branch 'obsd-master'

This commit is contained in:
Thomas Adam 2018-06-09 19:02:29 +01:00
commit 54c2d48d7d

View File

@ -131,7 +131,12 @@ cmd_resize_pane_mouse_update(struct client *c, struct mouse_event *m)
struct winlink *wl; struct winlink *wl;
struct window *w; struct window *w;
u_int y, ly, x, lx; u_int y, ly, x, lx;
struct layout_cell *lc; struct layout_cell *cells[5], *lc;
u_int ncells = 0, i, j, resizes = 0;
enum layout_type type;
static const int offsets[nitems(cells)][2] = {
{ 0, 0 }, { 0, 1 }, { 1, 0 }, { 0, -1 }, { -1, 0 },
};
wl = cmd_mouse_window(m, NULL); wl = cmd_mouse_window(m, NULL);
if (wl == NULL) { if (wl == NULL) {
@ -151,16 +156,37 @@ cmd_resize_pane_mouse_update(struct client *c, struct mouse_event *m)
else if (m->statusat > 0 && ly >= (u_int)m->statusat) else if (m->statusat > 0 && ly >= (u_int)m->statusat)
ly = m->statusat - 1; ly = m->statusat - 1;
lc = layout_search_by_border(w->layout_root, lx, ly); for (i = 0; i < nitems(cells); i++) {
if (lc == NULL) lc = layout_search_by_border(w->layout_root, lx + offsets[i][0],
ly + offsets[i][1]);
if (lc == NULL)
continue;
for (j = 0; j < ncells; j++) {
if (cells[j] == lc) {
lc = NULL;
break;
}
}
if (lc == NULL)
continue;
cells[ncells] = lc;
ncells++;
}
if (ncells == 0)
return; return;
if (y != ly && lc->parent->type == LAYOUT_TOPBOTTOM) for (i = 0; i < ncells; i++) {
layout_resize_layout(w, lc, LAYOUT_TOPBOTTOM, y - ly, 0); type = cells[i]->parent->type;
else if (x != lx && lc->parent->type == LAYOUT_LEFTRIGHT) if (y != ly && type == LAYOUT_TOPBOTTOM) {
layout_resize_layout(w, lc, LAYOUT_LEFTRIGHT, x - lx, 0); layout_resize_layout(w, cells[i], type, y - ly, 0);
else resizes++;
return; } else if (x != lx && type == LAYOUT_LEFTRIGHT) {
layout_resize_layout(w, cells[i], type, x - lx, 0);
server_redraw_window(w); resizes++;
}
}
if (resizes != 0)
server_redraw_window(w);
} }