diff options
author | Drew DeVault <sir@cmpwn.com> | 2018-10-03 13:03:06 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-03 13:03:06 +0200 |
commit | 06c214a800cab9119ae4b04371e3f6bbca8a0550 (patch) | |
tree | eed325e37d02fa71858a33e71ef33961395dd16f /include/sway/tree | |
parent | f74829d390bab2eccd68923c4b8b82a873322168 (diff) | |
parent | f16529e2588f5e71d6777f4c06dfb58b29308cd0 (diff) | |
download | sway-06c214a800cab9119ae4b04371e3f6bbca8a0550.tar.xz |
Merge pull request #2703 from RyanDwyer/csd-border
Add CSD to border modes
Diffstat (limited to 'include/sway/tree')
-rw-r--r-- | include/sway/tree/container.h | 2 | ||||
-rw-r--r-- | include/sway/tree/view.h | 32 |
2 files changed, 27 insertions, 7 deletions
diff --git a/include/sway/tree/container.h b/include/sway/tree/container.h index b865a0f2..da6592b4 100644 --- a/include/sway/tree/container.h +++ b/include/sway/tree/container.h @@ -28,6 +28,7 @@ enum sway_container_border { B_NONE, B_PIXEL, B_NORMAL, + B_CSD, }; struct sway_root; @@ -63,7 +64,6 @@ struct sway_container_state { bool border_bottom; bool border_left; bool border_right; - bool using_csd; }; struct sway_container { diff --git a/include/sway/tree/view.h b/include/sway/tree/view.h index 56ccbc6c..028be536 100644 --- a/include/sway/tree/view.h +++ b/include/sway/tree/view.h @@ -11,6 +11,7 @@ #include "sway/input/seat.h" struct sway_container; +struct sway_xdg_decoration; enum sway_view_type { SWAY_VIEW_XDG_SHELL_V6, @@ -44,7 +45,6 @@ struct sway_view_impl { void (*set_tiled)(struct sway_view *view, bool tiled); void (*set_fullscreen)(struct sway_view *view, bool fullscreen); bool (*wants_floating)(struct sway_view *view); - bool (*has_client_side_decorations)(struct sway_view *view); void (*for_each_surface)(struct sway_view *view, wlr_surface_iterator_func_t iterator, void *user_data); void (*for_each_popup)(struct sway_view *view, @@ -60,6 +60,7 @@ struct sway_view { struct sway_container *container; // NULL if unmapped and transactions finished struct wlr_surface *surface; // NULL for unmapped views + struct sway_xdg_decoration *xdg_decoration; pid_t pid; @@ -75,13 +76,24 @@ struct sway_view { int natural_width, natural_height; char *title_format; + + // Our border types are B_NONE, B_PIXEL, B_NORMAL and B_CSD. We normally + // just assign this to the border property and ignore the other two. + // However, when a view using CSD is tiled, we want to render our own + // borders as well. So in this case the border property becomes one of the + // first three, and using_csd is true. + // Lastly, views can change their decoration mode at any time. When an SSD + // view becomes CSD without our approval, we save the SSD border type so it + // can be restored if/when the view returns from CSD to SSD. enum sway_container_border border; + enum sway_container_border saved_border; + bool using_csd; + int border_thickness; bool border_top; bool border_bottom; bool border_left; bool border_right; - bool using_csd; struct timespec urgent; bool allow_request_urgent; @@ -127,8 +139,6 @@ struct sway_view { struct sway_xdg_shell_v6_view { struct sway_view view; - enum wlr_server_decoration_manager_mode deco_mode; - struct wl_listener commit; struct wl_listener request_move; struct wl_listener request_resize; @@ -145,8 +155,6 @@ struct sway_xdg_shell_v6_view { struct sway_xdg_shell_view { struct sway_view view; - enum wlr_server_decoration_manager_mode deco_mode; - struct wl_listener commit; struct wl_listener request_move; struct wl_listener request_resize; @@ -175,6 +183,7 @@ struct sway_xwayland_view { struct wl_listener set_role; struct wl_listener set_window_type; struct wl_listener set_hints; + struct wl_listener set_decorations; struct wl_listener map; struct wl_listener unmap; struct wl_listener destroy; @@ -275,6 +284,17 @@ void view_set_activated(struct sway_view *view, bool activated); */ void view_request_activate(struct sway_view *view); +/** + * If possible, instructs the client to change their decoration mode. + */ +void view_set_csd_from_server(struct sway_view *view, bool enabled); + +/** + * Updates the view's border setting when the client unexpectedly changes their + * decoration mode. + */ +void view_update_csd_from_client(struct sway_view *view, bool enabled); + void view_set_tiled(struct sway_view *view, bool tiled); void view_close(struct sway_view *view); |