store xdg-positioner properties on the popup
This commit is contained in:
parent
efa9eeb5d5
commit
8836b167bf
|
@ -32,6 +32,62 @@ struct wlr_xdg_client_v6 {
|
||||||
struct wl_event_source *ping_timer;
|
struct wl_event_source *ping_timer;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum wlr_positioner_v6_anchor {
|
||||||
|
/**
|
||||||
|
* the center of the anchor rectangle
|
||||||
|
*/
|
||||||
|
WLR_POSITIONER_V6_ANCHOR_NONE = 0,
|
||||||
|
/**
|
||||||
|
* the top edge of the anchor rectangle
|
||||||
|
*/
|
||||||
|
WLR_POSITIONER_V6_ANCHOR_TOP = 1,
|
||||||
|
/**
|
||||||
|
* the bottom edge of the anchor rectangle
|
||||||
|
*/
|
||||||
|
WLR_POSITIONER_V6_ANCHOR_BOTTOM = 2,
|
||||||
|
/**
|
||||||
|
* the left edge of the anchor rectangle
|
||||||
|
*/
|
||||||
|
WLR_POSITIONER_V6_ANCHOR_LEFT = 4,
|
||||||
|
/**
|
||||||
|
* the right edge of the anchor rectangle
|
||||||
|
*/
|
||||||
|
WLR_POSITIONER_V6_ANCHOR_RIGHT = 8,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum wlr_positioner_v6_gravity {
|
||||||
|
/**
|
||||||
|
* center over the anchor edge
|
||||||
|
*/
|
||||||
|
WLR_POSITIONER_V6_GRAVITY_NONE = 0,
|
||||||
|
/**
|
||||||
|
* position above the anchor edge
|
||||||
|
*/
|
||||||
|
WLR_POSITIONER_V6_GRAVITY_TOP = 1,
|
||||||
|
/**
|
||||||
|
* position below the anchor edge
|
||||||
|
*/
|
||||||
|
WLR_POSITIONER_V6_GRAVITY_BOTTOM = 2,
|
||||||
|
/**
|
||||||
|
* position to the left of the anchor edge
|
||||||
|
*/
|
||||||
|
WLR_POSITIONER_V6_GRAVITY_LEFT = 4,
|
||||||
|
/**
|
||||||
|
* position to the right of the anchor edge
|
||||||
|
*/
|
||||||
|
WLR_POSITIONER_V6_GRAVITY_RIGHT = 8,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum wlr_positioner_v6_constraint_adjustment {
|
||||||
|
WLR_POSITIONER_V6_CONSTRAINT_ADJUSTMENT_NONE = 0,
|
||||||
|
WLR_POSITIONER_V6_CONSTRAINT_ADJUSTMENT_SLIDE_X = 1,
|
||||||
|
WLR_POSITIONER_V6_CONSTRAINT_ADJUSTMENT_SLIDE_Y = 2,
|
||||||
|
WLR_POSITIONER_V6_CONSTRAINT_ADJUSTMENT_FLIP_X = 4,
|
||||||
|
WLR_POSITIONER_V6_CONSTRAINT_ADJUSTMENT_FLIP_Y = 8,
|
||||||
|
WLR_POSITIONER_V6_CONSTRAINT_ADJUSTMENT_RESIZE_X = 16,
|
||||||
|
WLR_POSITIONER_V6_CONSTRAINT_ADJUSTMENT_RESIZE_Y = 32,
|
||||||
|
};
|
||||||
|
|
||||||
struct wlr_xdg_popup_v6 {
|
struct wlr_xdg_popup_v6 {
|
||||||
struct wlr_xdg_surface_v6 *base;
|
struct wlr_xdg_surface_v6 *base;
|
||||||
struct wl_list link;
|
struct wl_list link;
|
||||||
|
@ -42,6 +98,10 @@ struct wlr_xdg_popup_v6 {
|
||||||
struct wlr_seat *seat;
|
struct wlr_seat *seat;
|
||||||
struct wlr_box geometry;
|
struct wlr_box geometry;
|
||||||
|
|
||||||
|
enum wlr_positioner_v6_anchor anchor;
|
||||||
|
enum wlr_positioner_v6_gravity gravity;
|
||||||
|
enum wlr_positioner_v6_constraint_adjustment constraint_adjustment;
|
||||||
|
|
||||||
struct wl_list grab_link; // wlr_xdg_popup_grab_v6::popups
|
struct wl_list grab_link; // wlr_xdg_popup_grab_v6::popups
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -537,6 +537,12 @@ static void xdg_surface_get_popup(struct wl_client *client,
|
||||||
surface->popup_state->parent = parent;
|
surface->popup_state->parent = parent;
|
||||||
surface->popup_state->geometry =
|
surface->popup_state->geometry =
|
||||||
xdg_positioner_get_geometry(positioner, surface, parent);
|
xdg_positioner_get_geometry(positioner, surface, parent);
|
||||||
|
|
||||||
|
// positioner properties
|
||||||
|
surface->popup_state->anchor = (uint32_t)positioner->anchor;
|
||||||
|
surface->popup_state->gravity = (uint32_t)positioner->gravity;
|
||||||
|
surface->popup_state->constraint_adjustment = (uint32_t)positioner->constraint_adjustment;
|
||||||
|
|
||||||
wl_list_insert(&parent->popups, &surface->popup_state->link);
|
wl_list_insert(&parent->popups, &surface->popup_state->link);
|
||||||
|
|
||||||
wl_resource_set_implementation(surface->popup_state->resource,
|
wl_resource_set_implementation(surface->popup_state->resource,
|
||||||
|
|
Loading…
Reference in New Issue