struct view_impl {
void (*configure)(struct view *view, struct wlr_box geo);
void (*close)(struct view *view);
- void (*map)(struct view *view);
void (*set_activated)(struct view *view, bool activated);
void (*set_fullscreen)(struct view *view, bool fullscreen);
void (*notify_tiled)(struct view *view);
- void (*unmap)(struct view *view);
void (*maximize)(struct view *view, enum view_axis maximized);
void (*minimize)(struct view *view, bool minimize);
struct view *(*get_parent)(struct view *self);
void view_evacuate_region(struct view *view);
void view_on_output_destroy(struct view *view);
-void view_connect_map(struct view *view, struct wlr_surface *surface);
void view_update_visibility(struct view *view);
void view_init(struct view *view);
mappable->connected = false;
}
-static void
-handle_map(struct wl_listener *listener, void *data)
-{
- struct view *view = wl_container_of(listener, view, mappable.map);
- view->impl->map(view);
-}
-
-static void
-handle_unmap(struct wl_listener *listener, void *data)
-{
- struct view *view = wl_container_of(listener, view, mappable.unmap);
- view->impl->unmap(view);
-}
-
-void
-view_connect_map(struct view *view, struct wlr_surface *surface)
-{
- assert(view);
- mappable_connect(&view->mappable, surface, handle_map, handle_unmap);
-}
-
/* Used in both (un)map and (un)minimize */
void
view_update_visibility(struct view *view)
}
static void
-xdg_toplevel_view_map(struct view *view)
+handle_map(struct wl_listener *listener, void *data)
{
+ struct view *view = wl_container_of(listener, view, mappable.map);
if (view->mapped) {
return;
}
}
static void
-xdg_toplevel_view_unmap(struct view *view)
+handle_unmap(struct wl_listener *listener, void *data)
{
+ struct view *view = wl_container_of(listener, view, mappable.unmap);
if (view->mapped) {
view->mapped = false;
view_impl_unmap(view);
static const struct view_impl xdg_toplevel_view_impl = {
.configure = xdg_toplevel_view_configure,
.close = xdg_toplevel_view_close,
- .map = xdg_toplevel_view_map,
.set_activated = xdg_toplevel_view_set_activated,
.set_fullscreen = xdg_toplevel_view_set_fullscreen,
.notify_tiled = xdg_toplevel_view_notify_tiled,
- .unmap = xdg_toplevel_view_unmap,
.maximize = xdg_toplevel_view_maximize,
.minimize = xdg_toplevel_view_minimize,
.get_parent = xdg_toplevel_view_get_parent,
view->surface = xdg_surface->surface;
view->surface->data = tree;
- view_connect_map(view, xdg_surface->surface);
+ mappable_connect(&view->mappable, xdg_surface->surface,
+ handle_map, handle_unmap);
struct wlr_xdg_toplevel *toplevel = xdg_surface->toplevel;
CONNECT_SIGNAL(toplevel, view, destroy);
static xcb_atom_t atoms[ATOM_COUNT] = {0};
static void set_surface(struct view *view, struct wlr_surface *surface);
-static void xwayland_view_unmap(struct view *view);
+static void handle_map(struct wl_listener *listener, void *data);
+static void handle_unmap(struct wl_listener *listener, void *data);
static struct xwayland_view *
xwayland_view_from_view(struct view *view)
assert(xwayland_view->xwayland_surface &&
xwayland_view->xwayland_surface->surface);
- view_connect_map(&xwayland_view->base,
- xwayland_view->xwayland_surface->surface);
+ mappable_connect(&xwayland_view->base.mappable,
+ xwayland_view->xwayland_surface->surface,
+ handle_map, handle_unmap);
}
static void
struct server *server = view->server;
bool mapped = xsurface->surface && xsurface->surface->mapped;
if (mapped) {
- xwayland_view_unmap(view);
+ handle_unmap(&view->mappable.unmap, NULL);
}
handle_destroy(&view->destroy, xsurface);
/* view is invalid after this point */
}
static void
-xwayland_view_map(struct view *view)
+handle_map(struct wl_listener *listener, void *data)
{
+ struct view *view = wl_container_of(listener, view, mappable.map);
struct xwayland_view *xwayland_view = xwayland_view_from_view(view);
struct wlr_xwayland_surface *xwayland_surface =
xwayland_view->xwayland_surface;
}
static void
-xwayland_view_unmap(struct view *view)
+handle_unmap(struct wl_listener *listener, void *data)
{
+ struct view *view = wl_container_of(listener, view, mappable.unmap);
if (!view->mapped) {
return;
}
static const struct view_impl xwayland_view_impl = {
.configure = xwayland_view_configure,
.close = xwayland_view_close,
- .map = xwayland_view_map,
.set_activated = xwayland_view_set_activated,
.set_fullscreen = xwayland_view_set_fullscreen,
- .unmap = xwayland_view_unmap,
.maximize = xwayland_view_maximize,
.minimize = xwayland_view_minimize,
.get_parent = xwayland_view_get_parent,
handle_associate(&xwayland_view->associate, NULL);
}
if (mapped) {
- xwayland_view_map(view);
+ handle_map(&xwayland_view->base.mappable.map, NULL);
}
}