--- /dev/null
+#include "labwc.h"
+
+struct xdg_deco {
+ struct wlr_xdg_toplevel_decoration_v1 *wlr_decoration;
+ struct server *server;
+ struct wl_listener destroy;
+ struct wl_listener request_mode;
+};
+
+static void
+xdg_deco_destroy(struct wl_listener *listener, void *data)
+{
+ struct xdg_deco *xdg_deco =
+ wl_container_of(listener, xdg_deco, destroy);
+ wl_list_remove(&xdg_deco->destroy.link);
+ wl_list_remove(&xdg_deco->request_mode.link);
+ free(xdg_deco);
+}
+
+static void
+xdg_deco_request_mode(struct wl_listener *listener, void *data)
+{
+ struct xdg_deco *xdg_deco;
+ xdg_deco = wl_container_of(listener, xdg_deco, request_mode);
+ enum wlr_xdg_toplevel_decoration_v1_mode mode;
+ if (rc.xdg_shell_server_side_deco) {
+ mode = WLR_XDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE;
+ } else {
+ mode = WLR_XDG_TOPLEVEL_DECORATION_V1_MODE_CLIENT_SIDE;
+ }
+ wlr_xdg_toplevel_decoration_v1_set_mode(xdg_deco->wlr_decoration, mode);
+}
+
+void
+xdg_toplevel_decoration(struct wl_listener *listener, void *data)
+{
+ struct server *server =
+ wl_container_of(listener, server, xdg_toplevel_decoration);
+ struct wlr_xdg_toplevel_decoration_v1 *wlr_decoration = data;
+ struct xdg_deco *xdg_deco = calloc(1, sizeof(struct xdg_deco));
+ if (!xdg_deco) {
+ return;
+ }
+ xdg_deco->wlr_decoration = wlr_decoration;
+ xdg_deco->server = server;
+ xdg_deco->destroy.notify = xdg_deco_destroy;
+ wl_signal_add(&wlr_decoration->events.destroy, &xdg_deco->destroy);
+ xdg_deco->request_mode.notify = xdg_deco_request_mode;
+ wl_signal_add(&wlr_decoration->events.request_mode,
+ &xdg_deco->request_mode);
+ xdg_deco_request_mode(&xdg_deco->request_mode, wlr_decoration);
+}
#include <assert.h>
#include "labwc.h"
-struct xdg_deco {
- struct wlr_xdg_toplevel_decoration_v1 *wlr_decoration;
- struct server *server;
- struct wl_listener destroy;
- struct wl_listener request_mode;
-};
-
-static void
-xdg_deco_destroy(struct wl_listener *listener, void *data)
-{
- struct xdg_deco *xdg_deco =
- wl_container_of(listener, xdg_deco, destroy);
- wl_list_remove(&xdg_deco->destroy.link);
- wl_list_remove(&xdg_deco->request_mode.link);
- free(xdg_deco);
-}
-
-static void
-xdg_deco_request_mode(struct wl_listener *listener, void *data)
-{
- struct xdg_deco *xdg_deco;
- xdg_deco = wl_container_of(listener, xdg_deco, request_mode);
- enum wlr_xdg_toplevel_decoration_v1_mode mode;
- if (rc.xdg_shell_server_side_deco) {
- mode = WLR_XDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE;
- } else {
- mode = WLR_XDG_TOPLEVEL_DECORATION_V1_MODE_CLIENT_SIDE;
- }
- wlr_xdg_toplevel_decoration_v1_set_mode(xdg_deco->wlr_decoration, mode);
-}
-
-void
-xdg_toplevel_decoration(struct wl_listener *listener, void *data)
-{
- struct server *server =
- wl_container_of(listener, server, xdg_toplevel_decoration);
- struct wlr_xdg_toplevel_decoration_v1 *wlr_decoration = data;
- struct xdg_deco *xdg_deco = calloc(1, sizeof(struct xdg_deco));
- if (!xdg_deco) {
- return;
- }
- xdg_deco->wlr_decoration = wlr_decoration;
- xdg_deco->server = server;
- xdg_deco->destroy.notify = xdg_deco_destroy;
- wl_signal_add(&wlr_decoration->events.destroy, &xdg_deco->destroy);
- xdg_deco->request_mode.notify = xdg_deco_request_mode;
- wl_signal_add(&wlr_decoration->events.request_mode,
- &xdg_deco->request_mode);
- xdg_deco_request_mode(&xdg_deco->request_mode, wlr_decoration);
-}
-
-/* This is merely needed to track damage */
+/*
+ * xdg_popup_create() and subsurface_create() are only called for the
+ * purposes of tracking damage.
+ */
static void
handle_new_xdg_popup(struct wl_listener *listener, void *data)
{
/*
* Some XDG shells refuse to disable CSD in which case their
- * geometry.{x,y} seems to be greater. We filter on that on the
- * assumption that this will remain true.
+ * geometry.{x,y} seems to be greater than zero. We filter on that
+ * on the assumption that this will remain true.
*/
if (view->xdg_surface->geometry.x || view->xdg_surface->geometry.y) {
return false;