cursor: Call wlr_seat_pointer_notify_clear_focus() only if needed

@Consolatis determined that apparently the extra "clear focus"
event confuses the drag source during drag-and-drop.

Fixes drag-and-drop of files into folders within the same Thunar
window.
This commit is contained in:
John Lindgren 2022-10-11 11:46:30 -04:00 committed by Johan Malm
parent cfdf60b1da
commit cd970945f4

View file

@ -369,8 +369,10 @@ cursor_update_common(struct server *server, struct cursor_context *ctx,
* cursor image will be set by request_cursor_notify()
* in response to the enter event.
*/
if (ctx->surface != wlr_seat->pointer_state.focused_surface
|| seat->server_cursor != LAB_CURSOR_CLIENT) {
bool has_focus = (ctx->surface ==
wlr_seat->pointer_state.focused_surface);
if (!has_focus || seat->server_cursor != LAB_CURSOR_CLIENT) {
/*
* Enter the surface if necessary. Usually we
* prevent re-entering an already focused
@ -382,7 +384,9 @@ cursor_update_common(struct server *server, struct cursor_context *ctx,
* if a server-side cursor was set and we need
* to trigger a cursor image update.
*/
wlr_seat_pointer_notify_clear_focus(wlr_seat);
if (has_focus) {
wlr_seat_pointer_notify_clear_focus(wlr_seat);
}
wlr_seat_pointer_notify_enter(wlr_seat, ctx->surface,
ctx->sx, ctx->sy);
seat->server_cursor = LAB_CURSOR_CLIENT;