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.
This commit is contained in:
parent
ee8489e3a1
commit
7fe8121913
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue