Make roots_cursor::pointer_view available even if there is a surface
To find out whether there was a surface or not before a movement, the member roots_cursor::wlr_surface has been added.
This commit is contained in:
parent
252bcce2f3
commit
cf9debf82e
|
@ -28,6 +28,7 @@ struct roots_cursor {
|
|||
uint32_t resize_edges;
|
||||
|
||||
struct roots_seat_view *pointer_view;
|
||||
struct wlr_surface *wlr_surface;
|
||||
|
||||
struct wl_listener motion;
|
||||
struct wl_listener motion_absolute;
|
||||
|
|
|
@ -125,17 +125,23 @@ static void roots_passthrough_cursor(struct roots_cursor *cursor,
|
|||
if (view) {
|
||||
struct roots_seat_view *seat_view =
|
||||
roots_seat_view_from_view(seat, view);
|
||||
if (cursor->pointer_view && (surface ||
|
||||
seat_view != cursor->pointer_view)) {
|
||||
|
||||
if (cursor->pointer_view &&
|
||||
!cursor->wlr_surface && (surface || seat_view != cursor->pointer_view)) {
|
||||
seat_view_deco_leave(cursor->pointer_view);
|
||||
cursor->pointer_view = NULL;
|
||||
}
|
||||
if (!surface) {
|
||||
|
||||
cursor->pointer_view = seat_view;
|
||||
|
||||
if (!surface) {
|
||||
seat_view_deco_motion(seat_view, sx, sy);
|
||||
}
|
||||
} else {
|
||||
cursor->pointer_view = NULL;
|
||||
}
|
||||
|
||||
cursor->wlr_surface = surface;
|
||||
|
||||
if (surface) {
|
||||
focus_changed = (seat->seat->pointer_state.focused_surface != surface);
|
||||
wlr_seat_pointer_notify_enter(seat->seat, surface, sx, sy);
|
||||
|
|
Loading…
Reference in New Issue