diff --git a/docs/labwc-actions.5.scd b/docs/labwc-actions.5.scd
index 58892582..61da1be4 100644
--- a/docs/labwc-actions.5.scd
+++ b/docs/labwc-actions.5.scd
@@ -131,10 +131,11 @@ Actions are used in menus and keyboard/mouse bindings.
**
Enable decorations of focused window.
- *mode* [yes|no|full|border|none] "full", "border" and "none" are the
- three modes described in 'ToggleDecorations'. "yes" and "no"
- automatically select an appropriate mode based on 'keepBorder' and
- whether the window has client side decorations. Default is yes.
+ *mode* [yes|no|initial|full|border|none] "full", "border" and "none"
+ are the three modes described in 'ToggleDecorations'. "yes", "no", and
+ "initial" automatically select an appropriate mode based on
+ 'keepBorder' and whether the window has client side decorations.
+ Default is yes.
**
Disable decorations of focused window.
diff --git a/include/view.h b/include/view.h
index 38610e10..85418f48 100644
--- a/include/view.h
+++ b/include/view.h
@@ -34,6 +34,7 @@ enum ssd_mode {
LAB_SSD_MODE_NONE,
LAB_SSD_MODE_BORDER,
LAB_SSD_MODE_FULL,
+ LAB_SSD_MODE_INITIAL,
LAB_SSD_MODE_YES,
LAB_SSD_MODE_NO
};
diff --git a/src/view.c b/src/view.c
index f1e6eb1f..162e8136 100644
--- a/src/view.c
+++ b/src/view.c
@@ -1292,7 +1292,13 @@ resolve_ssd_mode(struct view *view, enum ssd_mode mode)
{
assert(view);
- if (mode == LAB_SSD_MODE_YES) {
+ if (mode == LAB_SSD_MODE_INITIAL) {
+ if (has_ssd(view)) {
+ return LAB_SSD_MODE_FULL;
+ } else {
+ return LAB_SSD_MODE_NONE;
+ }
+ } else if (mode == LAB_SSD_MODE_YES) {
return LAB_SSD_MODE_FULL;
} else if (mode == LAB_SSD_MODE_NO) {
if (rc.ssd_keep_border && has_ssd(view)) {
@@ -1875,6 +1881,8 @@ ssd_mode_parse(const char *mode)
return LAB_SSD_MODE_BORDER;
} else if (!strcasecmp(mode, "none")) {
return LAB_SSD_MODE_NONE;
+ } else if (!strcasecmp(mode, "initial")) {
+ return LAB_SSD_MODE_INITIAL;
} else if (!strcasecmp(mode, "yes")) {
return LAB_SSD_MODE_YES;
} else {