diff options
author | Peder Stray <peder.stray@gmail.com> | 2021-12-02 14:54:11 +0100 |
---|---|---|
committer | Peder Stray <peder.stray@gmail.com> | 2021-12-11 14:20:07 +0100 |
commit | 813336e06811186bc0636fc2e79155cea2641781 (patch) | |
tree | 22816161af89f39745f2ed714b03390b37387190 | |
parent | 729452448b5fe5aa63c31e2ca7fefc86c73b553b (diff) | |
download | i3-813336e06811186bc0636fc2e79155cea2641781.tar.gz i3-813336e06811186bc0636fc2e79155cea2641781.zip |
Implement title_window_icon toggle
A feature described in i3/i3#4709
-rw-r--r-- | docs/userguide | 4 | ||||
-rw-r--r-- | include/commands.h | 2 | ||||
-rw-r--r-- | parser-specs/commands.spec | 2 | ||||
-rw-r--r-- | release-notes/changes/4-title_window_icon-toggle | 1 | ||||
-rw-r--r-- | src/commands.c | 30 | ||||
-rwxr-xr-x[-rw-r--r--] | testcases/t/314-window-icon-padding.t | 30 |
6 files changed, 61 insertions, 8 deletions
diff --git a/docs/userguide b/docs/userguide index d43361b6..8026d87e 100644 --- a/docs/userguide +++ b/docs/userguide @@ -2728,8 +2728,8 @@ specific windows or for all windows (using the <<for_window>> directive). *Syntax*: ----------------------------- -title_window_icon <yes|no> -title_window_icon padding <px> +title_window_icon <yes|no|toggle> +title_window_icon <padding|toggle> <px> ------------------------------ *Examples*: diff --git a/include/commands.h b/include/commands.h index c27cba4a..d0f0140b 100644 --- a/include/commands.h +++ b/include/commands.h @@ -333,7 +333,7 @@ void cmd_shmlog(I3_CMD, const char *argument); void cmd_debuglog(I3_CMD, const char *argument); /** - * Implementation of 'title_window_icon <yes|no>' and 'title_window_icon padding <px>' + * Implementation of 'title_window_icon <yes|no|toggle>' and 'title_window_icon <padding|toggle> <px>' * */ void cmd_title_window_icon(I3_CMD, const char *enable, int padding); diff --git a/parser-specs/commands.spec b/parser-specs/commands.spec index 6efaa855..486f20dd 100644 --- a/parser-specs/commands.spec +++ b/parser-specs/commands.spec @@ -468,6 +468,8 @@ state TITLE_FORMAT: state TITLE_WINDOW_ICON: 'padding' -> TITLE_WINDOW_ICON_PADDING + enable = 'toggle' + -> TITLE_WINDOW_ICON_PADDING enable = '1', 'yes', 'true', 'on', 'enable', 'active', '0', 'no', 'false', 'off', 'disable', 'inactive' -> call cmd_title_window_icon($enable, 0) diff --git a/release-notes/changes/4-title_window_icon-toggle b/release-notes/changes/4-title_window_icon-toggle new file mode 100644 index 00000000..f15e7a4a --- /dev/null +++ b/release-notes/changes/4-title_window_icon-toggle @@ -0,0 +1 @@ +Add title_window_icon toggle diff --git a/src/commands.c b/src/commands.c index a4af1a39..27853bd0 100644 --- a/src/commands.c +++ b/src/commands.c @@ -2064,20 +2064,40 @@ void cmd_title_format(I3_CMD, const char *format) { } /* - * Implementation of 'title_window_icon <yes|no>' and 'title_window_icon padding <px>' + * Implementation of 'title_window_icon <yes|no|toggle>' and 'title_window_icon padding <px>' * */ void cmd_title_window_icon(I3_CMD, const char *enable, int padding) { - if (enable != NULL && !boolstr(enable)) { - padding = -1; + bool is_toggle = false; + if (enable != NULL) { + if (strcmp(enable, "toggle") == 0) { + is_toggle = true; + } else if (!boolstr(enable)) { + padding = -1; + } } DLOG("setting window_icon=%d\n", padding); HANDLE_EMPTY_MATCH; owindow *current; TAILQ_FOREACH (current, &owindows, owindows) { - DLOG("setting window_icon for %p / %s\n", current->con, current->con->name); - current->con->window_icon_padding = padding; + if (is_toggle) { + const int current_padding = current->con->window_icon_padding; + if (padding > 0) { + if (current_padding < 0) { + current->con->window_icon_padding = padding; + } else { + /* toggle off, but store padding given */ + current->con->window_icon_padding = -(padding + 1); + } + } else { + /* Set to negative of (current value+1) to keep old padding when toggling */ + current->con->window_icon_padding = -(current_padding + 1); + } + } else { + current->con->window_icon_padding = padding; + } + DLOG("Set window_icon for %p / %s to %d\n", current->con, current->con->name, current->con->window_icon_padding); if (current->con->window != NULL) { /* Make sure the window title is redrawn immediately. */ diff --git a/testcases/t/314-window-icon-padding.t b/testcases/t/314-window-icon-padding.t index 5320ab9f..71cf5bd5 100644..100755 --- a/testcases/t/314-window-icon-padding.t +++ b/testcases/t/314-window-icon-padding.t @@ -38,6 +38,36 @@ is(window_icon_padding($tmp), -1, 'window_icon_padding defaults to -1'); cmd 'title_window_icon on'; isnt(window_icon_padding($tmp), -1, 'window_icon_padding no longer -1'); +cmd 'title_window_icon toggle'; +is(window_icon_padding($tmp), -1, 'window_icon_padding back to -1'); + +cmd 'title_window_icon toggle'; +isnt(window_icon_padding($tmp), -1, 'window_icon_padding no longer -1 again'); + +cmd 'title_window_icon off'; +is(window_icon_padding($tmp), -1, 'window_icon_padding back to -1'); + +cmd 'title_window_icon padding 3px'; +is(window_icon_padding($tmp), 3, 'window_icon_padding set to 3'); + +cmd 'title_window_icon toggle'; +ok(window_icon_padding($tmp) < 0, 'window_icon_padding toggled off'); + +cmd 'title_window_icon toggle'; +is(window_icon_padding($tmp), 3, 'window_icon_padding toggled back to 3'); + +cmd 'title_window_icon toggle 5px'; +ok(window_icon_padding($tmp) < 0, 'window_icon_padding toggled off'); + +cmd 'title_window_icon toggle 5px'; +is(window_icon_padding($tmp), 5, 'window_icon_padding toggled on to 5px'); + +cmd 'title_window_icon toggle 5px'; +ok(window_icon_padding($tmp) < 0, 'window_icon_padding toggled off'); + +cmd 'title_window_icon toggle 4px'; +is(window_icon_padding($tmp), 4, 'window_icon_padding toggled on to 4px'); + exit_gracefully($pid); ################################################################################ |