mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-22 12:55:58 +01:00
layer-shell: add for_each_popup
This brings the layer-shell api in line with that of xdg-shell and avoids reimplementing this function in every compositor in order to render layer shell popups correctly.
This commit is contained in:
parent
bae8d7593c
commit
8ad2cc39eb
2 changed files with 11 additions and 8 deletions
|
@ -138,6 +138,10 @@ struct wlr_layer_surface_v1 *wlr_layer_surface_v1_from_wlr_surface(
|
|||
void wlr_layer_surface_v1_for_each_surface(struct wlr_layer_surface_v1 *surface,
|
||||
wlr_surface_iterator_func_t iterator, void *user_data);
|
||||
|
||||
/* Calls the iterator function for each popup of this surface */
|
||||
void wlr_layer_surface_v1_for_each_popup(struct wlr_layer_surface_v1 *surface,
|
||||
wlr_surface_iterator_func_t iterator, void *user_data);
|
||||
|
||||
/**
|
||||
* Find a surface within this layer-surface tree at the given surface-local
|
||||
* coordinates. Returns the surface and coordinates in the leaf surface
|
||||
|
|
|
@ -534,16 +534,20 @@ static void xdg_surface_for_each_surface(struct wlr_xdg_surface *surface,
|
|||
}
|
||||
}
|
||||
|
||||
static void layer_surface_for_each_surface(struct wlr_layer_surface_v1 *surface,
|
||||
int x, int y, wlr_surface_iterator_func_t iterator, void *user_data) {
|
||||
void wlr_layer_surface_v1_for_each_surface(struct wlr_layer_surface_v1 *surface,
|
||||
wlr_surface_iterator_func_t iterator, void *user_data) {
|
||||
struct layer_surface_iterator_data data = {
|
||||
.user_iterator = iterator,
|
||||
.user_data = user_data,
|
||||
.x = x, .y = y,
|
||||
.x = 0, .y = 0,
|
||||
};
|
||||
wlr_surface_for_each_surface(surface->surface,
|
||||
layer_surface_iterator, &data);
|
||||
wlr_layer_surface_v1_for_each_popup(surface, iterator, user_data);
|
||||
}
|
||||
|
||||
void wlr_layer_surface_v1_for_each_popup(struct wlr_layer_surface_v1 *surface,
|
||||
wlr_surface_iterator_func_t iterator, void *user_data){
|
||||
struct wlr_xdg_popup *popup_state;
|
||||
wl_list_for_each(popup_state, &surface->popups, link) {
|
||||
struct wlr_xdg_surface *popup = popup_state->base;
|
||||
|
@ -560,11 +564,6 @@ static void layer_surface_for_each_surface(struct wlr_layer_surface_v1 *surface,
|
|||
}
|
||||
}
|
||||
|
||||
void wlr_layer_surface_v1_for_each_surface(struct wlr_layer_surface_v1 *surface,
|
||||
wlr_surface_iterator_func_t iterator, void *user_data) {
|
||||
layer_surface_for_each_surface(surface, 0, 0, iterator, user_data);
|
||||
}
|
||||
|
||||
struct wlr_surface *wlr_layer_surface_v1_surface_at(
|
||||
struct wlr_layer_surface_v1 *surface, double sx, double sy,
|
||||
double *sub_x, double *sub_y) {
|
||||
|
|
Loading…
Reference in a new issue