simplify move/resizemouse functions

This commit is contained in:
Devin J. Pohly 2020-04-23 22:26:43 -05:00
parent 073c35ae2f
commit 288f6397fa

30
dwl.c
View file

@ -710,20 +710,15 @@ motionrelative(struct wl_listener *listener, void *data)
void void
movemouse(const Arg *arg) movemouse(const Arg *arg)
{ {
double sx, sy;
struct wlr_surface *surface; struct wlr_surface *surface;
Client *c = xytoclient(cursor->x, cursor->y, &surface, &sx, &sy); grabc = xytoclient(cursor->x, cursor->y, &surface, &grabsx, &grabsy);
if (!c) if (!grabc)
return; return;
/* Prepare for moving client in motionnotify */ /* Float the window and tell motionnotify to grab it */
grabc = c;
cursor_mode = CurMove;
grabsx = cursor->x - c->x;
grabsy = cursor->y - c->y;
/* Float the window */
if (!grabc->isfloating && selmon->lt[selmon->sellt]->arrange) if (!grabc->isfloating && selmon->lt[selmon->sellt]->arrange)
grabc->isfloating = 1; grabc->isfloating = 1;
cursor_mode = CurMove;
} }
void void
@ -893,26 +888,23 @@ resize(Client *c, int x, int y, int w, int h)
void void
resizemouse(const Arg *arg) resizemouse(const Arg *arg)
{ {
double sx, sy;
struct wlr_surface *surface; struct wlr_surface *surface;
Client *c = xytoclient(cursor->x, cursor->y, &surface, &sx, &sy); grabc = xytoclient(cursor->x, cursor->y, &surface, &grabsx, &grabsy);
if (!c) if (!grabc)
return; return;
struct wlr_box sbox; struct wlr_box sbox;
wlr_xdg_surface_get_geometry(c->xdg_surface, &sbox); wlr_xdg_surface_get_geometry(grabc->xdg_surface, &sbox);
/* Doesn't work for X11 output - the next absolute motion event /* Doesn't work for X11 output - the next absolute motion event
* returns the cursor to where it started */ * returns the cursor to where it started */
wlr_cursor_warp_closest(cursor, NULL, wlr_cursor_warp_closest(cursor, NULL,
c->x + sbox.x + sbox.width, grabc->x + sbox.x + sbox.width,
c->y + sbox.y + sbox.height); grabc->y + sbox.y + sbox.height);
/* Prepare for resizing client in motionnotify */ /* Float the window and tell motionnotify to resize it */
grabc = c;
cursor_mode = CurResize;
/* Float the window */
if (!grabc->isfloating && selmon->lt[selmon->sellt]->arrange) if (!grabc->isfloating && selmon->lt[selmon->sellt]->arrange)
grabc->isfloating = 1; grabc->isfloating = 1;
cursor_mode = CurResize;
} }
void void