diff --git a/rootston/cursor.c b/rootston/cursor.c index 5430afe5..d8753f44 100644 --- a/rootston/cursor.c +++ b/rootston/cursor.c @@ -115,7 +115,7 @@ static void roots_cursor_update_position(struct roots_cursor *cursor, seat_view_deco_leave(cursor->pointer_view); cursor->pointer_view = NULL; } - bool set_compositor_cursor = !view && cursor->cursor_client; + bool set_compositor_cursor = !view && !surface && cursor->cursor_client; if (view && surface) { struct wl_client *view_client = wl_resource_get_client(view->wlr_surface->resource); @@ -211,7 +211,7 @@ static void roots_cursor_press_button(struct roots_cursor *cursor, struct roots_desktop *desktop = seat->input->server->desktop; bool is_touch = device->type == WLR_INPUT_DEVICE_TOUCH; - struct wlr_surface *surface; + struct wlr_surface *surface = NULL; double sx, sy; struct roots_view *view = desktop_view_at(desktop, lx, ly, &surface, &sx, &sy); diff --git a/rootston/desktop.c b/rootston/desktop.c index 5fa27db2..70dafec4 100644 --- a/rootston/desktop.c +++ b/rootston/desktop.c @@ -400,7 +400,8 @@ static bool view_at(struct roots_view *view, double lx, double ly, if (view_get_deco_part(view, view_sx, view_sy)) { *sx = view_sx; *sy = view_sy; - return view; + *surface = NULL; + return true; } if (wlr_box_contains_point(&box, view_sx, view_sy) && diff --git a/rootston/seat.c b/rootston/seat.c index 41ae6c9f..e6e505b5 100644 --- a/rootston/seat.c +++ b/rootston/seat.c @@ -573,6 +573,10 @@ static void seat_view_destroy(struct roots_seat_view *seat_view) { seat->cursor->mode = ROOTS_CURSOR_PASSTHROUGH; } + if (seat_view == seat->cursor->pointer_view) { + seat->cursor->pointer_view = NULL; + } + wl_list_remove(&seat_view->view_destroy.link); wl_list_remove(&seat_view->link); free(seat_view);