#ifndef CG_VIEW_H #define CG_VIEW_H #include #include #include #include #include #include "server.h" enum cg_view_type { CAGE_XDG_SHELL_VIEW, }; struct cg_view { struct cg_server *server; struct wl_list link; // server::views struct wlr_surface *wlr_surface; int x, y; enum cg_view_type type; union { struct wlr_xdg_surface *xdg_surface; }; struct wl_listener destroy; struct wl_listener map; // TODO: allow applications to go to fullscreen from maximized? // struct wl_listener request_fullscreen; void (*activate)(struct cg_view *view, bool activate); void (*maximize)(struct cg_view *view, int output_width, int output_height); void (*get_geometry)(struct cg_view *view, struct wlr_box *geom); bool (*is_primary)(struct cg_view *view); }; void view_activate(struct cg_view *view, bool activate); void view_maximize(struct cg_view *view); void view_center(struct cg_view *view); bool view_is_primary(struct cg_view *view); void view_map(struct cg_view *view, struct wlr_surface *surface); void view_destroy(struct cg_view *view); struct cg_view *cg_view_create(struct cg_server *server); struct cg_view *cg_view_from_wlr_surface(struct cg_server *server, struct wlr_surface *surface); #endif