Compare commits

...

2 commits

Author SHA1 Message Date
Simon Ser
63f186632e xdg_shell: bump to v5
Some checks failed
Continuous integration build / compile (clang, alpine:edge, disabled) (push) Has been cancelled
Continuous integration build / compile (clang, alpine:edge, enabled) (push) Has been cancelled
Continuous integration build / compile (clang, archlinux:base-devel, disabled) (push) Has been cancelled
Continuous integration build / compile (clang, archlinux:base-devel, enabled) (push) Has been cancelled
Continuous integration build / compile (gcc, alpine:edge, disabled) (push) Has been cancelled
Continuous integration build / compile (gcc, alpine:edge, enabled) (push) Has been cancelled
Continuous integration build / compile (gcc, archlinux:base-devel, disabled) (push) Has been cancelled
Continuous integration build / compile (gcc, archlinux:base-devel, enabled) (push) Has been cancelled
Continuous integration build / format (push) Has been cancelled
Continuous integration build / scan-build (push) Has been cancelled
v5 adds the wm_capabilities event. cage only supports fullscreen.
2025-06-03 23:22:53 +02:00
Simon Ser
60d41fb93c xdg_shell: handle xdg_popup reposition signal
We are advertising xdg-shell v4, but forgot to handle this signal.
2025-06-03 23:22:35 +02:00
3 changed files with 16 additions and 1 deletions

2
cage.c
View file

@ -416,7 +416,7 @@ main(int argc, char *argv[])
wl_signal_add(&server.idle_inhibit_v1->events.new_inhibitor, &server.new_idle_inhibitor_v1); wl_signal_add(&server.idle_inhibit_v1->events.new_inhibitor, &server.new_idle_inhibitor_v1);
wl_list_init(&server.inhibitors); wl_list_init(&server.inhibitors);
struct wlr_xdg_shell *xdg_shell = wlr_xdg_shell_create(server.wl_display, 4); struct wlr_xdg_shell *xdg_shell = wlr_xdg_shell_create(server.wl_display, 5);
if (!xdg_shell) { if (!xdg_shell) {
wlr_log(WLR_ERROR, "Unable to create the XDG shell interface"); wlr_log(WLR_ERROR, "Unable to create the XDG shell interface");
ret = 1; ret = 1;

View file

@ -227,6 +227,8 @@ handle_xdg_toplevel_commit(struct wl_listener *listener, void *data)
return; return;
} }
wlr_xdg_toplevel_set_wm_capabilities(xdg_shell_view->xdg_toplevel, XDG_TOPLEVEL_WM_CAPABILITIES_FULLSCREEN);
/* When an xdg_surface performs an initial commit, the compositor must /* When an xdg_surface performs an initial commit, the compositor must
* reply with a configure so the client can map the surface. */ * reply with a configure so the client can map the surface. */
view_position(&xdg_shell_view->view); view_position(&xdg_shell_view->view);
@ -293,6 +295,7 @@ popup_handle_destroy(struct wl_listener *listener, void *data)
struct cg_xdg_popup *popup = wl_container_of(listener, popup, destroy); struct cg_xdg_popup *popup = wl_container_of(listener, popup, destroy);
wl_list_remove(&popup->destroy.link); wl_list_remove(&popup->destroy.link);
wl_list_remove(&popup->commit.link); wl_list_remove(&popup->commit.link);
wl_list_remove(&popup->reposition.link);
free(popup); free(popup);
} }
@ -306,6 +309,14 @@ popup_handle_commit(struct wl_listener *listener, void *data)
} }
} }
static void
popup_handle_reposition(struct wl_listener *listener, void *data)
{
struct cg_xdg_popup *popup = wl_container_of(listener, popup, reposition);
popup_unconstrain(popup->xdg_popup);
}
void void
handle_new_xdg_popup(struct wl_listener *listener, void *data) handle_new_xdg_popup(struct wl_listener *listener, void *data)
{ {
@ -350,6 +361,9 @@ handle_new_xdg_popup(struct wl_listener *listener, void *data)
popup->commit.notify = popup_handle_commit; popup->commit.notify = popup_handle_commit;
wl_signal_add(&wlr_popup->base->surface->events.commit, &popup->commit); wl_signal_add(&wlr_popup->base->surface->events.commit, &popup->commit);
popup->reposition.notify = popup_handle_reposition;
wl_signal_add(&wlr_popup->events.reposition, &popup->reposition);
struct wlr_scene_tree *popup_scene_tree = wlr_scene_xdg_surface_create(parent_scene_tree, wlr_popup->base); struct wlr_scene_tree *popup_scene_tree = wlr_scene_xdg_surface_create(parent_scene_tree, wlr_popup->base);
if (popup_scene_tree == NULL) { if (popup_scene_tree == NULL) {
wlr_log(WLR_ERROR, "Failed to allocate scene-graph node for XDG popup"); wlr_log(WLR_ERROR, "Failed to allocate scene-graph node for XDG popup");

View file

@ -31,6 +31,7 @@ struct cg_xdg_popup {
struct wl_listener destroy; struct wl_listener destroy;
struct wl_listener commit; struct wl_listener commit;
struct wl_listener reposition;
}; };
void handle_new_xdg_toplevel(struct wl_listener *listener, void *data); void handle_new_xdg_toplevel(struct wl_listener *listener, void *data);