mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-29 16:05:59 +01:00
surface_at: check if surfaces are mapped
This commit is contained in:
parent
893434b2d4
commit
ce66244fd2
4 changed files with 16 additions and 1 deletions
|
@ -233,7 +233,8 @@ bool wlr_surface_point_accepts_input(struct wlr_surface *surface,
|
||||||
double sx, double sy);
|
double sx, double sy);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find a surface in this surface's tree that accepts input events at the given
|
* Find a surface in this surface's tree that accepts input events and has all
|
||||||
|
* parents mapped (except this surface, which can be unmapped) at the given
|
||||||
* surface-local coordinates. Returns the surface and coordinates in the leaf
|
* surface-local coordinates. Returns the surface and coordinates in the leaf
|
||||||
* surface coordinate system or NULL if no surface is found at that location.
|
* surface coordinate system or NULL if no surface is found at that location.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -541,6 +541,9 @@ struct wlr_surface *wlr_layer_surface_v1_popup_surface_at(
|
||||||
struct wlr_xdg_popup *popup_state;
|
struct wlr_xdg_popup *popup_state;
|
||||||
wl_list_for_each(popup_state, &surface->popups, link) {
|
wl_list_for_each(popup_state, &surface->popups, link) {
|
||||||
struct wlr_xdg_surface *popup = popup_state->base;
|
struct wlr_xdg_surface *popup = popup_state->base;
|
||||||
|
if (!popup->mapped) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
double popup_sx = popup_state->geometry.x - popup->current.geometry.x;
|
double popup_sx = popup_state->geometry.x - popup->current.geometry.x;
|
||||||
double popup_sy = popup_state->geometry.y - popup->current.geometry.y;
|
double popup_sy = popup_state->geometry.y - popup->current.geometry.y;
|
||||||
|
|
|
@ -1204,6 +1204,10 @@ struct wlr_surface *wlr_surface_surface_at(struct wlr_surface *surface,
|
||||||
struct wlr_subsurface *subsurface;
|
struct wlr_subsurface *subsurface;
|
||||||
wl_list_for_each_reverse(subsurface, &surface->current.subsurfaces_above,
|
wl_list_for_each_reverse(subsurface, &surface->current.subsurfaces_above,
|
||||||
current.link) {
|
current.link) {
|
||||||
|
if (!subsurface->mapped) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
double _sub_x = subsurface->current.x;
|
double _sub_x = subsurface->current.x;
|
||||||
double _sub_y = subsurface->current.y;
|
double _sub_y = subsurface->current.y;
|
||||||
struct wlr_surface *sub = wlr_surface_surface_at(subsurface->surface,
|
struct wlr_surface *sub = wlr_surface_surface_at(subsurface->surface,
|
||||||
|
@ -1225,6 +1229,10 @@ struct wlr_surface *wlr_surface_surface_at(struct wlr_surface *surface,
|
||||||
|
|
||||||
wl_list_for_each_reverse(subsurface, &surface->current.subsurfaces_below,
|
wl_list_for_each_reverse(subsurface, &surface->current.subsurfaces_below,
|
||||||
current.link) {
|
current.link) {
|
||||||
|
if (!subsurface->mapped) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
double _sub_x = subsurface->current.x;
|
double _sub_x = subsurface->current.x;
|
||||||
double _sub_y = subsurface->current.y;
|
double _sub_y = subsurface->current.y;
|
||||||
struct wlr_surface *sub = wlr_surface_surface_at(subsurface->surface,
|
struct wlr_surface *sub = wlr_surface_surface_at(subsurface->surface,
|
||||||
|
|
|
@ -549,6 +549,9 @@ struct wlr_surface *wlr_xdg_surface_popup_surface_at(
|
||||||
struct wlr_xdg_popup *popup_state;
|
struct wlr_xdg_popup *popup_state;
|
||||||
wl_list_for_each(popup_state, &surface->popups, link) {
|
wl_list_for_each(popup_state, &surface->popups, link) {
|
||||||
struct wlr_xdg_surface *popup = popup_state->base;
|
struct wlr_xdg_surface *popup = popup_state->base;
|
||||||
|
if (!popup->mapped) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
double popup_sx, popup_sy;
|
double popup_sx, popup_sy;
|
||||||
wlr_xdg_popup_get_position(popup_state, &popup_sx, &popup_sy);
|
wlr_xdg_popup_get_position(popup_state, &popup_sx, &popup_sy);
|
||||||
|
|
Loading…
Reference in a new issue