Skip to content
This repository has been archived by the owner on Jan 26, 2024. It is now read-only.

Commit

Permalink
correctly handle cursor motion when button is held (for layer surfaces)
Browse files Browse the repository at this point in the history
  • Loading branch information
sevz17 committed Oct 8, 2022
1 parent 0d1ca46 commit 952fde6
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 4 deletions.
15 changes: 15 additions & 0 deletions client.h
Expand Up @@ -307,3 +307,18 @@ toplevel_from_popup(struct wlr_xdg_popup *popup)
}
}
}

static inline void *
toplevel_from_wlr_layer_surface(struct wlr_surface *s)
{
Client *c;
struct wlr_layer_surface_v1 *wlr_layer_surface;

if ((c = client_from_wlr_surface(s)))
return c;
else if (s && wlr_surface_is_layer_surface(s)
&& (wlr_layer_surface = wlr_layer_surface_v1_from_wlr_surface(s)))
return wlr_layer_surface->data;

return NULL;
}
11 changes: 7 additions & 4 deletions dwl.c
Expand Up @@ -1504,6 +1504,7 @@ motionnotify(uint32_t time)
{
double sx = 0, sy = 0;
Client *c = NULL;
LayerSurface *l;
struct wlr_surface *surface = NULL;
struct wlr_drag_icon *icon;

Expand Down Expand Up @@ -1536,10 +1537,12 @@ motionnotify(uint32_t time)
xytonode(cursor->x, cursor->y, &surface, &c, NULL, &sx, &sy);

if (cursor_mode == CurPressed && !seat->drag) {
surface = seat->pointer_state.focused_surface;
c = client_from_wlr_surface(surface);
sx = c ? cursor->x - c->geom.x : 0;
sy = c ? cursor->y - c->geom.y : 0;
if ((l = toplevel_from_wlr_layer_surface(
seat->pointer_state.focused_surface))) {
surface = seat->pointer_state.focused_surface;
sx = cursor->x - l->geom.x;
sy = cursor->y - l->geom.y;
}
}

/* If there's no client surface under the cursor, set the cursor image to a
Expand Down

0 comments on commit 952fde6

Please sign in to comment.