From e2590f10fd07ee24d7f765a4d3277dd09aefcbf7 Mon Sep 17 00:00:00 2001 From: Tobias Bengfort Date: Fri, 19 Apr 2024 13:35:16 +0200 Subject: [PATCH] decorations: make has_ssd public --- include/view.h | 1 + src/view.c | 31 +++++++++++++++++++++++++++++++ src/xdg.c | 33 +-------------------------------- 3 files changed, 33 insertions(+), 32 deletions(-) diff --git a/include/view.h b/include/view.h index 6755037d..a89e75d2 100644 --- a/include/view.h +++ b/include/view.h @@ -471,6 +471,7 @@ void view_maximize(struct view *view, enum view_axis axis, bool store_natural_geometry); void view_set_fullscreen(struct view *view, bool fullscreen); void view_toggle_maximize(struct view *view, enum view_axis axis); +bool view_wants_decorations(struct view *view); void view_toggle_decorations(struct view *view); bool view_is_always_on_top(struct view *view); diff --git a/src/view.c b/src/view.c index 09cc697d..d7e62646 100644 --- a/src/view.c +++ b/src/view.c @@ -1218,6 +1218,37 @@ view_toggle_maximize(struct view *view, enum view_axis axis) } } +bool +view_wants_decorations(struct view *view) +{ + /* Window-rules take priority if they exist for this view */ + switch (window_rules_get_property(view, "serverDecoration")) { + case LAB_PROP_TRUE: + return true; + case LAB_PROP_FALSE: + return false; + default: + break; + } + + /* + * view->ssd_preference may be set by the decoration implementation + * e.g. src/decorations/xdg-deco.c or src/decorations/kde-deco.c. + */ + switch (view->ssd_preference) { + case LAB_SSD_PREF_SERVER: + return true; + case LAB_SSD_PREF_CLIENT: + return false; + default: + /* + * We don't know anything about the client preference + * so fall back to core.decoration settings in rc.xml + */ + return rc.xdg_shell_server_side_deco; + } +} + void view_toggle_decorations(struct view *view) { diff --git a/src/xdg.c b/src/xdg.c index e9b5984f..2b8bf96e 100644 --- a/src/xdg.c +++ b/src/xdg.c @@ -75,37 +75,6 @@ handle_new_popup(struct wl_listener *listener, void *data) xdg_popup_create(view, wlr_popup); } -static bool -has_ssd(struct view *view) -{ - /* Window-rules take priority if they exist for this view */ - switch (window_rules_get_property(view, "serverDecoration")) { - case LAB_PROP_TRUE: - return true; - case LAB_PROP_FALSE: - return false; - default: - break; - } - - /* - * view->ssd_preference may be set by the decoration implementation - * e.g. src/decorations/xdg-deco.c or src/decorations/kde-deco.c. - */ - switch (view->ssd_preference) { - case LAB_SSD_PREF_SERVER: - return true; - case LAB_SSD_PREF_CLIENT: - return false; - default: - /* - * We don't know anything about the client preference - * so fall back to core.decoration settings in rc.xml - */ - return rc.xdg_shell_server_side_deco; - } -} - static void handle_commit(struct wl_listener *listener, void *data) { @@ -599,7 +568,7 @@ xdg_toplevel_view_map(struct view *view) init_foreign_toplevel(view); - if (has_ssd(view)) { + if (view_wants_decorations(view)) { view_set_ssd_mode(view, LAB_SSD_MODE_FULL); } else { view_set_ssd_mode(view, LAB_SSD_MODE_NONE);