mirror of
https://github.com/labwc/labwc.git
synced 2026-02-17 22:05:30 -05:00
cursor: allow re-focusing xwayland-unmanaged surfaces
We already allow some xwayland-unmanaged surfaces to take focus on map, if indicated by wlr_xwayland_or_surface_wants_focus(). But once these surfaces lose focus, they never regain it again. Add desktop_focus_view_or_surface() and call it in the appropriate places to allow these views to regain focus in the usual ways (e.g. clicking on them or focus-follows-mouse).
This commit is contained in:
parent
7aa1dc1ca5
commit
c5437b1153
3 changed files with 47 additions and 5 deletions
|
|
@ -13,6 +13,10 @@
|
|||
#include "workspaces.h"
|
||||
#include "xwayland.h"
|
||||
|
||||
#if HAVE_XWAYLAND
|
||||
#include <wlr/xwayland.h>
|
||||
#endif
|
||||
|
||||
void
|
||||
desktop_arrange_all_views(struct server *server)
|
||||
{
|
||||
|
|
@ -84,6 +88,25 @@ desktop_focus_view(struct view *view, bool raise)
|
|||
}
|
||||
}
|
||||
|
||||
/* TODO: focus layer-shell surfaces also? */
|
||||
void
|
||||
desktop_focus_view_or_surface(struct seat *seat, struct view *view,
|
||||
struct wlr_surface *surface, bool raise)
|
||||
{
|
||||
assert(view || surface);
|
||||
if (view) {
|
||||
desktop_focus_view(view, raise);
|
||||
#if HAVE_XWAYLAND
|
||||
} else if (wlr_surface_is_xwayland_surface(surface)) {
|
||||
struct wlr_xwayland_surface *xsurface =
|
||||
wlr_xwayland_surface_from_wlr_surface(surface);
|
||||
if (xsurface && wlr_xwayland_or_surface_wants_focus(xsurface)) {
|
||||
seat_focus_surface(seat, surface);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
static struct wl_list *
|
||||
get_prev_item(struct wl_list *item)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue