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 {