diff --git a/include/common/scaled_font_buffer.h b/include/common/scaled_font_buffer.h index dbce8fff..fb5e925d 100644 --- a/include/common/scaled_font_buffer.h +++ b/include/common/scaled_font_buffer.h @@ -2,7 +2,8 @@ #ifndef __LAB_COMMON_SCALED_FONT_BUFFER_H #define __LAB_COMMON_SCALED_FONT_BUFFER_H -struct font; +#include "common/font.h" + struct wlr_scene_tree; struct wlr_scene_buffer; struct scaled_scene_buffere; diff --git a/include/labwc.h b/include/labwc.h index f5bf4134..788bfa0e 100644 --- a/include/labwc.h +++ b/include/labwc.h @@ -316,110 +316,6 @@ struct output { #undef LAB_NR_LAYERS -enum view_type { - LAB_XDG_SHELL_VIEW, -#if HAVE_XWAYLAND - LAB_XWAYLAND_VIEW, -#endif -}; - -struct view_impl { - void (*configure)(struct view *view, struct wlr_box geo); - void (*close)(struct view *view); - const char *(*get_string_prop)(struct view *view, const char *prop); - void (*map)(struct view *view); - void (*move)(struct view *view, int x, int y); - void (*set_activated)(struct view *view, bool activated); - void (*set_fullscreen)(struct view *view, bool fullscreen); - void (*unmap)(struct view *view); - void (*maximize)(struct view *view, bool maximize); -}; - -struct border { - int top; - int right; - int bottom; - int left; -}; - -struct view { - struct server *server; - enum view_type type; - const struct view_impl *impl; - struct wl_list link; - struct output *output; - struct workspace *workspace; - - union { - struct wlr_xdg_surface *xdg_surface; -#if HAVE_XWAYLAND - struct wlr_xwayland_surface *xwayland_surface; -#endif - }; - struct wlr_surface *surface; - struct wlr_scene_tree *scene_tree; - struct wlr_scene_node *scene_node; - - bool mapped; - bool been_mapped; - bool minimized; - bool maximized; - uint32_t tiled; /* private, enum view_edge in src/view.c */ - struct wlr_output *fullscreen; - - /* geometry of the wlr_surface contained within the view */ - int x, y, w, h; - - /* user defined geometry before maximize / tiling / fullscreen */ - struct wlr_box natural_geometry; - - /* - * margin refers to the space between the extremities of the - * wlr_surface and the max extents of the server-side decorations. - * For xdg-shell views with CSD, this margin is zero. - */ - struct border margin; - - struct view_pending_move_resize { - bool update_x, update_y; - int x, y; - uint32_t width, height; - uint32_t configure_serial; - } pending_move_resize; - - struct ssd ssd; - - struct wlr_foreign_toplevel_handle_v1 *toplevel_handle; - struct wl_listener toplevel_handle_request_maximize; - struct wl_listener toplevel_handle_request_minimize; - struct wl_listener toplevel_handle_request_fullscreen; - struct wl_listener toplevel_handle_request_activate; - struct wl_listener toplevel_handle_request_close; - - struct wl_listener map; - struct wl_listener unmap; - struct wl_listener destroy; - struct wl_listener surface_destroy; - struct wl_listener commit; - struct wl_listener request_move; - struct wl_listener request_resize; - struct wl_listener request_configure; /* xwayland only */ - struct wl_listener request_activate; - struct wl_listener request_minimize; - struct wl_listener request_maximize; - struct wl_listener request_fullscreen; - struct wl_listener set_title; - struct wl_listener set_app_id; /* class on xwayland */ - struct wl_listener set_decorations; /* xwayland only */ - struct wl_listener override_redirect; /* xwayland only */ - struct wl_listener new_popup; /* xdg-shell only */ - - /* Not (yet) implemented */ -/* struct wl_listener set_role; */ -/* struct wl_listener set_window_type; */ -/* struct wl_listener set_hints; */ -}; - #if HAVE_XWAYLAND struct xwayland_unmanaged { struct server *server; @@ -463,50 +359,6 @@ struct xwayland_unmanaged *xwayland_unmanaged_create(struct server *server, void unmanaged_handle_map(struct wl_listener *listener, void *data); #endif -void view_set_activated(struct view *view); -void view_close(struct view *view); - -/** - * view_move_resize - resize and move view - * @view: view to be resized and moved - * @geo: the new geometry - * NOTE: Only use this when the view actually changes width and/or height - * otherwise the serials might cause a delay in moving xdg-shell clients. - * For move only, use view_move() - */ -void view_move_resize(struct view *view, struct wlr_box geo); -void view_move(struct view *view, int x, int y); -void view_moved(struct view *view); -void view_minimize(struct view *view, bool minimized); -/* view_wlr_output - return the output that a view is mostly on */ -struct wlr_output *view_wlr_output(struct view *view); -void view_store_natural_geometry(struct view *view); -void view_center(struct view *view); -void view_restore_to(struct view *view, struct wlr_box geometry); -void view_maximize(struct view *view, bool maximize, - bool store_natural_geometry); -void view_set_fullscreen(struct view *view, bool fullscreen, - struct wlr_output *wlr_output); -void view_toggle_maximize(struct view *view); -void view_toggle_decorations(struct view *view); -void view_toggle_always_on_top(struct view *view); -void view_set_decorations(struct view *view, bool decorations); -void view_toggle_fullscreen(struct view *view); -void view_adjust_for_layout_change(struct view *view); -void view_discover_output(struct view *view); -void view_move_to_edge(struct view *view, const char *direction); -void view_snap_to_edge(struct view *view, const char *direction, - bool store_natural_geometry); -const char *view_get_string_prop(struct view *view, const char *prop); -void view_update_title(struct view *view); -void view_update_app_id(struct view *view); - -void view_impl_map(struct view *view); -void view_adjust_size(struct view *view, int *w, int *h); - -void view_on_output_destroy(struct view *view); -void view_destroy(struct view *view); - void foreign_toplevel_handle_create(struct view *view); /* diff --git a/include/ssd.h b/include/ssd.h index 12797cc5..e412ea80 100644 --- a/include/ssd.h +++ b/include/ssd.h @@ -55,6 +55,13 @@ struct wlr_box; struct wlr_scene_tree; struct scaled_font_buffer; +struct border { + int top; + int right; + int bottom; + int left; +}; + struct ssd_button { struct view *view; enum ssd_part_type type; diff --git a/include/view.h b/include/view.h new file mode 100644 index 00000000..0df97d40 --- /dev/null +++ b/include/view.h @@ -0,0 +1,153 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __LABWC_VIEW_H +#define __LABWC_VIEW_H + +#include "config.h" +#include +#include +#include +#include +#include "ssd.h" + +enum view_type { + LAB_XDG_SHELL_VIEW, +#if HAVE_XWAYLAND + LAB_XWAYLAND_VIEW, +#endif +}; + +struct view_impl { + void (*configure)(struct view *view, struct wlr_box geo); + void (*close)(struct view *view); + const char *(*get_string_prop)(struct view *view, const char *prop); + void (*map)(struct view *view); + void (*move)(struct view *view, int x, int y); + void (*set_activated)(struct view *view, bool activated); + void (*set_fullscreen)(struct view *view, bool fullscreen); + void (*unmap)(struct view *view); + void (*maximize)(struct view *view, bool maximize); +}; + +struct view { + struct server *server; + enum view_type type; + const struct view_impl *impl; + struct wl_list link; + struct output *output; + struct workspace *workspace; + + union { + struct wlr_xdg_surface *xdg_surface; +#if HAVE_XWAYLAND + struct wlr_xwayland_surface *xwayland_surface; +#endif + }; + struct wlr_surface *surface; + struct wlr_scene_tree *scene_tree; + struct wlr_scene_node *scene_node; + + bool mapped; + bool been_mapped; + bool minimized; + bool maximized; + uint32_t tiled; /* private, enum view_edge in src/view.c */ + struct wlr_output *fullscreen; + + /* geometry of the wlr_surface contained within the view */ + int x, y, w, h; + + /* user defined geometry before maximize / tiling / fullscreen */ + struct wlr_box natural_geometry; + + /* + * margin refers to the space between the extremities of the + * wlr_surface and the max extents of the server-side decorations. + * For xdg-shell views with CSD, this margin is zero. + */ + struct border margin; + + struct view_pending_move_resize { + bool update_x, update_y; + int x, y; + uint32_t width, height; + uint32_t configure_serial; + } pending_move_resize; + + struct ssd ssd; + + struct wlr_foreign_toplevel_handle_v1 *toplevel_handle; + struct wl_listener toplevel_handle_request_maximize; + struct wl_listener toplevel_handle_request_minimize; + struct wl_listener toplevel_handle_request_fullscreen; + struct wl_listener toplevel_handle_request_activate; + struct wl_listener toplevel_handle_request_close; + + struct wl_listener map; + struct wl_listener unmap; + struct wl_listener destroy; + struct wl_listener surface_destroy; + struct wl_listener commit; + struct wl_listener request_move; + struct wl_listener request_resize; + struct wl_listener request_configure; /* xwayland only */ + struct wl_listener request_activate; + struct wl_listener request_minimize; + struct wl_listener request_maximize; + struct wl_listener request_fullscreen; + struct wl_listener set_title; + struct wl_listener set_app_id; /* class on xwayland */ + struct wl_listener set_decorations; /* xwayland only */ + struct wl_listener override_redirect; /* xwayland only */ + struct wl_listener new_popup; /* xdg-shell only */ + + /* Not (yet) implemented */ +/* struct wl_listener set_role; */ +/* struct wl_listener set_window_type; */ +/* struct wl_listener set_hints; */ +}; + +void view_set_activated(struct view *view); +void view_close(struct view *view); + +/** + * view_move_resize - resize and move view + * @view: view to be resized and moved + * @geo: the new geometry + * NOTE: Only use this when the view actually changes width and/or height + * otherwise the serials might cause a delay in moving xdg-shell clients. + * For move only, use view_move() + */ +void view_move_resize(struct view *view, struct wlr_box geo); +void view_move(struct view *view, int x, int y); +void view_moved(struct view *view); +void view_minimize(struct view *view, bool minimized); +/* view_wlr_output - return the output that a view is mostly on */ +struct wlr_output *view_wlr_output(struct view *view); +void view_store_natural_geometry(struct view *view); +void view_center(struct view *view); +void view_restore_to(struct view *view, struct wlr_box geometry); +void view_maximize(struct view *view, bool maximize, + bool store_natural_geometry); +void view_set_fullscreen(struct view *view, bool fullscreen, + struct wlr_output *wlr_output); +void view_toggle_maximize(struct view *view); +void view_toggle_decorations(struct view *view); +void view_toggle_always_on_top(struct view *view); +void view_set_decorations(struct view *view, bool decorations); +void view_toggle_fullscreen(struct view *view); +void view_adjust_for_layout_change(struct view *view); +void view_discover_output(struct view *view); +void view_move_to_edge(struct view *view, const char *direction); +void view_snap_to_edge(struct view *view, const char *direction, + bool store_natural_geometry); +const char *view_get_string_prop(struct view *view, const char *prop); +void view_update_title(struct view *view); +void view_update_app_id(struct view *view); + +void view_impl_map(struct view *view); +void view_adjust_size(struct view *view, int *w, int *h); + +void view_on_output_destroy(struct view *view); +void view_destroy(struct view *view); + +#endif /* __LABWC_VIEW_H */ diff --git a/src/action.c b/src/action.c index e1d8778d..dc5a73c2 100644 --- a/src/action.c +++ b/src/action.c @@ -14,6 +14,7 @@ #include "menu/menu.h" #include "private/action.h" #include "ssd.h" +#include "view.h" #include "workspaces.h" enum action_type { diff --git a/src/cursor.c b/src/cursor.c index b81583c9..a2f324d2 100644 --- a/src/cursor.c +++ b/src/cursor.c @@ -14,6 +14,7 @@ #include "menu/menu.h" #include "resistance.h" #include "ssd.h" +#include "view.h" static const char * const *cursor_names = NULL; diff --git a/src/debug.c b/src/debug.c index 815748d1..135390d4 100644 --- a/src/debug.c +++ b/src/debug.c @@ -1,10 +1,10 @@ // SPDX-License-Identifier: GPL-2.0-only #include #include -#include "buffer.h" +#include "common/scene-helpers.h" #include "labwc.h" #include "node.h" -#include "common/scene-helpers.h" +#include "view.h" #define HEADER_CHARS "------------------------------" diff --git a/src/desktop.c b/src/desktop.c index 52054fbd..dde5e2c3 100644 --- a/src/desktop.c +++ b/src/desktop.c @@ -5,9 +5,9 @@ #include "common/scene-helpers.h" #include "dnd.h" #include "labwc.h" -#include "layers.h" #include "node.h" #include "ssd.h" +#include "view.h" #include "workspaces.h" static void diff --git a/src/foreign.c b/src/foreign.c index 915520b6..09e3d982 100644 --- a/src/foreign.c +++ b/src/foreign.c @@ -1,5 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only #include "labwc.h" +#include "view.h" #include "workspaces.h" static void diff --git a/src/interactive.c b/src/interactive.c index 2691cccd..dcfe061a 100644 --- a/src/interactive.c +++ b/src/interactive.c @@ -1,5 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only #include "labwc.h" +#include "view.h" static int max_move_scale(double pos_cursor, double pos_current, diff --git a/src/osd.c b/src/osd.c index a91ec000..d92afac3 100644 --- a/src/osd.c +++ b/src/osd.c @@ -14,6 +14,7 @@ #include "labwc.h" #include "theme.h" #include "node.h" +#include "view.h" #include "workspaces.h" #define OSD_ITEM_HEIGHT (20) diff --git a/src/output.c b/src/output.c index 0e9d898b..0fb94512 100644 --- a/src/output.c +++ b/src/output.c @@ -19,6 +19,7 @@ #include "labwc.h" #include "layers.h" #include "node.h" +#include "view.h" static void output_frame_notify(struct wl_listener *listener, void *data) diff --git a/src/resistance.c b/src/resistance.c index 96d4908e..55a9713f 100644 --- a/src/resistance.c +++ b/src/resistance.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-only -#include "labwc.h" #include "config/rcxml.h" +#include "labwc.h" +#include "view.h" struct edges { int left; diff --git a/src/server.c b/src/server.c index f6a12249..8b412341 100644 --- a/src/server.c +++ b/src/server.c @@ -18,6 +18,7 @@ #include "menu/menu.h" #include "ssd.h" #include "theme.h" +#include "view.h" #include "workspaces.h" #define LAB_XDG_SHELL_VERSION (2) diff --git a/src/ssd/ssd.c b/src/ssd/ssd.c index f556b24d..a1706a58 100644 --- a/src/ssd/ssd.c +++ b/src/ssd/ssd.c @@ -7,12 +7,11 @@ */ #include -#include "config/rcxml.h" -#include "common/font.h" -#include "labwc.h" -#include "theme.h" -#include "ssd.h" #include "common/scene-helpers.h" +#include "labwc.h" +#include "ssd.h" +#include "theme.h" +#include "view.h" struct border ssd_thickness(struct view *view) diff --git a/src/ssd/ssd_border.c b/src/ssd/ssd_border.c index 719012c2..e39f3e5f 100644 --- a/src/ssd/ssd_border.c +++ b/src/ssd/ssd_border.c @@ -1,9 +1,10 @@ // SPDX-License-Identifier: GPL-2.0-only +#include "common/scene-helpers.h" #include "labwc.h" #include "ssd.h" #include "theme.h" -#include "common/scene-helpers.h" +#include "view.h" #define FOR_EACH_STATE(view, tmp) FOR_EACH(tmp, \ &(view)->ssd.border.active, \ diff --git a/src/ssd/ssd_extents.c b/src/ssd/ssd_extents.c index a6005638..027086de 100644 --- a/src/ssd/ssd_extents.c +++ b/src/ssd/ssd_extents.c @@ -1,10 +1,11 @@ // SPDX-License-Identifier: GPL-2.0-only +#include "common/mem.h" +#include "common/scene-helpers.h" #include "labwc.h" #include "ssd.h" #include "theme.h" -#include "common/mem.h" -#include "common/scene-helpers.h" +#include "view.h" static struct ssd_part * add_extent(struct wl_list *part_list, enum ssd_part_type type, diff --git a/src/ssd/ssd_titlebar.c b/src/ssd/ssd_titlebar.c index 945c2844..fd7d820d 100644 --- a/src/ssd/ssd_titlebar.c +++ b/src/ssd/ssd_titlebar.c @@ -3,14 +3,14 @@ #define _POSIX_C_SOURCE 200809L #include #include -#include "labwc.h" -#include "ssd.h" -#include "theme.h" -#include "common/font.h" #include "common/mem.h" #include "common/scaled_font_buffer.h" #include "common/scene-helpers.h" +#include "labwc.h" #include "node.h" +#include "ssd.h" +#include "theme.h" +#include "view.h" #define FOR_EACH_STATE(view, tmp) FOR_EACH(tmp, \ &(view)->ssd.titlebar.active, \ diff --git a/src/view-impl.c b/src/view-impl.c index ff8f9e3f..5402a388 100644 --- a/src/view-impl.c +++ b/src/view-impl.c @@ -3,6 +3,7 @@ #include #include #include "labwc.h" +#include "view.h" void view_impl_map(struct view *view) diff --git a/src/view.c b/src/view.c index 61408b0e..526c6dfd 100644 --- a/src/view.c +++ b/src/view.c @@ -7,6 +7,7 @@ #include "labwc.h" #include "ssd.h" #include "menu/menu.h" +#include "view.h" #include "workspaces.h" #define LAB_FALLBACK_WIDTH 640 diff --git a/src/workspaces.c b/src/workspaces.c index 3d6a0b51..54d5ee4f 100644 --- a/src/workspaces.c +++ b/src/workspaces.c @@ -12,6 +12,7 @@ #include "common/list.h" #include "common/mem.h" #include "labwc.h" +#include "view.h" #include "workspaces.h" /* Internal helpers */ diff --git a/src/xdg-deco.c b/src/xdg-deco.c index 9f4efcb1..0b96583e 100644 --- a/src/xdg-deco.c +++ b/src/xdg-deco.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-only #include "common/mem.h" #include "labwc.h" +#include "view.h" struct xdg_deco { struct wlr_xdg_toplevel_decoration_v1 *wlr_decoration; diff --git a/src/xdg-popup.c b/src/xdg-popup.c index 35e49316..ab2c5423 100644 --- a/src/xdg-popup.c +++ b/src/xdg-popup.c @@ -10,6 +10,7 @@ #include "common/mem.h" #include "labwc.h" #include "node.h" +#include "view.h" struct xdg_popup { struct view *parent_view; diff --git a/src/xdg.c b/src/xdg.c index f3e28d3e..f09de3b2 100644 --- a/src/xdg.c +++ b/src/xdg.c @@ -4,6 +4,7 @@ #include "labwc.h" #include "node.h" #include "ssd.h" +#include "view.h" #include "workspaces.h" static void diff --git a/src/xwayland.c b/src/xwayland.c index 8bfa31a8..1aebd01f 100644 --- a/src/xwayland.c +++ b/src/xwayland.c @@ -4,6 +4,7 @@ #include "labwc.h" #include "node.h" #include "ssd.h" +#include "view.h" #include "workspaces.h" static void