xdg_popup_create(popup->view_child.parent, wlr_popup);
}
+static void
+popup_unconstrain(struct xdg_popup *popup)
+{
+ struct view *view = popup->view_child.parent;
+ struct server *server = view->server;
+ struct wlr_box *popup_box = &popup->wlr_popup->geometry;
+ struct wlr_output_layout *output_layout = server->output_layout;
+ struct wlr_output *wlr_output = wlr_output_layout_output_at(
+ output_layout, view->x + popup_box->x, view->y + popup_box->y);
+ struct wlr_box *output_box = wlr_output_layout_get_box(
+ output_layout, wlr_output);
+
+ struct wlr_box output_toplevel_box = {
+ .x = output_box->x - view->x,
+ .y = output_box->y - view->y,
+ .width = output_box->width,
+ .height = output_box->height,
+ };
+ wlr_xdg_popup_unconstrain_from_box(
+ popup->wlr_popup, &output_toplevel_box);
+}
+
void
xdg_popup_create(struct view *view, struct wlr_xdg_popup *wlr_popup)
{
popup->new_popup.notify = popup_handle_new_xdg_popup;
wl_signal_add(&wlr_popup->base->events.new_popup, &popup->new_popup);
- /* TODO: popup_unconstrain() */
+ popup_unconstrain(popup);
}