*<theme><dropShadows>* [yes|no]
Should drop-shadows be rendered behind windows. Default is no.
+*<theme><dropShadowsOnTiled>* [yes|no]
+ Should drop-shadows be rendered behind tiled windows. This won't take
+ effect if <core><gap> is smaller than window.active.shadow.size in theme.
+
+ Default is no.
+
*<theme><font place="">*
The font to use for a specific element of a window, menu or OSD.
Places can be any of:
<cornerRadius>8</cornerRadius>
<keepBorder>yes</keepBorder>
<dropShadows>no</dropShadows>
+ <dropShadowsOnTiled>no</dropShadowsOnTiled>
<font place="ActiveWindow">
<name>sans</name>
<size>10</size>
bool title_layout_loaded;
bool ssd_keep_border;
bool shadows_enabled;
+ bool shadows_on_tiled;
struct font font_activewindow;
struct font font_inactivewindow;
struct font font_menuheader;
set_bool(content, &rc.ssd_keep_border);
} else if (!strcasecmp(nodename, "dropShadows.theme")) {
set_bool(content, &rc.shadows_enabled);
+ } else if (!strcasecmp(nodename, "dropShadowsOnTiled.theme")) {
+ set_bool(content, &rc.shadows_on_tiled);
} else if (!strcmp(nodename, "name.font.theme")) {
fill_font(nodename, content, font_place);
} else if (!strcmp(nodename, "size.font.theme")) {
rc.ssd_keep_border = true;
rc.corner_radius = 8;
rc.shadows_enabled = false;
+ rc.shadows_on_tiled = false;
rc.gap = 0;
rc.adaptive_sync = LAB_ADAPTIVE_SYNC_DISABLED;
assert(ssd->shadow.tree);
struct view *view = ssd->view;
+ struct theme *theme = ssd->view->server->theme;
bool maximized = view->maximized == VIEW_AXIS_BOTH;
- bool show_shadows =
- rc.shadows_enabled && !maximized && !view_is_tiled(ssd->view);
+ bool tiled_shadows = false;
+ if (rc.shadows_on_tiled) {
+ if (rc.gap >= theme->window[THEME_ACTIVE].shadow_size
+ && rc.gap >= theme->window[THEME_INACTIVE].shadow_size) {
+ tiled_shadows = true;
+ } else {
+ wlr_log(WLR_INFO, "gap size < shadow_size, ignore rc.shadows_ontiled");
+ }
+ };
+ bool show_shadows = rc.shadows_enabled && !maximized
+ && (!view_is_tiled(ssd->view) || tiled_shadows);
wlr_scene_node_set_enabled(&ssd->shadow.tree->node, show_shadows);
if (show_shadows) {
set_shadow_geometry(ssd);