diff --git a/src/backend/wayland/wl_backend.c b/src/backend/wayland/wl_backend.c index 4a4a160..00d9307 100644 --- a/src/backend/wayland/wl_backend.c +++ b/src/backend/wayland/wl_backend.c @@ -5226,7 +5226,18 @@ handle_pointer_motion(struct wl_listener *listener, void *data) wev.u.motion.time = ev->time_msec; wev.u.motion.x_root = wl_state.pointer_x; wev.u.motion.y_root = wl_state.pointer_y; - W_WL_EnqueueEvent(wmscr, &wev, NULL); + /* Resolve WINGs child view (slider, etc.) at pointer for + * motion routing during drag operations. */ + struct W_View *mtarget = NULL; + if (fb && fb->id >= 0x20000000) { + extern W_View *W_GetViewForWindow(unsigned long id); + extern struct W_View *W_FindViewAtPoint(struct W_View *parent, int x, int y); + W_View *toplevel = W_GetViewForWindow((unsigned long)fb->id); + if (toplevel) + mtarget = W_FindViewAtPoint(toplevel, + wev.u.motion.x, wev.u.motion.y); + } + W_WL_EnqueueEvent(wmscr, &wev, mtarget); /* Emit synthetic LEAVE/ENTER when pointer crosses WM sub-window * boundaries (titlebar ↔ button, etc.). These feed the inner * press-track loop in framewin.c:buttonMouseDown so the cancel-