void
cursor_rebase(struct seat *seat, uint32_t time_msec, bool force)
{
+ if (seat->pressed.surface) {
+ /* Don't leave surface while a button is pressed */
+ return;
+ }
+
double sx, sy;
struct wlr_scene_node *node;
enum ssd_part_type view_area = LAB_SSD_NONE;
if (surface) {
if (!force && surface == seat->seat->pointer_state.focused_surface) {
/*
- * Usually we prevent re-entering an already focued surface
+ * Usually we prevent re-entering an already focused surface
* because it sends useless leave and enter events.
*
* They may also seriously confuse clients if sent between
wlr_scene_node_set_position(&view->scene_tree->node, view->x, view->y);
view_discover_output(view);
ssd_update_geometry(view);
+ cursor_update_focus(view->server);
}
/* N.B. Use view_move() if not resizing. */
wlr_xwayland_surface_configure(xsurface, ev->x, ev->y, ev->width, ev->height);
if (unmanaged->node) {
wlr_scene_node_set_position(unmanaged->node, ev->x, ev->y);
+ cursor_update_focus(unmanaged->server);
}
}
struct wlr_xwayland_surface *xsurface = unmanaged->xwayland_surface;
if (unmanaged->node) {
wlr_scene_node_set_position(unmanaged->node, xsurface->x, xsurface->y);
+ cursor_update_focus(unmanaged->server);
}
}
unmanaged->server->unmanaged_tree,
xsurface->surface)->buffer->node;
wlr_scene_node_set_position(unmanaged->node, xsurface->x, xsurface->y);
+ cursor_update_focus(unmanaged->server);
}
static void
seat_reset_pressed(seat);
}
unmanaged->node = NULL;
+ cursor_update_focus(unmanaged->server);
if (seat->seat->keyboard_state.focused_surface == xsurface->surface) {
focus_next_surface(unmanaged->server, xsurface);