* context menus (in contrast) do not use an XDG popup grab and
* do not work properly if we send leave/enter events.
*/
- if (seat->seat->pointer_state.grab ==
- seat->seat->pointer_state.default_grab) {
+ if (!wlr_seat_pointer_has_grab(seat->seat)) {
return false;
}
if (seat->pressed.surface && ctx->surface != seat->pressed.surface) {
seat_reset_pressed(seat);
- if (pressed_surface && ctx.surface != pressed_surface) {
- /*
- * Button released but originally pressed over a different surface.
- * Just send the release event to the still focused surface.
- */
- wlr_seat_pointer_notify_button(seat->seat, event->time_msec,
- event->button, event->state);
- return;
- }
-
if (server->input_mode == LAB_INPUT_STATE_MENU) {
if (close_menu) {
menu_close_root(server);
if (server->input_mode != LAB_INPUT_STATE_PASSTHROUGH) {
/* Exit interactive move/resize mode */
interactive_finish(server->grabbed_view);
+
+ if (pressed_surface) {
+ /* Ensure CSD clients see the release event */
+ wlr_seat_pointer_notify_button(seat->seat, event->time_msec,
+ event->button, event->state);
+ }
+ return;
+ }
+
+ if (pressed_surface && ctx.surface != pressed_surface) {
+ /*
+ * Button released but originally pressed over a different surface.
+ * Just send the release event to the still focused surface.
+ */
+ wlr_seat_pointer_notify_button(seat->seat, event->time_msec,
+ event->button, event->state);
return;
}