aboutsummaryrefslogtreecommitdiff
path: root/include/rootston/view.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/rootston/view.h')
-rw-r--r--include/rootston/view.h183
1 files changed, 90 insertions, 93 deletions
diff --git a/include/rootston/view.h b/include/rootston/view.h
index ce8f4268..f8a969c4 100644
--- a/include/rootston/view.h
+++ b/include/rootston/view.h
@@ -9,8 +9,77 @@
#include <wlr/types/wlr_xdg_shell_v6.h>
#include <wlr/types/wlr_xdg_shell.h>
+struct roots_view;
+
+struct roots_view_interface {
+ void (*activate)(struct roots_view *view, bool active);
+ void (*move)(struct roots_view *view, double x, double y);
+ void (*resize)(struct roots_view *view, uint32_t width, uint32_t height);
+ void (*move_resize)(struct roots_view *view, double x, double y,
+ uint32_t width, uint32_t height);
+ void (*maximize)(struct roots_view *view, bool maximized);
+ void (*set_fullscreen)(struct roots_view *view, bool fullscreen);
+ void (*close)(struct roots_view *view);
+ void (*destroy)(struct roots_view *view);
+};
+
+enum roots_view_type {
+ ROOTS_WL_SHELL_VIEW,
+ ROOTS_XDG_SHELL_V6_VIEW,
+ ROOTS_XDG_SHELL_VIEW,
+#if WLR_HAS_XWAYLAND
+ ROOTS_XWAYLAND_VIEW,
+#endif
+};
+
+struct roots_view {
+ enum roots_view_type type;
+ const struct roots_view_interface *impl;
+ struct roots_desktop *desktop;
+ struct wl_list link; // roots_desktop::views
+
+ struct wlr_box box;
+ float rotation;
+ float alpha;
+
+ bool decorated;
+ int border_width;
+ int titlebar_height;
+
+ bool maximized;
+ struct roots_output *fullscreen_output;
+ struct {
+ double x, y;
+ uint32_t width, height;
+ float rotation;
+ } saved;
+
+ struct {
+ bool update_x, update_y;
+ double x, y;
+ uint32_t width, height;
+ } pending_move_resize;
+
+ struct wlr_surface *wlr_surface;
+ struct wl_list children; // roots_view_child::link
+
+ struct wlr_foreign_toplevel_handle_v1 *toplevel_handle;
+ struct wl_listener toplevel_handle_request_maximize;
+ struct wl_listener toplevel_handle_request_activate;
+ struct wl_listener toplevel_handle_request_close;
+
+ struct wl_listener new_subsurface;
+
+ struct {
+ struct wl_signal unmap;
+ struct wl_signal destroy;
+ } events;
+};
+
struct roots_wl_shell_surface {
- struct roots_view *view;
+ struct roots_view view;
+
+ struct wlr_wl_shell_surface *wl_shell_surface;
struct wl_listener destroy;
struct wl_listener new_popup;
@@ -26,7 +95,9 @@ struct roots_wl_shell_surface {
};
struct roots_xdg_surface_v6 {
- struct roots_view *view;
+ struct roots_view view;
+
+ struct wlr_xdg_surface_v6 *xdg_surface_v6;
struct wl_listener destroy;
struct wl_listener new_popup;
@@ -47,7 +118,9 @@ struct roots_xdg_surface_v6 {
struct roots_xdg_toplevel_decoration;
struct roots_xdg_surface {
- struct roots_view *view;
+ struct roots_view view;
+
+ struct wlr_xdg_surface *xdg_surface;
struct wl_listener destroy;
struct wl_listener new_popup;
@@ -60,7 +133,6 @@ struct roots_xdg_surface {
struct wl_listener set_title;
struct wl_listener set_app_id;
-
struct wl_listener surface_commit;
uint32_t pending_move_resize_configure_serial;
@@ -68,8 +140,11 @@ struct roots_xdg_surface {
struct roots_xdg_toplevel_decoration *xdg_toplevel_decoration;
};
+#if WLR_HAS_XWAYLAND
struct roots_xwayland_surface {
- struct roots_view *view;
+ struct roots_view view;
+
+ struct wlr_xwayland_surface *xwayland_surface;
struct wl_listener destroy;
struct wl_listener request_configure;
@@ -84,91 +159,7 @@ struct roots_xwayland_surface {
struct wl_listener surface_commit;
};
-
-enum roots_view_type {
- ROOTS_WL_SHELL_VIEW,
- ROOTS_XDG_SHELL_V6_VIEW,
- ROOTS_XDG_SHELL_VIEW,
-#if WLR_HAS_XWAYLAND
- ROOTS_XWAYLAND_VIEW,
#endif
-};
-
-struct roots_view;
-
-struct roots_view_interface {
- void (*activate)(struct roots_view *view, bool active);
- void (*move)(struct roots_view *view, double x, double y);
- void (*resize)(struct roots_view *view, uint32_t width, uint32_t height);
- void (*move_resize)(struct roots_view *view, double x, double y,
- uint32_t width, uint32_t height);
- void (*maximize)(struct roots_view *view, bool maximized);
- void (*set_fullscreen)(struct roots_view *view, bool fullscreen);
- void (*close)(struct roots_view *view);
- void (*destroy)(struct roots_view *view);
-};
-
-struct roots_view {
- const struct roots_view_interface *impl;
- struct roots_desktop *desktop;
- struct wl_list link; // roots_desktop::views
-
- struct wlr_box box;
- float rotation;
- float alpha;
-
- bool decorated;
- int border_width;
- int titlebar_height;
-
- bool maximized;
- struct roots_output *fullscreen_output;
- struct {
- double x, y;
- uint32_t width, height;
- float rotation;
- } saved;
-
- struct {
- bool update_x, update_y;
- double x, y;
- uint32_t width, height;
- } pending_move_resize;
-
- // TODO: Something for roots-enforced width/height
- enum roots_view_type type;
- union {
- struct wlr_wl_shell_surface *wl_shell_surface;
- struct wlr_xdg_surface_v6 *xdg_surface_v6;
- struct wlr_xdg_surface *xdg_surface;
-#if WLR_HAS_XWAYLAND
- struct wlr_xwayland_surface *xwayland_surface;
-#endif
- };
- union {
- struct roots_wl_shell_surface *roots_wl_shell_surface;
- struct roots_xdg_surface_v6 *roots_xdg_surface_v6;
- struct roots_xdg_surface *roots_xdg_surface;
-#if WLR_HAS_XWAYLAND
- struct roots_xwayland_surface *roots_xwayland_surface;
-#endif
- };
-
- struct wlr_surface *wlr_surface;
- struct wl_list children; // roots_view_child::link
-
- struct wlr_foreign_toplevel_handle_v1 *toplevel_handle;
- struct wl_listener toplevel_handle_request_maximize;
- struct wl_listener toplevel_handle_request_activate;
- struct wl_listener toplevel_handle_request_close;
-
- struct wl_listener new_subsurface;
-
- struct {
- struct wl_signal unmap;
- struct wl_signal destroy;
- } events;
-};
struct roots_view_child;
@@ -228,8 +219,8 @@ struct roots_xdg_toplevel_decoration {
struct wl_listener surface_commit;
};
-struct roots_view *view_create(struct roots_desktop *desktop,
- const struct roots_view_interface *impl);
+void view_init(struct roots_view *view, const struct roots_view_interface *impl,
+ enum roots_view_type type, struct roots_desktop *desktop);
void view_destroy(struct roots_view *view);
void view_activate(struct roots_view *view, bool activate);
void view_apply_damage(struct roots_view *view);
@@ -256,13 +247,19 @@ void view_close(struct roots_view *view);
bool view_center(struct roots_view *view);
void view_setup(struct roots_view *view);
void view_teardown(struct roots_view *view);
-
void view_set_title(struct roots_view *view, const char *title);
void view_set_app_id(struct roots_view *view, const char *app_id);
void view_create_foreign_toplevel_handle(struct roots_view *view);
-
void view_get_deco_box(const struct roots_view *view, struct wlr_box *box);
+struct roots_wl_shell_surface *roots_wl_shell_surface_from_view(
+ struct roots_view *view);
+struct roots_xdg_surface *roots_xdg_surface_from_view(struct roots_view *view);
+struct roots_xdg_surface_v6 *roots_xdg_surface_v6_from_view(
+ struct roots_view *view);
+struct roots_xwayland_surface *roots_xwayland_surface_from_view(
+ struct roots_view *view);
+
enum roots_deco_part {
ROOTS_DECO_PART_NONE = 0,
ROOTS_DECO_PART_TOP_BORDER = (1 << 0),