forked from RepoMirrors/dwl
chase wlroots!4288
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4288
This commit is contained in:
parent
25db045392
commit
d4f2c6bfd6
39
client.h
39
client.h
@ -54,7 +54,7 @@ client_surface(Client *c)
|
|||||||
static inline int
|
static inline int
|
||||||
toplevel_from_wlr_surface(struct wlr_surface *s, Client **pc, LayerSurface **pl)
|
toplevel_from_wlr_surface(struct wlr_surface *s, Client **pc, LayerSurface **pl)
|
||||||
{
|
{
|
||||||
struct wlr_xdg_surface *xdg_surface;
|
struct wlr_xdg_surface *xdg_surface, *tmp_xdg_surface;
|
||||||
struct wlr_surface *root_surface;
|
struct wlr_surface *root_surface;
|
||||||
struct wlr_layer_surface_v1 *layer_surface;
|
struct wlr_layer_surface_v1 *layer_surface;
|
||||||
Client *c = NULL;
|
Client *c = NULL;
|
||||||
@ -82,24 +82,27 @@ toplevel_from_wlr_surface(struct wlr_surface *s, Client **pc, LayerSurface **pl)
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((xdg_surface = wlr_xdg_surface_try_from_wlr_surface(root_surface))) {
|
xdg_surface = wlr_xdg_surface_try_from_wlr_surface(root_surface);
|
||||||
while (1) {
|
while (xdg_surface) {
|
||||||
switch (xdg_surface->role) {
|
tmp_xdg_surface = NULL;
|
||||||
case WLR_XDG_SURFACE_ROLE_POPUP:
|
switch (xdg_surface->role) {
|
||||||
if (!xdg_surface->popup->parent)
|
case WLR_XDG_SURFACE_ROLE_POPUP:
|
||||||
return -1;
|
if (!xdg_surface->popup || !xdg_surface->popup->parent)
|
||||||
else if (!wlr_xdg_surface_try_from_wlr_surface(xdg_surface->popup->parent))
|
|
||||||
return toplevel_from_wlr_surface(xdg_surface->popup->parent, pc, pl);
|
|
||||||
|
|
||||||
xdg_surface = wlr_xdg_surface_try_from_wlr_surface(xdg_surface->popup->parent);
|
|
||||||
break;
|
|
||||||
case WLR_XDG_SURFACE_ROLE_TOPLEVEL:
|
|
||||||
c = xdg_surface->data;
|
|
||||||
type = c->type;
|
|
||||||
goto end;
|
|
||||||
case WLR_XDG_SURFACE_ROLE_NONE:
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
|
||||||
|
tmp_xdg_surface = wlr_xdg_surface_try_from_wlr_surface(xdg_surface->popup->parent);
|
||||||
|
|
||||||
|
if (!tmp_xdg_surface)
|
||||||
|
return toplevel_from_wlr_surface(xdg_surface->popup->parent, pc, pl);
|
||||||
|
|
||||||
|
xdg_surface = tmp_xdg_surface;
|
||||||
|
break;
|
||||||
|
case WLR_XDG_SURFACE_ROLE_TOPLEVEL:
|
||||||
|
c = xdg_surface->data;
|
||||||
|
type = c->type;
|
||||||
|
goto end;
|
||||||
|
case WLR_XDG_SURFACE_ROLE_NONE:
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user