void (*map)(struct view *view);
void (*set_activated)(struct view *view, bool activated);
void (*set_fullscreen)(struct view *view, bool fullscreen);
+ void (*set_tiled)(struct view *view);
/*
* client_request is true if the client unmapped its own
* surface; false if we are just minimizing the view. The two
view->tiled = VIEW_EDGE_INVALID;
view->tiled_region = NULL;
zfree(view->tiled_region_evacuate);
+
+ if (view->impl->set_tiled) {
+ view->impl->set_tiled(view);
+ }
}
void
view_set_untiled(view);
view_set_output(view, output);
view->tiled = edge;
+
+ if (view->impl->set_tiled) {
+ view->impl->set_tiled(view);
+ }
+
view_apply_tiled_geometry(view);
}
}
view_set_untiled(view);
view->tiled_region = region;
+
+ if (view->impl->set_tiled) {
+ view->impl->set_tiled(view);
+ }
+
view_apply_region_geometry(view);
}
fullscreen);
}
+static void
+xdg_toplevel_view_set_tiled(struct view *view)
+{
+ enum wlr_edges edge;
+
+ /*
+ * Edge-snapped view are considered tiled on the snapped edge and those
+ * perpendicular to it.
+ */
+ switch (view->tiled) {
+ case VIEW_EDGE_LEFT:
+ edge = WLR_EDGE_LEFT | WLR_EDGE_TOP | WLR_EDGE_BOTTOM;
+ break;
+ case VIEW_EDGE_RIGHT:
+ edge = WLR_EDGE_RIGHT | WLR_EDGE_TOP | WLR_EDGE_BOTTOM;
+ break;
+ case VIEW_EDGE_UP:
+ edge = WLR_EDGE_TOP | WLR_EDGE_LEFT | WLR_EDGE_RIGHT;
+ break;
+ case VIEW_EDGE_DOWN:
+ edge = WLR_EDGE_BOTTOM | WLR_EDGE_LEFT | WLR_EDGE_RIGHT;
+ break;
+ default:
+ edge = WLR_EDGE_NONE;
+ }
+
+ if (view->tiled_region) {
+ /* Region-snapped views are considered tiled on all edges */
+ edge = WLR_EDGE_LEFT | WLR_EDGE_RIGHT |
+ WLR_EDGE_TOP | WLR_EDGE_BOTTOM;
+ }
+
+ wlr_xdg_toplevel_set_tiled(xdg_toplevel_from_view(view), edge);
+}
+
static struct view *
lookup_view_by_xdg_toplevel(struct server *server,
struct wlr_xdg_toplevel *xdg_toplevel)
.map = xdg_toplevel_view_map,
.set_activated = xdg_toplevel_view_set_activated,
.set_fullscreen = xdg_toplevel_view_set_fullscreen,
+ .set_tiled = xdg_toplevel_view_set_tiled,
.unmap = xdg_toplevel_view_unmap,
.maximize = xdg_toplevel_view_maximize,
.minimize = xdg_toplevel_view_minimize,