From 7fe812191387d4e78351edee7f285244b9aad204 Mon Sep 17 00:00:00 2001 From: lkn Date: Sat, 23 May 2026 13:51:45 +0200 Subject: [PATCH] fix: clicking WINGs dialog surface now focuses the window The click-to-focus code only checked wl_toplevel_view surfaces (real Wayland/XWayland clients). WINGs dialogs are frame_bufs, not toplevel views, so view_surface_at returned NULL and focus was never set. Add fallback: when no toplevel surface is under the pointer, check if a WINGs dialog frame_buf (ID >= 0x20000000) was hit and focus its associated WWindow. --- src/backend/wayland/wl_backend.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/backend/wayland/wl_backend.c b/src/backend/wayland/wl_backend.c index abc1366..78b9591 100644 --- a/src/backend/wayland/wl_backend.c +++ b/src/backend/wayland/wl_backend.c @@ -5206,6 +5206,19 @@ handle_pointer_button(struct wl_listener *listener, void *data) wl_list_remove(&view->link); wl_list_insert(&wl_state.toplevel_list, &view->link); } + } else { + /* No toplevel surface — check if a WINGs dialog frame_buf was clicked */ + struct wl_frame_buf *hit = frame_buf_hit(wl_state.pointer_x, + wl_state.pointer_y); + if (hit && hit->id >= 0x20000000) { + WObjDescriptor *desc = + wm_backend->context_find(hit->id, WM_CTX_CLIENT_WIN); + if (desc && desc->parent_type == WCLASS_WINDOW) { + WWindow *wwin = (WWindow *)desc->parent; + WScreen *scr = wScreenWithNumber(0); + wSetFocusTo(scr, wwin); + } + } } }