diff options
| author | bakkeby <[email protected]> | 2020-02-09 14:55:40 +0100 |
|---|---|---|
| committer | bakkeby <[email protected]> | 2020-02-09 14:55:40 +0100 |
| commit | ed20fd9c611ebeca0221e4e88a29c859bccb9797 (patch) | |
| tree | 6c10ecb44fb39039d634978ff4debbfddcc27584 /patch/scratchpad_alt_1.c | |
| parent | 69a7b2ad6b5c1419998cd4d781593185c0c01af1 (diff) | |
| download | dwm-flexipatch-ed20fd9c611ebeca0221e4e88a29c859bccb9797.tar.gz dwm-flexipatch-ed20fd9c611ebeca0221e4e88a29c859bccb9797.zip | |
Feature request to add alternative scratchpad patch by Gaspar Vardanyan ref. #8
Diffstat (limited to 'patch/scratchpad_alt_1.c')
| -rw-r--r-- | patch/scratchpad_alt_1.c | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/patch/scratchpad_alt_1.c b/patch/scratchpad_alt_1.c new file mode 100644 index 0000000..9d89ac9 --- /dev/null +++ b/patch/scratchpad_alt_1.c @@ -0,0 +1,92 @@ +static Client * scratchpad_last_showed = NULL; + +static void scratchpad_hide () +{ + if (selmon -> sel) + { + selmon -> sel -> tags = scratchpad_mask; + focus(NULL); + arrange(selmon); + } +} + +static _Bool scratchpad_last_showed_is_killed (void) +{ + _Bool killed = 1; + for (Client * c = selmon -> clients; c != NULL; c = c -> next) + { + if (c == scratchpad_last_showed) + { + killed = 0; + break; + } + } + return killed; +} + +static void scratchpad_remove () +{ + if (selmon -> sel && scratchpad_last_showed != NULL && selmon -> sel == scratchpad_last_showed) + scratchpad_last_showed = NULL; +} + +static void scratchpad_show () +{ + if (scratchpad_last_showed == NULL || scratchpad_last_showed_is_killed ()) + scratchpad_show_first (); + else + { + if (scratchpad_last_showed -> tags != scratchpad_mask) + { + scratchpad_last_showed -> tags = scratchpad_mask; + focus(NULL); + arrange(selmon); + } + else + { + _Bool found_current = 0; + _Bool found_next = 0; + for (Client * c = selmon -> clients; c != NULL; c = c -> next) + { + if (found_current == 0) + { + if (c == scratchpad_last_showed) + { + found_current = 1; + continue; + } + } + else + { + if (c -> tags == scratchpad_mask) + { + found_next = 1; + scratchpad_show_client (c); + break; + } + } + } + if (found_next == 0) scratchpad_show_first (); + } + } +} + +static void scratchpad_show_client (Client * c) +{ + scratchpad_last_showed = c; + c -> tags = selmon->tagset[selmon->seltags]; + focus(c); + arrange(selmon); +} + +static void scratchpad_show_first (void) +{ + for (Client * c = selmon -> clients; c != NULL; c = c -> next) + { + if (c -> tags == scratchpad_mask) + { + scratchpad_show_client (c); + break; + } + } +}
\ No newline at end of file |
