├── analyse ├── .gitignore ├── graph-data-historical.txt ├── plot.sh ├── generate_graph.sh ├── Makefile ├── graph-data.txt └── analyse.c ├── graph.png ├── Makefile ├── stats.md ├── deviations.md ├── incomplete-cat-B-items.md ├── extra.md ├── all-cat-A-and-B-items.md └── README.md /analyse/.gitignore: -------------------------------------------------------------------------------- 1 | *.o 2 | analyse 3 | -------------------------------------------------------------------------------- /graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/labwc/labwc-scope/HEAD/graph.png -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | MAKEFLAGS=--no-print-directory 2 | 3 | all: 4 | @make -C analyse/ clean 5 | @make -C analyse/ 6 | @make -C analyse/ test 7 | -------------------------------------------------------------------------------- /stats.md: -------------------------------------------------------------------------------- 1 | This file has been auto-generated based on README.md. Do not edit it manually 2 | 3 | # Requirements Breakdown 4 | 5 | - Cat A: 80 / 80 complete 6 | - Cat B: 265 / 343 complete 7 | - Cat C: 1 / 48 complete 8 | - TOTAL: 346 / 471 complete 9 | -------------------------------------------------------------------------------- /analyse/graph-data-historical.txt: -------------------------------------------------------------------------------- 1 | # date, completed requirements, total requirements 2 | 3 | 2021-04-17 36 90 0 0 4 | 2021-08-15 44 90 0 0 5 | 2021-09-24 56 89 0 0 6 | 2021-10-12 60 89 0 0 7 | 2021-10-15 61 89 0 0 8 | 2021-11-08 69 87 0 0 9 | 2021-12-26 72 87 0 0 10 | -------------------------------------------------------------------------------- /analyse/plot.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | 3 | cat << EOF | gnuplot 4 | set title "Lab Wayland Compositor User Requirements" 5 | set xdata time 6 | set term png 7 | set timefmt "%Y-%m-%d" 8 | set format x "%m/%y" 9 | set xlabel "Date" 10 | set ylabel "Requirements" 11 | set xrange ["2021-04-17":"$(date "+%Y-%m-%d")"] 12 | set yrange ["0":"350"] 13 | set output '../graph.png' 14 | plot \ 15 | 'graph-data.txt' u 1:2 w lp t 'Completed Cat A', \ 16 | 'graph-data.txt' u 1:3 w lp t 'Total Cat A', \ 17 | 'graph-data.txt' u 1:4 w lp t 'Completed Cat B', \ 18 | 'graph-data.txt' u 1:5 w lp t 'Total Cat B' 19 | EOF 20 | -------------------------------------------------------------------------------- /analyse/generate_graph.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | 3 | get_historical_data() { 4 | cat graph-data-historical.txt 5 | } 6 | 7 | get_repo_data() { 8 | for data_file in Acceptance-criteria.md README.md; do 9 | while read commit date; do 10 | (git show "${commit}:${data_file}" | grep ' complete ') >&/dev/null || continue 11 | printf "%s" "$date" 12 | while read _ _ _cat _done _ _total _; do 13 | printf " %s %s" "$_done" "$_total" 14 | done < <(git show "${commit}:${data_file}" | ./analyse --stats | grep 'Cat [A-B]') 15 | printf "\n" 16 | done < <(git log --reverse --format="%H %as" -- "../$data_file") 17 | done 18 | } 19 | 20 | combined() { 21 | get_historical_data 22 | get_repo_data 23 | } 24 | 25 | echo "Generating graph.." 26 | combined | sort -n | uniq > graph-data.txt 27 | ./plot.sh 28 | -------------------------------------------------------------------------------- /analyse/Makefile: -------------------------------------------------------------------------------- 1 | CFLAGS=-Wall -g 2 | 3 | analyse: analyse.o 4 | $(CC) $(CFLAGS) -o $@ $^ 5 | 6 | test: 7 | @./analyse --stats < ../README.md > ../stats.md 8 | @./analyse --print-header > ../incomplete-cat-B-items.md 9 | @./analyse --incomplete-b-plus < ../README.md >> ../incomplete-cat-B-items.md 10 | @./analyse --incomplete-b < ../README.md >> ../incomplete-cat-B-items.md 11 | @./analyse --print-header > ../all-cat-A-and-B-items.md 12 | @./analyse --cata < ../README.md >> ../all-cat-A-and-B-items.md 13 | @./analyse --catb < ../README.md >> ../all-cat-A-and-B-items.md 14 | @./analyse --print-header > ../extra.md 15 | @grep EXTRA ../README.md >> ../extra.md 16 | @./analyse --print-header > ../deviations.md 17 | @grep DEVIA ../README.md >> ../deviations.md 18 | @./generate_graph.sh 19 | 20 | clean: 21 | @rm -f analyse *.o 22 | -------------------------------------------------------------------------------- /deviations.md: -------------------------------------------------------------------------------- 1 | This file has been auto-generated based on README.md. Do not edit it manually 2 | 3 | | Cat | Status | Reference | Category | Description | Comment 4 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 5 | | A | complete | 2.1.2 | resistance | `screenEdgeStrength` | DEVIATION Can be negative 6 | | B | complete | 2.2.5 | focus | `followMouseRequiresMovement` | DEVIATION It is called `underMouse` in Openbox 7 | | B | complete | 2.3.1.1 | placement | `automatic` | DEVIATION: similar to Openbox's `Smart` 8 | | B | complete | 2.3.1.2 | placement | `cursor` | DEVIATION: like Openbox's `UnderMouse` 9 | | B+ | complete | 2.4.2.1 | theme | `` | DEVIATION: Replaces `titleLayout` in Openbox 10 | | B+ | complete | 2.4.2.2 | theme | `` | DEVIATION: Replaces `titleLayout` in Openbox 11 | | B | complete | 2.4.4 | theme | `keepBorder` | DEVIATION: gives ToggleDeocration 3 states 12 | | B | complete | 2.11.1 | menu | `ignoreButtonReleasePeriod` | DEVIATION: called `hideDelay` in openbox 13 | | B | complete | 2.11.4 | menu | `showIcons` | DEVIATION: called `applicationIcons` in Openbox 14 | | B | complete | 3.3.4 | mouse context | `Root` | DEVIATION [^2] 15 | | B | complete | 3.5.6 | mouse event | `Scroll` | DEVIATION: Scroll is used instead of Click for mouse-buttons Up/Down 16 | | B | complete | 5.23.1 | window action | `MoveTo` | DEVIATION: `MoveResizeTo` in Openbox 17 | -------------------------------------------------------------------------------- /analyse/graph-data.txt: -------------------------------------------------------------------------------- 1 | 2 | # date, completed requirements, total requirements 3 | 2021-04-17 36 90 0 0 4 | 2021-08-15 44 90 0 0 5 | 2021-09-24 56 89 0 0 6 | 2021-10-12 60 89 0 0 7 | 2021-10-15 61 89 0 0 8 | 2021-11-08 69 87 0 0 9 | 2021-12-26 72 87 0 0 10 | 2022-01-01 72 87 20 107 11 | 2022-03-02 73 87 34 136 12 | 2022-05-30 73 87 35 136 13 | 2022-05-30 73 87 37 136 14 | 2022-05-30 73 87 37 148 15 | 2022-06-20 73 87 42 152 16 | 2022-06-20 73 87 44 150 17 | 2022-06-20 73 87 44 152 18 | 2022-06-20 75 87 44 150 19 | 2022-06-22 75 87 44 150 20 | 2022-06-22 75 87 45 150 21 | 2022-06-22 75 87 45 151 22 | 2022-06-23 75 87 45 151 23 | 2022-06-24 78 78 47 160 24 | 2022-06-24 78 87 47 151 25 | 2022-06-27 78 78 47 159 26 | 2022-06-27 78 78 47 160 27 | 2022-06-27 78 78 48 159 28 | 2022-07-15 78 78 48 161 29 | 2022-07-15 78 78 48 162 30 | 2022-08-19 78 78 48 163 31 | 2022-09-15 78 78 52 167 32 | 2022-09-15 78 78 53 167 33 | 2022-09-15 78 78 55 169 34 | 2022-09-30 78 78 57 171 35 | 2022-09-30 78 78 58 172 36 | 2022-10-02 78 78 61 175 37 | 2022-10-02 78 78 63 176 38 | 2022-10-02 78 78 64 176 39 | 2022-10-02 78 78 66 177 40 | 2022-10-03 78 78 63 177 41 | 2022-10-03 78 78 65 177 42 | 2022-10-03 78 78 66 177 43 | 2022-10-04 78 78 66 177 44 | 2022-10-30 78 78 69 178 45 | 2022-12-08 78 78 70 179 46 | 2022-12-08 78 78 74 183 47 | 2023-01-30 78 78 75 184 48 | 2023-02-01 78 78 75 184 49 | 2023-02-01 78 78 77 186 50 | 2023-02-05 78 78 77 186 51 | 2023-02-07 78 78 77 186 52 | 2023-03-06 78 78 78 187 53 | 2023-03-26 78 78 85 194 54 | 2023-03-26 78 78 86 194 55 | 2023-03-26 78 78 86 195 56 | 2023-03-26 78 78 88 197 57 | 2023-03-27 78 78 89 197 58 | 2023-04-20 78 78 89 197 59 | 2023-04-20 78 78 90 197 60 | 2023-04-21 78 78 91 197 61 | 2023-04-21 78 78 93 200 62 | 2023-05-08 78 78 96 203 63 | 2023-05-08 78 78 97 204 64 | 2023-05-09 78 78 100 203 65 | 2023-05-20 78 78 101 203 66 | 2023-05-20 78 78 101 204 67 | 2023-06-26 78 78 103 205 68 | 2023-06-26 78 78 104 206 69 | 2023-06-26 78 78 106 207 70 | 2023-06-26 78 78 107 208 71 | 2023-06-26 78 78 108 209 72 | 2023-06-26 78 78 111 212 73 | 2023-07-01 78 78 118 217 74 | 2023-07-05 78 78 120 219 75 | 2023-08-09 78 78 120 220 76 | 2023-08-09 78 78 120 223 77 | 2023-10-03 78 78 130 231 78 | 2023-10-15 78 78 131 232 79 | 2023-10-20 78 78 133 232 80 | 2023-11-28 78 78 134 233 81 | 2023-12-09 78 78 135 233 82 | 2023-12-21 78 78 141 238 83 | 2023-12-26 81 81 150 249 84 | 2024-02-01 80 80 159 258 85 | 2024-02-05 80 80 160 263 86 | 2024-05-04 80 80 202 294 87 | 2024-07-14 80 80 213 300 88 | 2024-12-04 80 80 222 309 89 | 2024-12-04 80 80 253 333 90 | 2024-12-04 80 80 258 335 91 | 2024-12-05 80 80 260 336 92 | -------------------------------------------------------------------------------- /analyse/analyse.c: -------------------------------------------------------------------------------- 1 | #define _POSIX_C_SOURCE 200809L 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | static bool print_incomplete_cat_b; 9 | static bool print_incomplete_cat_b_plus; 10 | static bool print_cat_a; 11 | static bool print_cat_b; 12 | 13 | static void 14 | print_stats(void) 15 | { 16 | int nr_cat_a = 0; 17 | int nr_complete_cat_a = 0; 18 | int nr_cat_b = 0; 19 | int nr_complete_cat_b = 0; 20 | int nr_cat_c = 0; 21 | int nr_complete_cat_c = 0; 22 | 23 | char *line = NULL; 24 | size_t len = 0; 25 | while ((getline(&line, &len, stdin) != -1)) { 26 | char *p = strrchr(line, '\n'); 27 | if (p) { 28 | *p = '\0'; 29 | } 30 | if (strncmp(line, "| ", 3)) 31 | continue; 32 | if (!strncmp(line, "| A", 4)) { 33 | ++nr_cat_a; 34 | if (strstr(line, "complete")) { 35 | ++nr_complete_cat_a; 36 | } 37 | } 38 | if (!strncmp(line, "| B", 4)) { 39 | ++nr_cat_b; 40 | if (strstr(line, "complete")) { 41 | ++nr_complete_cat_b; 42 | } 43 | } 44 | if (!strncmp(line, "| C", 4)) { 45 | ++nr_cat_c; 46 | if (strstr(line, "complete")) { 47 | ++nr_complete_cat_c; 48 | } 49 | } 50 | } 51 | free(line); 52 | printf("This file has been auto-generated based on README.md. Do not edit it manually\n\n"); 53 | printf("# Requirements Breakdown\n\n"); 54 | printf("- Cat A: %d / %d complete\n", nr_complete_cat_a, nr_cat_a); 55 | printf("- Cat B: %d / %d complete\n", nr_complete_cat_b, nr_cat_b); 56 | printf("- Cat C: %d / %d complete\n", nr_complete_cat_c, nr_cat_c); 57 | printf("- TOTAL: %d / %d complete\n", 58 | nr_complete_cat_a + nr_complete_cat_b + nr_complete_cat_c, 59 | nr_cat_a + nr_cat_b + nr_cat_c); 60 | } 61 | 62 | void 63 | process_line(char *line) 64 | { 65 | if (strncmp(line, "| ", 3)) { 66 | return; 67 | } 68 | if (print_incomplete_cat_b_plus && !strncmp(line, "| B+", 5) && !strstr(line, "complete")) 69 | printf("%s\n", line); 70 | if (print_incomplete_cat_b && !strncmp(line, "| B ", 5) && !strstr(line, "complete")) 71 | printf("%s\n", line); 72 | if (print_cat_a && !strncmp(line, "| A", 4)) 73 | printf("%s\n", line); 74 | if (print_cat_b && !strncmp(line, "| B", 4)) 75 | printf("%s\n", line); 76 | } 77 | 78 | int 79 | main(int argc, char *argv[]) 80 | { 81 | if (argc != 2) { 82 | fprintf(stderr, "Usage: %s < input\n", argv[0]); 83 | exit(EXIT_FAILURE); 84 | } 85 | for (int i = 1; i < argc ; ++i) { 86 | if (!strcmp(argv[i], "--stats")) { 87 | print_stats(); 88 | exit(0); 89 | } else if (!strcmp(argv[i], "--print-header")) { 90 | printf("This file has been auto-generated based on README.md. Do not edit it manually\n\n"); 91 | printf("| Cat | Status | Reference | Category | Description | Comment\n"); 92 | printf("| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n"); 93 | exit(0); 94 | } else if (!strcmp(argv[i], "--incomplete-b-plus")) { 95 | print_incomplete_cat_b_plus = true; 96 | } else if (!strcmp(argv[i], "--incomplete-b")) { 97 | print_incomplete_cat_b = true; 98 | } else if (!strcmp(argv[i], "--cata")) { 99 | print_cat_a = true; 100 | } else if (!strcmp(argv[i], "--catb")) { 101 | print_cat_b = true; 102 | } 103 | } 104 | 105 | char *line = NULL; 106 | size_t len = 0; 107 | while ((getline(&line, &len, stdin) != -1)) { 108 | char *p = strrchr(line, '\n'); 109 | if (p) { 110 | *p = '\0'; 111 | } 112 | process_line(line); 113 | } 114 | free(line); 115 | } 116 | -------------------------------------------------------------------------------- /incomplete-cat-B-items.md: -------------------------------------------------------------------------------- 1 | This file has been auto-generated based on README.md. Do not edit it manually 2 | 3 | | Cat | Status | Reference | Category | Description | Comment 4 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 5 | | B+ | | 2.11.3 | menu | `submenuShowDelay` | 6 | | B | | 1.2.6.1 | wayland-protocol | input-method-unstable-v1 | 7 | | B | | 1.2.7 | wayland-protocol | input-timestamps-unstable-v1 | 8 | | B | | 1.2.8 | wayland-protocol | keyboard-shortcuts-inhibit-unstable-v1 | This is controversial [^3] 9 | | B | | 1.2.9 | wayland-protocol | linux-dmabuf-unstable-v1 | 10 | | B | | 1.2.10 | wayland-protocol | linux-explicit-synchronization-unstable-v1 | 11 | | B | | 1.2.12 | wayland-protocol | pointer-gestures-unstable-v1 | 12 | | B | | 1.2.20 | wayland-protocol | xwayland-keyboard-grab-unstable-v1 | 13 | | B | | 1.2.28 | wayland-protocol | content-type-v1 | 14 | | B | | 2.1.1 | resistance | `strength` | If we implement, consider a better name 15 | | B | | 2.6.3 | resize | popupPosition | 16 | | B | | 2.6.4 | resize | popupFixedposition | 17 | | B | | 2.6.5 | resize | cornerRange | EXTRA 18 | | B | | 2.6.6 | resize | minimumArea | EXTRA 19 | | B | | 2.11.6 | menu | `file` | TODO: is this supported already? 20 | | B | | 3.3.14 | mouse context | `Icon` | 21 | | B | | 3.4.1 | mouse button | `Middle` | 22 | | B | | 3.5.4 | mouse event | `Release` | 23 | | B | | 4.5 | global action | `DirectionalCycleWindows` | 24 | | B | | 4.6 | global action | `DirectionalTargetWindows` | 25 | | B | | 4.8 | global action | `AddDesktop` | 26 | | B | | 4.9 | global action | `RemoveDesktop` | 27 | | B | | 4.10 | global action | `ToggleShowDesktop` | 28 | | B | | 5.4 | window action | `RaiseLower` | 29 | | B | | 5.6 | window action | `FocusToBottom` | 30 | | B | | 5.13.1 | window action | `ToggleMaximize.direction` | 31 | | B | | 5.14.1 | window action | `Maximize.direction` | 32 | | B | | 5.15.1 | window action | `Unmaximize.direction` | 33 | | B | | 5.18 | window action | `Decorate` | 34 | | B | | 5.19 | window action | `Undecorate` | 35 | | B | | 5.28 | window action | `GrowToFill` | 36 | | B | | 6.1.10 | geometry | `padding.width` | 37 | | B | | 6.1.14 | geometry | `menu.overlap` | 38 | | B | | 6.2.2 | border colors | `window.active.title.separator.color` | 39 | | B | | 6.2.4 | border colors | `window.inactive.title.separator.color` | 40 | | B | | 6.2.6 | border colors | `window.active.client.color` | 41 | | B | | 6.2.7 | border colors | `window.inactive.client.color` | 42 | | B | | 6.3.4 | titlebar colors | `window.active.button.pressed.image.color` | 43 | | B | | 6.3.5 | titlebar colors | `window.active.button.disabled.image.color` | 44 | | B | | 6.3.6 | titlebar colors | `window.active.button.hover.image.color` | 45 | | B | | 6.3.7 | titlebar colors | `window.active.button.toggled.unpressed.image.color` | 46 | | B | | 6.3.8 | titlebar colors | `window.active.button.toggled.pressed.image.color` | 47 | | B | | 6.3.9 | titlebar colors | `window.active.button.toggled.hover.image.color` | 48 | | B | | 6.3.10 | titlebar colors | `window.active.button.toggled.image.color` | 49 | | B | | 6.3.12 | titlebar colors | `window.inactive.button.pressed.image.color` | 50 | | B | | 6.3.13 | titlebar colors | `window.inactive.button.disabled.image.color` | 51 | | B | | 6.3.14 | titlebar colors | `window.inactive.button.hover.image.color` | 52 | | B | | 6.3.15 | titlebar colors | `window.inactive.button.toggled.unpressed.image.color` | 53 | | B | | 6.3.16 | titlebar colors | `window.inactive.button.toggled.pressed.image.color` | 54 | | B | | 6.3.17 | titlebar colors | `window.inactive.button.toggled.hover.image.color` | 55 | | B | | 6.3.18 | titlebar colors | `window.inactive.button.toggled.image.color` | 56 | | B | | 6.4.2 | active window textures | `window.active.label.bg` | 57 | | B | | 6.4.4 | active window textures | `window.active.grip.bg` | 58 | | B | | 6.6.1 | active window button textures | `window.active.button.unpressed.bg` | 59 | | B | | 6.6.2 | active window button textures | `window.active.button.pressed.bg` | 60 | | B | | 6.6.3 | active window button textures | `window.active.button.hover.bg` | 61 | | B | | 6.6.4 | active window button textures | `window.active.button.disabled.bg` | 62 | | B | | 6.6.5 | active window button textures | `window.active.button.toggled.unpressed.bg` | 63 | | B | | 6.6.6 | active window button textures | `window.active.button.toggled.pressed.bg` | 64 | | B | | 6.6.7 | active window button textures | `window.active.button.toggled.hover.bg` | 65 | | B | | 6.6.8 | active window button textures | `window.active.button.toggled.bg` | 66 | | B | | 6.7.1 | inactive window button textures | `window.inactive.button.unpressed.bg` | 67 | | B | | 6.7.2 | inactive window button textures | `window.inactive.button.pressed.bg` | 68 | | B | | 6.7.3 | inactive window button textures | `window.inactive.button.hover.bg` | 69 | | B | | 6.7.4 | inactive window button textures | `window.inactive.button.disabled.bg` | 70 | | B | | 6.7.5 | inactive window button textures | `window.inactive.button.toggled.unpressed.bg` | 71 | | B | | 6.7.6 | inactive window button textures | `window.inactive.button.toggled.pressed.bg` | 72 | | B | | 6.7.7 | inactive window button textures | `window.inactive.button.toggled.hover.bg` | 73 | | B | | 6.7.8 | inactive window button textures | `window.inactive.button.toggled.bg` | 74 | | B | | 6.8.3 | menu colors | `menu.items.disabled.text.color` | 75 | | B | | 6.8.5 | menu colors | `menu.items.active.disabled.text.color` | 76 | | B | | 6.10.3 | osd textures | `osd.hilight.bg` | for desktop osd only 77 | | B | | 6.10.4 | osd textures | `osd.unhilight.bg` | for desktop osd only 78 | | B | | 6.11.2 | osd colors | `osd.hilight.bg.color` | for desktop osd only 79 | | B | | 6.11.3 | osd colors | `osd.unhilight.bg.color` | for desktop osd only 80 | | B | | 6.15.1.9 | theme button base | `bullet.xbm` | 81 | | B | | 6.15.2.2 | theme button variant | `_pressed` | 82 | | B | | 6.15.2.3 | theme button variant | `_disabled` | 83 | -------------------------------------------------------------------------------- /extra.md: -------------------------------------------------------------------------------- 1 | This file has been auto-generated based on README.md. Do not edit it manually 2 | 3 | | Cat | Status | Reference | Category | Description | Comment 4 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 5 | | B | complete | 2.1.3 | resistance | `windowEdgeStrength` | EXTRA 6 | | B | complete | 2.1.4 | resistance | `unSnapThreshold` | EXTRA 7 | | B | complete | 2.1.5 | resistance | `unMaximizeThreshold` | EXTRA 8 | | B | complete | 2.3.1.3 | placement | `center` | EXTRA 9 | | B | complete | 2.3.1.4 | placement | `cascade` | EXTRA 10 | | B | complete | 2.4.14.3 | theme | `font.slant: oblique` | EXTRA 11 | | B | complete | 2.4.15 | theme | `dropShadows` | EXTRA 12 | | B | complete | 2.4.16 | theme | `icon` | EXTRA 13 | | B | complete | 2.4.17 | theme | `fallbackAppIcon` | EXTRA 14 | | B | complete | 2.5.5 | desktop | `prefix` | EXTRA 15 | | B | | 2.6.5 | resize | cornerRange | EXTRA 16 | | B | | 2.6.6 | resize | minimumArea | EXTRA 17 | | B | complete | 2.7.1 | window rules | `windowRule` | EXTRA 18 | | B | complete | 2.7.2.1 | window rule criteria | `windowRule.identifier` | EXTRA 19 | | B | complete | 2.7.2.2 | window rule criteria | `windowRule.title` | EXTRA 20 | | B | complete | 2.7.2.3 | window rule criteria | `windowRule.matchOnce` | EXTRA 21 | | B | complete | 2.7.3.1 | window rule property | `windowRule.serverDecoration` | EXTRA 22 | | B | complete | 2.7.3.2 | window rule property | `windowRule.skipTaskbar` | EXTRA 23 | | B | complete | 2.7.3.3 | window rule property | `windowRule.skipWindowSwitcher` | EXTRA 24 | | B | complete | 2.7.3.4 | window rule property | `windowRule.ignoreFocusRequest` | EXTRA 25 | | B | complete | 2.7.3.5 | window rule property | `windowRule.fixedPosition` | EXTRA 26 | | B | complete | 2.7.3.6 | window rule property | `windowRule.ignoreConfigureRequest` | EXTRA 27 | | B | complete | 2.7.3.7 | window rule property | `windowRule.wantAbsorbedModifierReleaseEvents` | EXTRA 28 | | B | complete | 2.7.4 | window rule type | `windowRule.type` | EXTRA 29 | | B | complete | 2.7.5.1 | window rule condition | `windowRule.type` | EXTRA 30 | | B | complete | 2.8.4 | keyboard | `numlock` | EXTRA 31 | | B | complete | 2.8.5 | keyboard | `layoutScope` | EXTRA 32 | | B | complete | 2.9.4 | mouse | `scrollFactor` | EXTRA 33 | | B | complete | 2.9a.1 | touch | `deviceName` | EXTRA 34 | | B | complete | 2.9a.2 | touch | `mapToOutput` | EXTRA 35 | | B | complete | 2.9b.1 | tablet | `mapToOutput` | EXTRA 36 | | B | complete | 2.9b.2 | tablet | `rotate` | EXTRA 37 | | B | complete | 2.9b.3 | tablet | `area` | EXTRA 38 | | B | complete | 2.9b.4 | tablet | `map` | EXTRA 39 | | B | complete | 2.9c.1 | tablet tool | `tabletTool` | EXTRA 40 | | B | complete | 2.13.1 | core | `decoration` | EXTRA 41 | | B | complete | 2.13.2 | core | `gap` | EXTRA 42 | | B | complete | 2.13.3 | core | `adaptiveSync` | EXTRA 43 | | B | complete | 2.13.4 | core | `reuseOutputMode` | EXTRA 44 | | B | complete | 2.13.5 | core | `xwaylandPersistence` | EXTRA 45 | | B | complete | 2.13.6 | core | `allowTearing` | EXTRA 46 | | B | complete | 2.13.7 | core | `autoEnableOutputs` | EXTRA 47 | | B | complete | 2.14.1 | window switcher | `show` | EXTRA 48 | | B | complete | 2.14.2 | window switcher | `preview` | EXTRA 49 | | B | complete | 2.14.3 | window switcher | `outlines` | EXTRA 50 | | B | complete | 2.14.4.1 | window switcher | `fields.field.content` | EXTRA 51 | | B | complete | 2.14.4.2 | window switcher | `fields.field.width` | EXTRA 52 | | B | complete | 2.14.5 | window switcher | `allWorkspaces` | EXTRA 53 | | B | complete | 3.6.1 | libinput | naturalScroll | EXTRA 54 | | B | complete | 3.6.2 | libinput | leftHanded | EXTRA 55 | | B | complete | 3.6.3 | libinput | pointerSpeed | EXTRA 56 | | B | complete | 3.6.4 | libinput | accelProfile | EXTRA 57 | | B | complete | 3.6.5 | libinput | tap | EXTRA 58 | | B | complete | 3.6.6 | libinput | tapButtonMap | EXTRA 59 | | B | complete | 3.6.7 | libinput | tapAndDrag | EXTRA 60 | | B | complete | 3.6.8 | libinput | dragLock | EXTRA 61 | | B | complete | 3.6.9 | libinput | middleEmulation | EXTRA 62 | | B | complete | 3.6.10 | libinput | disableWhiteTyping | EXTRA 63 | | B | complete | 3.6.11 | libinput | clickMethod | EXTRA 64 | | B | complete | 3.6.12 | libinput | sendEventsMode | EXTRA 65 | | B | complete | 3.6.13 | libinput | calibrationMatrix | EXTRA 66 | | B | complete | 3.1.6 | keyboard binding | `default` | EXTRA 67 | | B | complete | 3.1.7 | keyboard binding | `layoutDependent` | EXTRA 68 | | B | complete | 3.1.8 | keyboard binding | `onRelease` | EXTRA 69 | | B | complete | 3.1.9 | keyboard binding | `allowWhenLocked` | EXTRA 70 | | B | complete | 3.2.4 | mouse binding | `default` | EXTRA 71 | | B | complete | 3.3.21 | mouse context | `Title` | EXTRA 72 | | B | complete | 4.2.3 | global action | `ShowMenu.atCursor` | EXTRA 73 | | B | complete | 4.16 | global action | `Debug` | EXTRA 74 | | B | complete | 4.17 | global action | `None` | EXTRA Removes other actions within mouse bindings 75 | | B | complete | 4.18 | global action | `Kill` | EXTRA Send SIGTERM 76 | | B | complete | 4.19 | global action | `FocusOutput` | EXTRA 77 | | B | complete | 4.20 | global action | `ToggleKeybinds` | EXTRA 78 | | B | complete | 4.21 | global action | `VirtualOutputAdd` | EXTRA 79 | | B | complete | 4.22 | global action | `VirtualOutputRemove` | EXTRA 80 | | B | complete | 4.23 | global action | `ToggleTabletMouseEmulation` | EXTRA 81 | | B | complete | 4.24 | global action | `ZoomIn` | EXTRA 82 | | B | complete | 4.25 | global action | `ZoomOut` | EXTRA 83 | | B | complete | 4.26 | global action | `EnableTabletMouseEmulation` | EXTRA 84 | | B | complete | 4.27 | global action | `DisableTabletMouseEmulation` | EXTRA 85 | | B | complete | 4.28 | global action | `WarpCursor` | EXTRA 86 | | B | complete | 5.17.2 | window action | `SetDecorations` | EXTRA 87 | | B | complete | 5.20.1 | window action | `SendToDesktop.to` | EXTRA: support value 'current' 88 | | B | complete | 5.26.1 | window action | `MoveToEdge.snapWindows` | EXTRA 89 | | B | complete | 5.31.2 | window action | `ForEach.none` | EXTRA 90 | | B | complete | 5.36 | window action | `SnapToEdge` | EXTRA 91 | | B | complete | 5.37 | window action | `SnapToRegion` | EXTRA 92 | | B | complete | 5.38 | window action | `MoveToCursor` | EXTRA 93 | | B | complete | 5.39 | window action | `MoveToOutput` | EXTRA 94 | | B | complete | 5.40 | window action | `AutoPlace` | EXTRA 95 | | B | complete | 5.41 | window action | `ToggleSnapToEdge` | EXTRA 96 | | B | complete | 5.42 | window action | `ToggleSnapToRegion` | EXTRA 97 | | B | complete | 5.43 | window action | `UnSnap` | EXTRA 98 | | B | complete | 6.1.11.1 | geometry | `titlebar.height` | EXTRA 99 | | B | complete | 6.1.15 | geometry | `menu.width.min` | EXTRA 100 | | B | complete | 6.1.16 | geometry | `menu.width.max` | EXTRA 101 | | B | complete | 6.1.17 | geometry | `menu.items.padding.x` | EXTRA 102 | | B | complete | 6.1.18 | geometry | `menu.items.padding.y` | EXTRA 103 | | B | complete | 6.1.19.1 | geometry | `osd.window-switcher.width` | EXTRA 104 | | B | complete | 6.1.19.2 | geometry | `osd.window-switcher.item.padding.x` | EXTRA 105 | | B | complete | 6.1.19.3 | geometry | `osd.window-switcher.item.padding.y` | EXTRA 106 | | B | complete | 6.1.19.4 | geometry | `osd.window-switcher.padding` | EXTRA 107 | | B | complete | 6.1.19.5 | geometry | `osd.window-switcher.item.active.border.width` | EXTRA 108 | | B | complete | 6.1.20.1 | geometry | `osd.workspace-switcher.boxes.width` | EXTRA 109 | | B | complete | 6.1.20.2 | geometry | `osd.workspace-switcher.boxes.height` | EXTRA 110 | | B | complete | 6.1.21.1 | geometry | `window.button.width` | EXTRA 111 | | B | complete | 6.1.21.2 | geometry | `window.button.height` | EXTRA 112 | | B | complete | 6.1.21.3 | geometry | `window.button.spacing` | EXTRA 113 | | B | complete | 6.1.21.3 | geometry | `window.button.hover.bg.corner-radius` | EXTRA 114 | | B | complete | 6.1.22.1 | geometry | `window.titlebar.padding.width` | EXTRA 115 | | B | complete | 6.1.22.2 | geometry | `window.titlebar.padding.height` | EXTRA 116 | | B | complete | 6.4.5 | active window textures | `window.active.shadow.size` | EXTRA 117 | | B | complete | 6.4.6 | active window textures | `window.active.shadow.color` | EXTRA 118 | | B | complete | 6.15.1.1 | theme button base | `menu.xbm` | EXTRA 119 | | B+ | complete | 6.15.3 | theme button png | Support png buttons | EXTRA 120 | | B+ | complete | 6.15.4 | theme button svg | Support svg buttons | EXTRA 121 | | B | complete | 6.16.1 | text window switcher | `osd.window-switcher.width` | EXTRA 122 | | B | complete | 6.16.2 | text window switcher | `osd.window-switcher.padding` | EXTRA 123 | | B | complete | 6.16.3 | text window switcher | `osd.window-switcher.item.padding.x` | EXTRA 124 | | B | complete | 6.16.4 | text window switcher | `osd.window-switcher.item.padding.y` | EXTRA 125 | | B | complete | 6.16.5 | text window switcher | `osd.window-switcher.item.active.border.width` | EXTRA 126 | | B | complete | 6.16.6 | text window switcher | `osd.window-switcher.preview.border.width` | EXTRA 127 | | B | complete | 6.16.7 | text window switcher | `osd.window-switcher.preview.border.color` | EXTRA 128 | | B | complete | 6.16.8 | text window switcher | `osd.window-switcher.preview.boxes.width` | EXTRA 129 | | B | complete | 6.16.9 | text window switcher | `osd.window-switcher.preview.boxes.height` | EXTRA 130 | -------------------------------------------------------------------------------- /all-cat-A-and-B-items.md: -------------------------------------------------------------------------------- 1 | This file has been auto-generated based on README.md. Do not edit it manually 2 | 3 | | Cat | Status | Reference | Category | Description | Comment 4 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 5 | | A | complete | 1.1.1 | general | Optionally support Xwayland | 6 | | A | complete | 1.1.2 | general | Parse `/rc.xml` | 7 | | A | complete | 1.1.3 | general | Parse `/environment` | 8 | | A | complete | 1.1.4 | general | Parse `/autostart` | 9 | | A | complete | 1.1.5 | general | Parse `/menu.xml` | 10 | | A | complete | 1.1.6 | general | Parse openbox themes files and associated xbm icons | 11 | | A | complete | 1.1.7 | general | Catch SIGHUP to re-load config file and theme | 12 | | A | complete | 1.1.8 | general | Support both CSD and SSD | 13 | | A | complete | 1.1.9 | general | Support maximize, iconify, close buttons | 14 | | A | complete | 1.1.10 | general | Support damage tracking to reduce CPU usage | 15 | | A | complete | 1.1.11 | general | Support HiDPI | 16 | | A | complete | 1.1.12 | general | Support on-screen display (osd) | 17 | | A | complete | 1.1.13 | general | Support libinput configuration | 18 | | A | complete | 1.1.14 | general | Support drag-n-drop | 19 | | A | complete | 1.1.15 | general | Support input method editors (IME) | 20 | | A | complete | 1.2.3 | wayland-protocol | [xdg-shell-v3] | 21 | | A | complete | 1.3.3 | wlr-protocol | wlr-foreign-toplevel-management-unstable-v1 | 22 | | A | complete | 1.3.6 | wlr-protocol | wlr-layer-shell-unstable-v1 | 23 | | A | complete | 1.3.7 | wlr-protocol | wlr-output-management-unstable-v1 | 24 | | A | complete | 2.1.2 | resistance | `screenEdgeStrength` | DEVIATION Can be negative 25 | | A | complete | 2.4.1 | theme | `name` | 26 | | A | complete | 2.4.6 | theme | `` | 27 | | A | complete | 2.8.3 | keyboard | `keybind` | See section 3.1 28 | | A | complete | 2.9.2 | mouse | `doubleClickTime` | 29 | | A | complete | 2.9.3 | mouse | `context` | 30 | | A | complete | 3.1.1 | keyboard keybind | `key` | 31 | | A | complete | 3.1.2 | keyboard keybind | `action.name` | 32 | | A | complete | 3.1.3 | keyboard keybind | `action.menu` | 33 | | A | complete | 3.1.4 | keyboard keybind | Support modifier keys | 34 | | A | complete | 3.2.1 | mouse binding | `context.name` | 35 | | A | complete | 3.2.2 | mouse binding | `mousebind.button` | 36 | | A | complete | 3.2.3 | mouse binding | `mousebind.action` | 37 | | A | complete | 3.3.5 | mouse context | `Titlebar` | 38 | | A | complete | 3.3.15 | mouse context | `Iconfiy` | 39 | | A | complete | 3.3.16 | mouse context | `Maximize` | 40 | | A | complete | 3.3.17 | mouse context | `Close` | 41 | | A | complete | 3.4.1 | mouse button | `Left` | 42 | | A | complete | 3.4.1 | mouse button | `Right` | 43 | | A | complete | 3.5.1 | mouse event | `Press` | 44 | | A | complete | 3.5.2 | mouse event | `Click` | 45 | | A | complete | 3.5.3 | mouse event | `DoubleClick` | 46 | | A | complete | 4.1 | global action | `Execute` | 47 | | A | complete | 4.2.1 | global action | `ShowMenu` | 48 | | A | complete | 4.3 | global action | `NextWindow` | 49 | | A | complete | 4.12 | global action | `Reconfigure` | 50 | | A | complete | 4.14 | global action | `Exit` | 51 | | A | complete | 5.1 | window action | `Focus` | 52 | | A | complete | 5.2 | window action | `Raise` | 53 | | A | complete | 5.7 | window action | `Iconify` | 54 | | A | complete | 5.8 | window action | `Close` | 55 | | A | complete | 5.13 | window action | `ToggleMaximize` | 56 | | A | complete | 5.21 | window action | `Move` | 57 | | A | complete | 5.22 | window action | `Resize` | 58 | | A | complete | 6.1.1 | geometry | `border.width` | 59 | | A | complete | 6.1.3 | geometry | `menu.separator.width` | 60 | | A | complete | 6.1.6 | geometry | `osd.border.width` | 61 | | A | complete | 6.2.1 | border colors | `window.active.border.color` | 62 | | A | complete | 6.2.3 | border colors | `window.inactive.border.color` | 63 | | A | complete | 6.2.5 | border colors | `border.color` | 64 | | A | complete | 6.2.9 | border colors | `osd.border.color` | 65 | | A | complete | 6.3.1 | titlebar colors | `window.active.label.text.color` | 66 | | A | complete | 6.3.2 | titlebar colors | `window.inactive.label.text.color` | 67 | | A | complete | 6.3.3 | titlebar colors | `window.active.button.unpressed.image.color` | 68 | | A | complete | 6.3.11 | titlebar colors | `window.inactive.button.unpressed.image.color` | 69 | | A | complete | 6.4.1 | active window textures | `window.active.title.bg` | 70 | | A | complete | 6.8.2 | menu colors | `menu.items.text.color` | 71 | | A | complete | 6.8.4 | menu colors | `menu.items.active.text.color` | 72 | | A | complete | 6.8.6 | menu colors | `menu.separator.color` | 73 | | A | complete | 6.9.1 | menu textures | `menu.items.bg` | 74 | | A | complete | 6.9.2 | menu textures | `menu.items.active.bg` | 75 | | A | complete | 6.10.1 | osd textures | `osd.bg` | we only set the color 76 | | A | complete | 6.11.1 | osd colors | `osd.label.text.color` | 77 | | A | complete | 6.15.1.1 | theme button base | `max.xbm` | 78 | | A | complete | 6.15.1.3 | theme button base | `iconify.xbm` | 79 | | A | complete | 6.15.1.4 | theme button base | `close.xbm` | 80 | | A | complete | 7.1.1 | menu syntax general | `id` | 81 | | A | complete | 7.2.1 | menu syntax item | `label` | 82 | | A | complete | 7.2.3 | menu syntax item | `action` | 83 | | A | complete | 7.3.1 | menu syntax separator | `` | For separator line only 84 | | A | complete | 8.1.1 | extra | Support rounded top window corners | rc.xml `` 85 | | B | complete | 1.1.16 | general | Support `--session` option | 86 | | B | complete | 1.2.1 | wayland-protocol | [presentation-time] | 87 | | B | complete | 1.2.2 | wayland-protocol | [viewporter] | 88 | | B | complete | 1.2.4 | wayland-protocol | fullscreen-shell-unstable-v1 | 89 | | B | complete | 1.2.5 | wayland-protocol | idle-inhibit-unstable-v1 | 90 | | B | | 1.2.6.1 | wayland-protocol | input-method-unstable-v1 | 91 | | B | complete | 1.2.6.2 | wayland-protocol | input-method-unstable-v2 | 92 | | B | | 1.2.7 | wayland-protocol | input-timestamps-unstable-v1 | 93 | | B | | 1.2.8 | wayland-protocol | keyboard-shortcuts-inhibit-unstable-v1 | This is controversial [^3] 94 | | B | | 1.2.9 | wayland-protocol | linux-dmabuf-unstable-v1 | 95 | | B | | 1.2.10 | wayland-protocol | linux-explicit-synchronization-unstable-v1 | 96 | | B | complete | 1.2.11 | wayland-protocol | pointer-constraints-unstable-v1 | 97 | | B | | 1.2.12 | wayland-protocol | pointer-gestures-unstable-v1 | 98 | | B | complete | 1.2.13 | wayland-protocol | primary-selection-unstable-v1 | 99 | | B | complete | 1.2.14 | wayland-protocol | relative-pointer-unstable-v1 | 100 | | B | complete | 1.2.15 | wayland-protocol | tablet-v2-manager | 101 | | B | complete | 1.2.16 | wayland-protocol | text-input-unstable-v3 | 102 | | B | complete | 1.2.17 | wayland-protocol | xdg-decoration-unstable-v1 | 103 | | B | complete | 1.2.18.1 | wayland-protocol | xdg-foreign-v1 | 104 | | B | complete | 1.2.18.2 | wayland-protocol | xdg-foreign-v2 | 105 | | B | complete | 1.2.19 | wayland-protocol | xdg-output-unstable-v1 | 106 | | B | | 1.2.20 | wayland-protocol | xwayland-keyboard-grab-unstable-v1 | 107 | | B | complete | 1.2.21 | wayland-protocol | drm-lease-v1 | 108 | | B | complete | 1.2.22 | wayland-protocol | [ext-session-lock-v1] | This is more secure [^1] 109 | | B | complete | 1.2.23 | wayland-protocol | xdg-activation-v1 | 110 | | B | complete | 1.2.24 | wayland-protocol | single-pixel-buffer-v1 | 111 | | B | complete | 1.2.25 | wayland-protocol | cursor-shape-v1 | 112 | | B | complete | 1.2.26 | wayland-protocol | fractional-scale-v1 | 113 | | B | complete | 1.2.27 | wayland-protocol | tearing-control-manager-v1 | 114 | | B | | 1.2.28 | wayland-protocol | content-type-v1 | 115 | | B | complete | 1.2.29 | wayland-protocol | xwayland-shell-v1 | 116 | | B | complete | 1.2.30 | wayland-protocol | security-context-v1 | Note: initial support only 117 | | B | complete | 1.2.31 | wayland-protocol | cosmic-workspace | 118 | | B | complete | 1.2.32 | wayland-protocol | ext-workspace | 119 | | B | complete | 1.2.33 | wayland-protocol | ext-foreign-toplevel-list | 120 | | B | complete | 1.3.1 | wlr-protocol | wlr-data-control-unstable-v1 | 121 | | B | complete | 1.3.2 | wlr-protocol | wlr-export-dmabuf-unstable-v1 | 122 | | B | complete | 1.3.4 | wlr-protocol | wlr-gamma-control-unstable-v1 | 123 | | B | complete | 1.3.5 | wlr-protocol | wlr-input-inhibitor-unstable-v1 | 124 | | B | complete | 1.3.8 | wlr-protocol | wlr-output-power-management-unstable-v1 | 125 | | B | complete | 1.3.9 | wlr-protocol | wlr-screencopy-unstable-v1 | 126 | | B | complete | 1.3.10 | wlr-protocol | wlr-virtual-pointer-unstable-v1 | 127 | | B | complete | 1.3.11 | wlr-protocol | [kde-server-decoration] | xdg-decoration is preferable, but we support this until GTK move across 128 | | B | | 2.1.1 | resistance | `strength` | If we implement, consider a better name 129 | | B | complete | 2.1.3 | resistance | `windowEdgeStrength` | EXTRA 130 | | B | complete | 2.1.4 | resistance | `unSnapThreshold` | EXTRA 131 | | B | complete | 2.1.5 | resistance | `unMaximizeThreshold` | EXTRA 132 | | B | complete | 2.2.3 | focus | `followMouse` | 133 | | B | complete | 2.2.5 | focus | `followMouseRequiresMovement` | DEVIATION It is called `underMouse` in Openbox 134 | | B | complete | 2.2.6 | focus | `raiseOnFocus` | 135 | | B | complete | 2.3.1 | placement | `policy` | 136 | | B | complete | 2.3.1.1 | placement | `automatic` | DEVIATION: similar to Openbox's `Smart` 137 | | B | complete | 2.3.1.2 | placement | `cursor` | DEVIATION: like Openbox's `UnderMouse` 138 | | B | complete | 2.3.1.3 | placement | `center` | EXTRA 139 | | B | complete | 2.3.1.4 | placement | `cascade` | EXTRA 140 | | B+ | complete | 2.4.2.1 | theme | `` | DEVIATION: Replaces `titleLayout` in Openbox 141 | | B+ | complete | 2.4.2.2 | theme | `` | DEVIATION: Replaces `titleLayout` in Openbox 142 | | B | complete | 2.4.4 | theme | `keepBorder` | DEVIATION: gives ToggleDeocration 3 states 143 | | B | complete | 2.4.7 | theme | `` | 144 | | B | complete | 2.4.8 | theme | `` | 145 | | B | complete | 2.4.9 | theme | `` | 146 | | B | complete | 2.4.10 | theme | `` | 147 | | B | complete | 2.4.11 | theme | `font.name` | 148 | | B | complete | 2.4.12 | theme | `font.size` | 149 | | B | complete | 2.4.13 | theme | `font.weight` | 150 | | B | complete | 2.4.14 | theme | `font.slant` | 151 | | B | complete | 2.4.14.1 | theme | `font.slant: normal` | 152 | | B | complete | 2.4.14.2 | theme | `font.slant: italic` | 153 | | B | complete | 2.4.14.3 | theme | `font.slant: oblique` | EXTRA 154 | | B | complete | 2.4.15 | theme | `dropShadows` | EXTRA 155 | | B | complete | 2.4.16 | theme | `icon` | EXTRA 156 | | B | complete | 2.4.17 | theme | `fallbackAppIcon` | EXTRA 157 | | B | complete | 2.5.1 | desktop | `number` | 158 | | B | complete | 2.5.3 | desktop | `popupTime` | 159 | | B | complete | 2.5.4 | desktop | `names` | 160 | | B | complete | 2.5.5 | desktop | `prefix` | EXTRA 161 | | B | complete | 2.6.1 | resize | drawContents | 162 | | B | complete | 2.6.2 | resize | popupShow | 163 | | B | | 2.6.3 | resize | popupPosition | 164 | | B | | 2.6.4 | resize | popupFixedposition | 165 | | B | | 2.6.5 | resize | cornerRange | EXTRA 166 | | B | | 2.6.6 | resize | minimumArea | EXTRA 167 | | B | complete | 2.7.1 | window rules | `windowRule` | EXTRA 168 | | B | complete | 2.7.2.1 | window rule criteria | `windowRule.identifier` | EXTRA 169 | | B | complete | 2.7.2.2 | window rule criteria | `windowRule.title` | EXTRA 170 | | B | complete | 2.7.2.3 | window rule criteria | `windowRule.matchOnce` | EXTRA 171 | | B | complete | 2.7.3.1 | window rule property | `windowRule.serverDecoration` | EXTRA 172 | | B | complete | 2.7.3.2 | window rule property | `windowRule.skipTaskbar` | EXTRA 173 | | B | complete | 2.7.3.3 | window rule property | `windowRule.skipWindowSwitcher` | EXTRA 174 | | B | complete | 2.7.3.4 | window rule property | `windowRule.ignoreFocusRequest` | EXTRA 175 | | B | complete | 2.7.3.5 | window rule property | `windowRule.fixedPosition` | EXTRA 176 | | B | complete | 2.7.3.6 | window rule property | `windowRule.ignoreConfigureRequest` | EXTRA 177 | | B | complete | 2.7.3.7 | window rule property | `windowRule.wantAbsorbedModifierReleaseEvents` | EXTRA 178 | | B | complete | 2.7.4 | window rule type | `windowRule.type` | EXTRA 179 | | B | complete | 2.7.5.1 | window rule condition | `windowRule.type` | EXTRA 180 | | B | complete | 2.8.4 | keyboard | `numlock` | EXTRA 181 | | B | complete | 2.8.5 | keyboard | `layoutScope` | EXTRA 182 | | B | complete | 2.9.4 | mouse | `scrollFactor` | EXTRA 183 | | B | complete | 2.9a.1 | touch | `deviceName` | EXTRA 184 | | B | complete | 2.9a.2 | touch | `mapToOutput` | EXTRA 185 | | B | complete | 2.9b.1 | tablet | `mapToOutput` | EXTRA 186 | | B | complete | 2.9b.2 | tablet | `rotate` | EXTRA 187 | | B | complete | 2.9b.3 | tablet | `area` | EXTRA 188 | | B | complete | 2.9b.4 | tablet | `map` | EXTRA 189 | | B | complete | 2.9c.1 | tablet tool | `tabletTool` | EXTRA 190 | | B | complete | 2.10.1 | margins | `` | 191 | | B | complete | 2.11.1 | menu | `ignoreButtonReleasePeriod` | DEVIATION: called `hideDelay` in openbox 192 | | B+ | | 2.11.3 | menu | `submenuShowDelay` | 193 | | B | complete | 2.11.4 | menu | `showIcons` | DEVIATION: called `applicationIcons` in Openbox 194 | | B | | 2.11.6 | menu | `file` | TODO: is this supported already? 195 | | B | complete | 2.13.1 | core | `decoration` | EXTRA 196 | | B | complete | 2.13.2 | core | `gap` | EXTRA 197 | | B | complete | 2.13.3 | core | `adaptiveSync` | EXTRA 198 | | B | complete | 2.13.4 | core | `reuseOutputMode` | EXTRA 199 | | B | complete | 2.13.5 | core | `xwaylandPersistence` | EXTRA 200 | | B | complete | 2.13.6 | core | `allowTearing` | EXTRA 201 | | B | complete | 2.13.7 | core | `autoEnableOutputs` | EXTRA 202 | | B | complete | 2.14.1 | window switcher | `show` | EXTRA 203 | | B | complete | 2.14.2 | window switcher | `preview` | EXTRA 204 | | B | complete | 2.14.3 | window switcher | `outlines` | EXTRA 205 | | B | complete | 2.14.4.1 | window switcher | `fields.field.content` | EXTRA 206 | | B | complete | 2.14.4.2 | window switcher | `fields.field.width` | EXTRA 207 | | B | complete | 2.14.5 | window switcher | `allWorkspaces` | EXTRA 208 | | B | complete | 3.6.1 | libinput | naturalScroll | EXTRA 209 | | B | complete | 3.6.2 | libinput | leftHanded | EXTRA 210 | | B | complete | 3.6.3 | libinput | pointerSpeed | EXTRA 211 | | B | complete | 3.6.4 | libinput | accelProfile | EXTRA 212 | | B | complete | 3.6.5 | libinput | tap | EXTRA 213 | | B | complete | 3.6.6 | libinput | tapButtonMap | EXTRA 214 | | B | complete | 3.6.7 | libinput | tapAndDrag | EXTRA 215 | | B | complete | 3.6.8 | libinput | dragLock | EXTRA 216 | | B | complete | 3.6.9 | libinput | middleEmulation | EXTRA 217 | | B | complete | 3.6.10 | libinput | disableWhiteTyping | EXTRA 218 | | B | complete | 3.6.11 | libinput | clickMethod | EXTRA 219 | | B | complete | 3.6.12 | libinput | sendEventsMode | EXTRA 220 | | B | complete | 3.6.13 | libinput | calibrationMatrix | EXTRA 221 | | B | complete | 3.1.6 | keyboard binding | `default` | EXTRA 222 | | B | complete | 3.1.7 | keyboard binding | `layoutDependent` | EXTRA 223 | | B | complete | 3.1.8 | keyboard binding | `onRelease` | EXTRA 224 | | B | complete | 3.1.9 | keyboard binding | `allowWhenLocked` | EXTRA 225 | | B | complete | 3.2.4 | mouse binding | `default` | EXTRA 226 | | B | complete | 3.3.1 | mouse context | `Frame` | 227 | | B | complete | 3.3.2 | mouse context | `Client` | 228 | | B | complete | 3.3.3 | mouse context | `Desktop` | 229 | | B | complete | 3.3.4 | mouse context | `Root` | DEVIATION [^2] 230 | | B | complete | 3.3.6 | mouse context | `Top` | 231 | | B | complete | 3.3.7 | mouse context | `Bottom` | 232 | | B | complete | 3.3.8 | mouse context | `Left` | 233 | | B | complete | 3.3.9 | mouse context | `Right` | 234 | | B | complete | 3.3.10 | mouse context | `TLCorner` | 235 | | B | complete | 3.3.11 | mouse context | `TRCorner` | 236 | | B | complete | 3.3.12 | mouse context | `BLCorner` | 237 | | B | complete | 3.3.13 | mouse context | `BRCorner` | 238 | | B | | 3.3.14 | mouse context | `Icon` | 239 | | B | complete | 3.3.21 | mouse context | `Title` | EXTRA 240 | | B | | 3.4.1 | mouse button | `Middle` | 241 | | B | complete | 3.4.1 | mouse button | `Up` (scroll) | 242 | | B | complete | 3.4.1 | mouse button | `Down` (scroll) | 243 | | B | | 3.5.4 | mouse event | `Release` | 244 | | B | complete | 3.5.5 | mouse event | `Drag` | 245 | | B | complete | 3.5.6 | mouse event | `Scroll` | DEVIATION: Scroll is used instead of Click for mouse-buttons Up/Down 246 | | B | complete | 4.2.2 | global action | `ShowMenu.menu` | 247 | | B | complete | 4.2.3 | global action | `ShowMenu.atCursor` | EXTRA 248 | | B | complete | 4.2.4 | global action | `ShowMenu.position` | 249 | | B | | 4.5 | global action | `DirectionalCycleWindows` | 250 | | B | | 4.6 | global action | `DirectionalTargetWindows` | 251 | | B | complete | 4.7 | global action | `GoToDesktop` | 252 | | B | complete | 4.7.1 | global action | `GoToDesktop.to` | 253 | | B | complete | 4.7.1.1 | global action | `GoToDesktop.to::last` | 254 | | B | complete | 4.7.1.2 | global action | `GoToDesktop.to::right` | 255 | | B | complete | 4.7.1.3 | global action | `GoToDesktop.to::left` | 256 | | B | complete | 4.7.2 | global action | `GoToDesktop.wrap` | 257 | | B | | 4.8 | global action | `AddDesktop` | 258 | | B | | 4.9 | global action | `RemoveDesktop` | 259 | | B | | 4.10 | global action | `ToggleShowDesktop` | 260 | | B | complete | 4.16 | global action | `Debug` | EXTRA 261 | | B | complete | 4.17 | global action | `None` | EXTRA Removes other actions within mouse bindings 262 | | B | complete | 4.18 | global action | `Kill` | EXTRA Send SIGTERM 263 | | B | complete | 4.19 | global action | `FocusOutput` | EXTRA 264 | | B | complete | 4.20 | global action | `ToggleKeybinds` | EXTRA 265 | | B | complete | 4.21 | global action | `VirtualOutputAdd` | EXTRA 266 | | B | complete | 4.22 | global action | `VirtualOutputRemove` | EXTRA 267 | | B | complete | 4.23 | global action | `ToggleTabletMouseEmulation` | EXTRA 268 | | B | complete | 4.24 | global action | `ZoomIn` | EXTRA 269 | | B | complete | 4.25 | global action | `ZoomOut` | EXTRA 270 | | B | complete | 4.26 | global action | `EnableTabletMouseEmulation` | EXTRA 271 | | B | complete | 4.27 | global action | `DisableTabletMouseEmulation` | EXTRA 272 | | B | complete | 4.28 | global action | `WarpCursor` | EXTRA 273 | | B | complete | 5.3 | window action | `Lower` | 274 | | B | | 5.4 | window action | `RaiseLower` | 275 | | B | complete | 5.5 | window action | `Unfocus` | 276 | | B | | 5.6 | window action | `FocusToBottom` | 277 | | B | complete | 5.9 | window action | `ToggleShade` | 278 | | B | complete | 5.10 | window action | `Shade` | 279 | | B | complete | 5.11 | window action | `Unshade` | 280 | | B | complete | 5.12 | window action | `ToggleOmnipresent` | aka sticky 281 | | B | | 5.13.1 | window action | `ToggleMaximize.direction` | 282 | | B | complete | 5.14 | window action | `Maximize` | 283 | | B | | 5.14.1 | window action | `Maximize.direction` | 284 | | B | complete | 5.15 | window action | `Unmaximize` | 285 | | B | | 5.15.1 | window action | `Unmaximize.direction` | 286 | | B | complete | 5.16 | window action | `ToggleFullscreen` | 287 | | B | complete | 5.17.1 | window action | `ToggleDecorations` | 288 | | B | complete | 5.17.2 | window action | `SetDecorations` | EXTRA 289 | | B | | 5.18 | window action | `Decorate` | 290 | | B | | 5.19 | window action | `Undecorate` | 291 | | B | complete | 5.20 | window action | `SendToDesktop` | 292 | | B | complete | 5.20.1 | window action | `SendToDesktop.to` | EXTRA: support value 'current' 293 | | B | complete | 5.20.2 | window action | `SendToDesktop.follow` | 294 | | B | complete | 5.20.3 | window action | `SendToDesktop.wrap` | 295 | | B | complete | 5.23.1 | window action | `MoveTo` | DEVIATION: `MoveResizeTo` in Openbox 296 | | B | complete | 5.23.2 | window action | `ResizeTo` | 297 | | B | complete | 5.24 | window action | `MoveRelative` | 298 | | B | complete | 5.25 | window action | `ResizeRelative` | 299 | | B | complete | 5.26 | window action | `MoveToEdge` | 300 | | B | complete | 5.26.1 | window action | `MoveToEdge.snapWindows` | EXTRA 301 | | B | complete | 5.27 | window action | `GrowToEdge` | 302 | | B | | 5.28 | window action | `GrowToFill` | 303 | | B | complete | 5.29 | window action | `ShrinkToEdge` | 304 | | B | complete | 5.30 | window action | `If` | 305 | | B | complete | 5.31.1 | window action | `ForEach` | 306 | | B | complete | 5.31.2 | window action | `ForEach.none` | EXTRA 307 | | B | complete | 5.33 | window action | `ToggleAlwaysOnTop` | 308 | | B | complete | 5.34 | window action | `ToggleAlwaysOnBottom` | 309 | | B | complete | 5.36 | window action | `SnapToEdge` | EXTRA 310 | | B | complete | 5.37 | window action | `SnapToRegion` | EXTRA 311 | | B | complete | 5.38 | window action | `MoveToCursor` | EXTRA 312 | | B | complete | 5.39 | window action | `MoveToOutput` | EXTRA 313 | | B | complete | 5.40 | window action | `AutoPlace` | EXTRA 314 | | B | complete | 5.41 | window action | `ToggleSnapToEdge` | EXTRA 315 | | B | complete | 5.42 | window action | `ToggleSnapToRegion` | EXTRA 316 | | B | complete | 5.43 | window action | `UnSnap` | EXTRA 317 | | B | complete | 6.1.2 | geometry | `menu.border.width` | 318 | | B | complete | 6.1.4 | geometry | `menu.separator.padding.width` | 319 | | B | complete | 6.1.5 | geometry | `menu.separator.padding.height` | 320 | | B | | 6.1.10 | geometry | `padding.width` | 321 | | B | complete | 6.1.11 | geometry | `padding.height` | 322 | | B | complete | 6.1.11.1 | geometry | `titlebar.height` | EXTRA 323 | | B | complete | 6.1.12 | geometry | `menu.overlap.x` | 324 | | B | complete | 6.1.13 | geometry | `menu.overlap.y` | 325 | | B | | 6.1.14 | geometry | `menu.overlap` | 326 | | B | complete | 6.1.15 | geometry | `menu.width.min` | EXTRA 327 | | B | complete | 6.1.16 | geometry | `menu.width.max` | EXTRA 328 | | B | complete | 6.1.17 | geometry | `menu.items.padding.x` | EXTRA 329 | | B | complete | 6.1.18 | geometry | `menu.items.padding.y` | EXTRA 330 | | B | complete | 6.1.19.1 | geometry | `osd.window-switcher.width` | EXTRA 331 | | B | complete | 6.1.19.2 | geometry | `osd.window-switcher.item.padding.x` | EXTRA 332 | | B | complete | 6.1.19.3 | geometry | `osd.window-switcher.item.padding.y` | EXTRA 333 | | B | complete | 6.1.19.4 | geometry | `osd.window-switcher.padding` | EXTRA 334 | | B | complete | 6.1.19.5 | geometry | `osd.window-switcher.item.active.border.width` | EXTRA 335 | | B | complete | 6.1.20.1 | geometry | `osd.workspace-switcher.boxes.width` | EXTRA 336 | | B | complete | 6.1.20.2 | geometry | `osd.workspace-switcher.boxes.height` | EXTRA 337 | | B | complete | 6.1.21.1 | geometry | `window.button.width` | EXTRA 338 | | B | complete | 6.1.21.2 | geometry | `window.button.height` | EXTRA 339 | | B | complete | 6.1.21.3 | geometry | `window.button.spacing` | EXTRA 340 | | B | complete | 6.1.21.3 | geometry | `window.button.hover.bg.corner-radius` | EXTRA 341 | | B | complete | 6.1.22.1 | geometry | `window.titlebar.padding.width` | EXTRA 342 | | B | complete | 6.1.22.2 | geometry | `window.titlebar.padding.height` | EXTRA 343 | | B | | 6.2.2 | border colors | `window.active.title.separator.color` | 344 | | B | | 6.2.4 | border colors | `window.inactive.title.separator.color` | 345 | | B | | 6.2.6 | border colors | `window.active.client.color` | 346 | | B | | 6.2.7 | border colors | `window.inactive.client.color` | 347 | | B | complete | 6.2.8 | border colors | `menu.border.color` | 348 | | B | | 6.3.4 | titlebar colors | `window.active.button.pressed.image.color` | 349 | | B | | 6.3.5 | titlebar colors | `window.active.button.disabled.image.color` | 350 | | B | | 6.3.6 | titlebar colors | `window.active.button.hover.image.color` | 351 | | B | | 6.3.7 | titlebar colors | `window.active.button.toggled.unpressed.image.color` | 352 | | B | | 6.3.8 | titlebar colors | `window.active.button.toggled.pressed.image.color` | 353 | | B | | 6.3.9 | titlebar colors | `window.active.button.toggled.hover.image.color` | 354 | | B | | 6.3.10 | titlebar colors | `window.active.button.toggled.image.color` | 355 | | B | | 6.3.12 | titlebar colors | `window.inactive.button.pressed.image.color` | 356 | | B | | 6.3.13 | titlebar colors | `window.inactive.button.disabled.image.color` | 357 | | B | | 6.3.14 | titlebar colors | `window.inactive.button.hover.image.color` | 358 | | B | | 6.3.15 | titlebar colors | `window.inactive.button.toggled.unpressed.image.color` | 359 | | B | | 6.3.16 | titlebar colors | `window.inactive.button.toggled.pressed.image.color` | 360 | | B | | 6.3.17 | titlebar colors | `window.inactive.button.toggled.hover.image.color` | 361 | | B | | 6.3.18 | titlebar colors | `window.inactive.button.toggled.image.color` | 362 | | B | | 6.4.2 | active window textures | `window.active.label.bg` | 363 | | B | | 6.4.4 | active window textures | `window.active.grip.bg` | 364 | | B | complete | 6.4.5 | active window textures | `window.active.shadow.size` | EXTRA 365 | | B | complete | 6.4.6 | active window textures | `window.active.shadow.color` | EXTRA 366 | | B | | 6.6.1 | active window button textures | `window.active.button.unpressed.bg` | 367 | | B | | 6.6.2 | active window button textures | `window.active.button.pressed.bg` | 368 | | B | | 6.6.3 | active window button textures | `window.active.button.hover.bg` | 369 | | B | | 6.6.4 | active window button textures | `window.active.button.disabled.bg` | 370 | | B | | 6.6.5 | active window button textures | `window.active.button.toggled.unpressed.bg` | 371 | | B | | 6.6.6 | active window button textures | `window.active.button.toggled.pressed.bg` | 372 | | B | | 6.6.7 | active window button textures | `window.active.button.toggled.hover.bg` | 373 | | B | | 6.6.8 | active window button textures | `window.active.button.toggled.bg` | 374 | | B | | 6.7.1 | inactive window button textures | `window.inactive.button.unpressed.bg` | 375 | | B | | 6.7.2 | inactive window button textures | `window.inactive.button.pressed.bg` | 376 | | B | | 6.7.3 | inactive window button textures | `window.inactive.button.hover.bg` | 377 | | B | | 6.7.4 | inactive window button textures | `window.inactive.button.disabled.bg` | 378 | | B | | 6.7.5 | inactive window button textures | `window.inactive.button.toggled.unpressed.bg` | 379 | | B | | 6.7.6 | inactive window button textures | `window.inactive.button.toggled.pressed.bg` | 380 | | B | | 6.7.7 | inactive window button textures | `window.inactive.button.toggled.hover.bg` | 381 | | B | | 6.7.8 | inactive window button textures | `window.inactive.button.toggled.bg` | 382 | | B | complete | 6.8.1 | menu colors | `menu.title.text.color` | 383 | | B | | 6.8.3 | menu colors | `menu.items.disabled.text.color` | 384 | | B | | 6.8.5 | menu colors | `menu.items.active.disabled.text.color` | 385 | | B | complete | 6.9.3 | menu textures | `menu.title.bg` | 386 | | B | | 6.10.3 | osd textures | `osd.hilight.bg` | for desktop osd only 387 | | B | | 6.10.4 | osd textures | `osd.unhilight.bg` | for desktop osd only 388 | | B | | 6.11.2 | osd colors | `osd.hilight.bg.color` | for desktop osd only 389 | | B | | 6.11.3 | osd colors | `osd.unhilight.bg.color` | for desktop osd only 390 | | B | complete | 6.12.1 | text justification | `window.label.text.justify` | 391 | | B | complete | 6.12.2 | text justification | `menu.title.text.justify` | 392 | | B | complete | 6.15.1.2 | theme button base | `max_toggled.xbm` | 393 | | B | complete | 6.15.1.5 | theme button base | `desk.xbm` | 394 | | B | complete | 6.15.1.6 | theme button base | `desk_toggled.xbm` | 395 | | B | complete | 6.15.1.7 | theme button base | `shade.xbm` | 396 | | B | complete | 6.15.1.8 | theme button base | `shade_toggled.xbm` | 397 | | B | | 6.15.1.9 | theme button base | `bullet.xbm` | 398 | | B | complete | 6.15.1.1 | theme button base | `menu.xbm` | EXTRA 399 | | B | complete | 6.15.2.1 | theme button variant | `_hover` | 400 | | B | | 6.15.2.2 | theme button variant | `_pressed` | 401 | | B | | 6.15.2.3 | theme button variant | `_disabled` | 402 | | B+ | complete | 6.15.3 | theme button png | Support png buttons | EXTRA 403 | | B+ | complete | 6.15.4 | theme button svg | Support svg buttons | EXTRA 404 | | B | complete | 6.16.1 | text window switcher | `osd.window-switcher.width` | EXTRA 405 | | B | complete | 6.16.2 | text window switcher | `osd.window-switcher.padding` | EXTRA 406 | | B | complete | 6.16.3 | text window switcher | `osd.window-switcher.item.padding.x` | EXTRA 407 | | B | complete | 6.16.4 | text window switcher | `osd.window-switcher.item.padding.y` | EXTRA 408 | | B | complete | 6.16.5 | text window switcher | `osd.window-switcher.item.active.border.width` | EXTRA 409 | | B | complete | 6.16.6 | text window switcher | `osd.window-switcher.preview.border.width` | EXTRA 410 | | B | complete | 6.16.7 | text window switcher | `osd.window-switcher.preview.border.color` | EXTRA 411 | | B | complete | 6.16.8 | text window switcher | `osd.window-switcher.preview.boxes.width` | EXTRA 412 | | B | complete | 6.16.9 | text window switcher | `osd.window-switcher.preview.boxes.height` | EXTRA 413 | | B | complete | 7.0.1 | menu general | Parse menu.xml in accordance with Openbox 3.6 spec | 414 | | B | complete | 7.0.2 | menu general | Handle pointer input | 415 | | B+ | complete | 7.0.3 | menu general | Handle keyboard input | 416 | | B | complete | 7.1.2 | menu syntax general | `label` | 417 | | B+ | complete | 7.1.4 | menu syntax general | `execute` | Pipe-menus 418 | | B | complete | 7.3.2 | menu syntax separator | `` | For separator with text 419 | | B | complete | 7.4.1 | menu builtin | `client-list-combined-menu` | 420 | | B | complete | 7.4.4 | menu builtin | `client-send-to-menu` | 421 | | B | complete | 7.4.6 | menu builtin | `root-menu` | 422 | | B | complete | 8.2.1 | extra | `` | 423 | | B | complete | 8.2.2 | extra | `` | 424 | | B | complete | 8.2.3 | extra | `` | 425 | | B | complete | 8.2.4 | extra | `` | 426 | | B | complete | 8.2.5 | extra | `` | 427 | | B | complete | 9.1.1 | Regions | `` | 428 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Scope 2 | 3 | - [Introduction](#introduction) 4 | - [Categorisation](#categorisation) 5 | - [Priorities](#priorities) 6 | - [Sections](#sections) 7 | - [Filtered Views](#filtered-views) 8 | - [Requirements](#requirements) 9 | - General and Protocols 10 | - [1.1 General](#11-general) 11 | - [1.2 Wayland Protocols](#12-wayland-protocols) 12 | - [1.3 wlroots Protocols](#13-wlroots-protocols) 13 | - Configuration 14 | - [2.1 Resistance](#21-configuration---resistance) 15 | - [2.2 Focus](#22-configuration---focus) 16 | - [2.3 Placement](#23-configuration---placement) 17 | - [2.4 Theme](#24-configuration---theme) 18 | - [2.5 Desktop](#25-configuration---desktop) 19 | - [2.6 Resize](#26-configuration---resize) 20 | - [2.7 Window Rules](#27-configuration---window-rules) 21 | - [2.8 Keyboard](#28-configuration---keyboard) 22 | - [2.9 Mouse](#29-configuration---mouse) 23 | - [2.10 Margins](#210-configuration---margins) 24 | - [2.11 Menu](#211-configuration---menu) 25 | - [2.12 Dock](#212-configuration---dock) 26 | - [2.13 Core](#213-configuration---core) 27 | - [2.14 Window Switcher](#214-configuration---window-switcher) 28 | - [2.15 Libinput](#215-configuration---libinput) 29 | - Bindings 30 | - [3.1 Keyboard](#31-configuration---keyboard-keybind) 31 | - [3.2 Mouse](#32-configuration---mouse-binding) 32 | - [3.3 Mouse Contexts](#33-configuration---mouse-context) 33 | - [3.4 Mouse Buttons](#34-configuration---mouse-button) 34 | - [3.5 Mouse Events](#35-configuration---mouse-event) 35 | - Actions 36 | - [4 Global Actions](#4-global-actions) 37 | - [5 Window Actions](#5-window-actions) 38 | - Theme 39 | - [6.1 Geometry](#61-theme---geometry) 40 | - [6.2 Border Colors](#62-theme---border-colors) 41 | - [6.3 Titlebar Colors](#63-theme---titlebar-colors) 42 | - [6.4 Active Window Textures](#64-theme---active-window-textures) 43 | - [6.5 Inactive Window Textures](#65-theme---inactive-window-textures) 44 | - [6.6 Active Window Button Textures](#66-theme---active-window-button-textures) 45 | - [6.7 Inactive Window Button Textures](#67-theme---inactive-window-button-textures) 46 | - [6.8 Menu Colors](#68-theme---menu-colors) 47 | - [6.9 Menu Textures](#69-theme---menu-textures) 48 | - [6.10 On-Screen-Display Textures](#610-theme---on-screen-display-textures) 49 | - [6.11 On-Screen-Display Colors](#611-theme---on-screen-display-colors) 50 | - [6.12 Text Justification](#612-theme---text-justification) 51 | - [6.13 Text Shadows](#613-theme---text-shadows) 52 | - [6.14 Dialogs](#614-theme---dialogs) 53 | - [6.15 Button Images](#615-theme---buttom-images) 54 | - [6.16 Window Switcher](#615-theme---window-switcher) 55 | - [7 Menus](#7-menus) 56 | - [8 Extra](#8-extra) 57 | - [Appendix A - Terminology](#appendix-a---terminology) 58 | - [Appendix B - IPC](#appendix-b---ipc) 59 | - [Appendix C - Configuration Syntax](#appendix-c---configuration-syntax) 60 | 61 | # Introduction 62 | 63 | In order to reduce commit noise in the main `labwc` repository, scope 64 | is managed here. 65 | 66 | A set of user & system requirements were documented early in the project 67 | (initially on the wiki then in this file) to form a baseline against which 68 | developers can: 69 | 70 | - define what is in-scope and out-of-scope 71 | - measure progress 72 | - record decisions 73 | - declare the intent of the project 74 | - manage expectations 75 | - produce proporitionate design solutions 76 | 77 | This document also help users understand what the project is about and if it is 78 | the sort of compositor they wish to use. 79 | 80 | Acceptance criteria for each requirement is in accordance with openbox 3.6 81 | specification unless other wise stated. 82 | 83 | # Categorisation 84 | 85 | Requirements are categorised as follows: 86 | 87 | - `A`: in-scope: "must have" for minimum viable product 88 | - `B+`: in-scope: "should/could have" - likely to implemented at some point 89 | - `B`: discretionary: if devs feel like it and benefits are greater than 90 | cost (burden) of maintenance and complexity 91 | - `C`: out-of-scope: not intended to be implemented 92 | 93 | # Priorities 94 | 95 | 1. Stabilize current scope and fix issues and bugs. This is quite important. 96 | We do not want to spend time on an expanding scope with new features until 97 | the project is reliable at its current scope. 98 | 2. Implement `Cat A` requirements (COMPLETE). 99 | 3. Implement `Cat B+` requirements. 100 | 4. Review `Cat B` requirements and try to demote as many as possible to C 101 | 102 | The graph below shows the current status of cat A and B requirements. 103 | ![graph](graph.png) 104 | 105 | # Sections 106 | 107 | - Requirements are organised into the sections listed below. 108 | - The first digit in the reference number relates to the section. 109 | - Sections 2-7 refer to the the openbox 3.6 specification. For further details 110 | read the respective openbox wiki page. 111 | 112 | 1. General and Protocols 113 | 2. Configuration [http://openbox.org/wiki/Help:Configuration](http://openbox.org/wiki/Help:Configuration) 114 | 3. Bindings [http://openbox.org/wiki/Help:Bindings](http://openbox.org/wiki/Help:Bindings) 115 | 4. Global Actions [http://openbox.org/wiki/Help:Actions](http://openbox.org/wiki/Help:Actions) 116 | 5. Window Actions [http://openbox.org/wiki/Help:Actions](http://openbox.org/wiki/Help:Actions) 117 | 6. Theme [http://openbox.org/wiki/Help:Themes](http://openbox.org/wiki/Help:Themes) 118 | 7. Menus [http://openbox.org/wiki/Help:Menus](http://openbox.org/wiki/Help:Menus) 119 | 8. Extra 120 | 121 | # Filtered Views 122 | 123 | The following filtered views are auto-generated based on the tables in the 124 | Requirements section below. 125 | 126 | - [Deviations](deviations.md): Differences relative to Openbox 3.6 specification 127 | - [Extra](extra.md): Additional features relative to Openbox 3.6 specification 128 | - [Incomplete Cat B items](incomplete-cat-B-items.md) 129 | - [Cat A and B only](all-cat-A-and-B-items.md) 130 | 131 | # Requirements 132 | 133 | ## 1.1 General 134 | 135 | | Cat | Status | Reference | Category | Description | Comment 136 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 137 | | A | complete | 1.1.1 | general | Optionally support Xwayland | 138 | | A | complete | 1.1.2 | general | Parse `/rc.xml` | 139 | | A | complete | 1.1.3 | general | Parse `/environment` | 140 | | A | complete | 1.1.4 | general | Parse `/autostart` | 141 | | A | complete | 1.1.5 | general | Parse `/menu.xml` | 142 | | A | complete | 1.1.6 | general | Parse openbox themes files and associated xbm icons | 143 | | A | complete | 1.1.7 | general | Catch SIGHUP to re-load config file and theme | 144 | | A | complete | 1.1.8 | general | Support both CSD and SSD | 145 | | A | complete | 1.1.9 | general | Support maximize, iconify, close buttons | 146 | | A | complete | 1.1.10 | general | Support damage tracking to reduce CPU usage | 147 | | A | complete | 1.1.11 | general | Support HiDPI | 148 | | A | complete | 1.1.12 | general | Support on-screen display (osd) | 149 | | A | complete | 1.1.13 | general | Support libinput configuration | 150 | | A | complete | 1.1.14 | general | Support drag-n-drop | 151 | | A | complete | 1.1.15 | general | Support input method editors (IME) | 152 | | B | complete | 1.1.16 | general | Support `--session` option | 153 | 154 | ## 1.2 Wayland Protocols 155 | 156 | | Cat | Status | Reference | Category | Description | Comment 157 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 158 | | B | complete | 1.2.1 | wayland-protocol | [presentation-time] | 159 | | B | complete | 1.2.2 | wayland-protocol | [viewporter] | 160 | | A | complete | 1.2.3 | wayland-protocol | [xdg-shell-v3] | 161 | | B | complete | 1.2.4 | wayland-protocol | fullscreen-shell-unstable-v1 | 162 | | B | complete | 1.2.5 | wayland-protocol | idle-inhibit-unstable-v1 | 163 | | B | | 1.2.6.1 | wayland-protocol | input-method-unstable-v1 | 164 | | B | complete | 1.2.6.2 | wayland-protocol | input-method-unstable-v2 | 165 | | B | | 1.2.7 | wayland-protocol | input-timestamps-unstable-v1 | 166 | | B | | 1.2.8 | wayland-protocol | keyboard-shortcuts-inhibit-unstable-v1 | This is controversial [^3] 167 | | B | | 1.2.9 | wayland-protocol | linux-dmabuf-unstable-v1 | 168 | | B | | 1.2.10 | wayland-protocol | linux-explicit-synchronization-unstable-v1 | 169 | | B | complete | 1.2.11 | wayland-protocol | pointer-constraints-unstable-v1 | 170 | | B | | 1.2.12 | wayland-protocol | pointer-gestures-unstable-v1 | 171 | | B | complete | 1.2.13 | wayland-protocol | primary-selection-unstable-v1 | 172 | | B | complete | 1.2.14 | wayland-protocol | relative-pointer-unstable-v1 | 173 | | B | complete | 1.2.15 | wayland-protocol | tablet-v2-manager | 174 | | B | complete | 1.2.16 | wayland-protocol | text-input-unstable-v3 | 175 | | B | complete | 1.2.17 | wayland-protocol | xdg-decoration-unstable-v1 | 176 | | B | complete | 1.2.18.1 | wayland-protocol | xdg-foreign-v1 | 177 | | B | complete | 1.2.18.2 | wayland-protocol | xdg-foreign-v2 | 178 | | B | complete | 1.2.19 | wayland-protocol | xdg-output-unstable-v1 | 179 | | B | | 1.2.20 | wayland-protocol | xwayland-keyboard-grab-unstable-v1 | 180 | | B | complete | 1.2.21 | wayland-protocol | drm-lease-v1 | 181 | | B | complete | 1.2.22 | wayland-protocol | [ext-session-lock-v1] | This is more secure [^1] 182 | | B | complete | 1.2.23 | wayland-protocol | xdg-activation-v1 | 183 | | B | complete | 1.2.24 | wayland-protocol | single-pixel-buffer-v1 | 184 | | B | complete | 1.2.25 | wayland-protocol | cursor-shape-v1 | 185 | | B | complete | 1.2.26 | wayland-protocol | fractional-scale-v1 | 186 | | B | complete | 1.2.27 | wayland-protocol | tearing-control-manager-v1 | 187 | | B | | 1.2.28 | wayland-protocol | content-type-v1 | 188 | | B | complete | 1.2.29 | wayland-protocol | xwayland-shell-v1 | 189 | | B | complete | 1.2.30 | wayland-protocol | security-context-v1 | Note: initial support only 190 | | B | complete | 1.2.31 | wayland-protocol | cosmic-workspace | 191 | | B | complete | 1.2.32 | wayland-protocol | ext-workspace | 192 | | B | complete | 1.2.33 | wayland-protocol | ext-foreign-toplevel-list | 193 | 194 | [presentation-time]: https://gitlab.freedesktop.org/wayland/wayland-protocols/-/tree/main/stable/presentation-time 195 | [viewporter]: https://gitlab.freedesktop.org/wayland/wayland-protocols/-/tree/main/stable/viewporter 196 | [xdg-shell-v3]: https://gitlab.freedesktop.org/wayland/wayland-protocols/-/tree/main/stable/xdg-shell 197 | [ext-session-lock-v1]: https://gitlab.freedesktop.org/wayland/wayland-protocols/-/tree/main/staging/ext-session-lock 198 | 199 | ## 1.3 wlroots Protocols 200 | 201 | | Cat | Status | Reference | Category | Description | Comment 202 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 203 | | B | complete | 1.3.1 | wlr-protocol | wlr-data-control-unstable-v1 | 204 | | B | complete | 1.3.2 | wlr-protocol | wlr-export-dmabuf-unstable-v1 | 205 | | A | complete | 1.3.3 | wlr-protocol | wlr-foreign-toplevel-management-unstable-v1 | 206 | | B | complete | 1.3.4 | wlr-protocol | wlr-gamma-control-unstable-v1 | 207 | | B | complete | 1.3.5 | wlr-protocol | wlr-input-inhibitor-unstable-v1 | 208 | | A | complete | 1.3.6 | wlr-protocol | wlr-layer-shell-unstable-v1 | 209 | | A | complete | 1.3.7 | wlr-protocol | wlr-output-management-unstable-v1 | 210 | | B | complete | 1.3.8 | wlr-protocol | wlr-output-power-management-unstable-v1 | 211 | | B | complete | 1.3.9 | wlr-protocol | wlr-screencopy-unstable-v1 | 212 | | B | complete | 1.3.10 | wlr-protocol | wlr-virtual-pointer-unstable-v1 | 213 | | B | complete | 1.3.11 | wlr-protocol | [kde-server-decoration] | xdg-decoration is preferable, but we support this until GTK move across 214 | 215 | [kde-server-decoration]: https://wayland.app/protocols/kde-server-decoration 216 | 217 | ## 2.1 Configuration - Resistance 218 | 219 | | Cat | Status | Reference | Category | Description | Comment 220 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 221 | | B | | 2.1.1 | resistance | `strength` | If we implement, consider a better name 222 | | A | complete | 2.1.2 | resistance | `screenEdgeStrength` | DEVIATION Can be negative 223 | | B | complete | 2.1.3 | resistance | `windowEdgeStrength` | EXTRA 224 | | B | complete | 2.1.4 | resistance | `unSnapThreshold` | EXTRA 225 | | B | complete | 2.1.5 | resistance | `unMaximizeThreshold` | EXTRA 226 | 227 | ## 2.2 Configuration - Focus 228 | 229 | | Cat | Status | Reference | Category | Description | Comment 230 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 231 | | C | | 2.2.1 | focus | `focusNew` | 232 | | C | | 2.2.2 | focus | `focusLast` | 233 | | B | complete | 2.2.3 | focus | `followMouse` | 234 | | C | | 2.2.4 | focus | `focusDelay` | 235 | | B | complete | 2.2.5 | focus | `followMouseRequiresMovement` | DEVIATION It is called `underMouse` in Openbox 236 | | B | complete | 2.2.6 | focus | `raiseOnFocus` | 237 | 238 | ## 2.3 Configuration - Placement 239 | 240 | ```xml 241 | 242 | cascade|center|automatic|cursor 243 | 244 | ``` 245 | 246 | | Cat | Status | Reference | Category | Description | Comment 247 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 248 | | B | complete | 2.3.1 | placement | `policy` | 249 | | B | complete | 2.3.1.1 | placement | `automatic` | DEVIATION: similar to Openbox's `Smart` 250 | | B | complete | 2.3.1.2 | placement | `cursor` | DEVIATION: like Openbox's `UnderMouse` 251 | | B | complete | 2.3.1.3 | placement | `center` | EXTRA 252 | | B | complete | 2.3.1.4 | placement | `cascade` | EXTRA 253 | | C | | 2.3.2 | placement | `center` | Covered by `center` 254 | 255 | ## 2.4 Configuration - Theme 256 | 257 | | Cat | Status | Reference | Category | Description | Comment 258 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 259 | | A | complete | 2.4.1 | theme | `name` | 260 | | B+ | complete | 2.4.2.1 | theme | `` | DEVIATION: Replaces `titleLayout` in Openbox 261 | | B+ | complete | 2.4.2.2 | theme | `` | DEVIATION: Replaces `titleLayout` in Openbox 262 | | B | complete | 2.4.4 | theme | `keepBorder` | DEVIATION: gives ToggleDeocration 3 states 263 | | C | | 2.4.5 | theme | `animateIconify` | 264 | | A | complete | 2.4.6 | theme | `` | 265 | | B | complete | 2.4.7 | theme | `` | 266 | | B | complete | 2.4.8 | theme | `` | 267 | | B | complete | 2.4.9 | theme | `` | 268 | | B | complete | 2.4.10 | theme | `` | 269 | | B | complete | 2.4.11 | theme | `font.name` | 270 | | B | complete | 2.4.12 | theme | `font.size` | 271 | | B | complete | 2.4.13 | theme | `font.weight` | 272 | | B | complete | 2.4.14 | theme | `font.slant` | 273 | | B | complete | 2.4.14.1 | theme | `font.slant: normal` | 274 | | B | complete | 2.4.14.2 | theme | `font.slant: italic` | 275 | | B | complete | 2.4.14.3 | theme | `font.slant: oblique` | EXTRA 276 | | B | complete | 2.4.15 | theme | `dropShadows` | EXTRA 277 | | B | complete | 2.4.16 | theme | `icon` | EXTRA 278 | | B | complete | 2.4.17 | theme | `fallbackAppIcon` | EXTRA 279 | 280 | ## 2.5 Configuration - Desktop 281 | 282 | The solution shall provide simple workspace setup as follows: 283 | 284 | - [x] a. A workspace covers all outputs 285 | - [x] b. The A-Tab OSD only shows windows from the active workspace 286 | - [x] c. A window can only be in a single workspace at any given point in time 287 | (no tags) 288 | - [x] d. External panels will show all windows. 289 | - [x] e. When activating a window which is on a different workspace the 290 | compositor shall switch to that workspace automatically 291 | - [x] f. Configure workspaces as shown in example below. 292 | 293 | ``` 294 | 295 | 1000 296 | 297 | foo 298 | bar 299 | 300 | 301 | 302 | ``` 303 | 304 | UNDECIDED: Workspace control by clients, for example panels. 305 | It depends on what happens with: 306 | - https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/40 307 | - https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/59 308 | - https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/60 309 | 310 | | Cat | Status | Reference | Category | Description | Comment 311 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 312 | | B | complete | 2.5.1 | desktop | `number` | 313 | | C | | 2.5.2 | desktop | `firstDesk` | Use first `` 314 | | B | complete | 2.5.3 | desktop | `popupTime` | 315 | | B | complete | 2.5.4 | desktop | `names` | 316 | | B | complete | 2.5.5 | desktop | `prefix` | EXTRA 317 | 318 | ## 2.6 Configuration - Resize 319 | 320 | ``` 321 | 322 | no 323 | Always 324 | Fixed 325 | 326 | 400 327 | center 328 | 329 | 330 | ``` 331 | 332 | | Cat | Status | Reference | Category | Description | Comment 333 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 334 | | B | complete | 2.6.1 | resize | drawContents | 335 | | B | complete | 2.6.2 | resize | popupShow | 336 | | B | | 2.6.3 | resize | popupPosition | 337 | | B | | 2.6.4 | resize | popupFixedposition | 338 | | B | | 2.6.5 | resize | cornerRange | EXTRA 339 | | B | | 2.6.6 | resize | minimumArea | EXTRA 340 | 341 | 342 | ## 2.7 Configuration - Window Rules 343 | 344 | Note: In Openbox this section is called `` (per window settings) 345 | and covers the following settings: `decor` `shade` `position` `size` `focus` 346 | `desktop` `layer` `iconic` `skip_pager` `skip_taskbar` `fullscreen` `maximized` 347 | 348 | ``` 349 | 350 | 351 | 352 | 353 | 354 | 355 | ``` 356 | 357 | | Cat | Status | Reference | Category | Description | Comment 358 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 359 | | B | complete | 2.7.1 | window rules | `windowRule` | EXTRA 360 | | B | complete | 2.7.2.1 | window rule criteria | `windowRule.identifier` | EXTRA 361 | | B | complete | 2.7.2.2 | window rule criteria | `windowRule.title` | EXTRA 362 | | B | complete | 2.7.2.3 | window rule criteria | `windowRule.matchOnce` | EXTRA 363 | | B | complete | 2.7.3.1 | window rule property | `windowRule.serverDecoration` | EXTRA 364 | | B | complete | 2.7.3.2 | window rule property | `windowRule.skipTaskbar` | EXTRA 365 | | B | complete | 2.7.3.3 | window rule property | `windowRule.skipWindowSwitcher` | EXTRA 366 | | B | complete | 2.7.3.4 | window rule property | `windowRule.ignoreFocusRequest` | EXTRA 367 | | B | complete | 2.7.3.5 | window rule property | `windowRule.fixedPosition` | EXTRA 368 | | B | complete | 2.7.3.6 | window rule property | `windowRule.ignoreConfigureRequest` | EXTRA 369 | | B | complete | 2.7.3.7 | window rule property | `windowRule.wantAbsorbedModifierReleaseEvents` | EXTRA 370 | | B | complete | 2.7.4 | window rule type | `windowRule.type` | EXTRA 371 | | B | complete | 2.7.5.1 | window rule condition | `windowRule.type` | EXTRA 372 | 373 | ## 2.8 Configuration - Keyboard 374 | 375 | | Cat | Status | Reference | Category | Description | Comment 376 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 377 | | C | | 2.8.1 | keyboard | `rebindOnMappingNotify` | 378 | | C | | 2.8.2 | keyboard | `chainQuitKey` | 379 | | A | complete | 2.8.3 | keyboard | `keybind` | See section 3.1 380 | | B | complete | 2.8.4 | keyboard | `numlock` | EXTRA 381 | | B | complete | 2.8.5 | keyboard | `layoutScope` | EXTRA 382 | 383 | ## 2.9 Configuration - Mouse 384 | 385 | | Cat | Status | Reference | Category | Description | Comment 386 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 387 | | C | | 2.9.1 | mouse | `dragThreshold` | 388 | | A | complete | 2.9.2 | mouse | `doubleClickTime` | 389 | | C | | 2.9.3 | mouse | `screenEdgeWarpTime` | 390 | | A | complete | 2.9.3 | mouse | `context` | 391 | | B | complete | 2.9.4 | mouse | `scrollFactor` | EXTRA 392 | 393 | ## 2.9a Configuration - Touch 394 | 395 | ```xml 396 | 397 | ``` 398 | 399 | | Cat | Status | Reference | Category | Description | Comment 400 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 401 | | B | complete | 2.9a.1 | touch | `deviceName` | EXTRA 402 | | B | complete | 2.9a.2 | touch | `mapToOutput` | EXTRA 403 | 404 | ## 2.9b Configuration - Tablet 405 | 406 | ```xml 407 | 408 | 409 | 410 | 411 | 412 | 413 | ``` 414 | 415 | | Cat | Status | Reference | Category | Description | Comment 416 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 417 | | B | complete | 2.9b.1 | tablet | `mapToOutput` | EXTRA 418 | | B | complete | 2.9b.2 | tablet | `rotate` | EXTRA 419 | | B | complete | 2.9b.3 | tablet | `area` | EXTRA 420 | | B | complete | 2.9b.4 | tablet | `map` | EXTRA 421 | 422 | ## 2.9c Configuration - TabletTool 423 | 424 | ```xml 425 | 426 | ``` 427 | 428 | | Cat | Status | Reference | Category | Description | Comment 429 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 430 | | B | complete | 2.9c.1 | tablet tool | `tabletTool` | EXTRA 431 | 432 | ## 2.10 Configuration - Margins 433 | 434 | `` 435 | 436 | | Cat | Status | Reference | Category | Description | Comment 437 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 438 | | B | complete | 2.10.1 | margins | `` | 439 | 440 | ## 2.11 Configuration - Menu 441 | 442 | | Cat | Status | Reference | Category | Description | Comment 443 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 444 | | B | complete | 2.11.1 | menu | `ignoreButtonReleasePeriod` | DEVIATION: called `hideDelay` in openbox 445 | | C | | 2.11.2 | menu | `middle` | 446 | | B+ | | 2.11.3 | menu | `submenuShowDelay` | 447 | | B | complete | 2.11.4 | menu | `showIcons` | DEVIATION: called `applicationIcons` in Openbox 448 | | C | | 2.11.5 | menu | `manageDesktops` | 449 | | B | | 2.11.6 | menu | `file` | TODO: is this supported already? 450 | 451 | ## 2.12 Configuration - Dock 452 | 453 | | Cat | Status | Reference | Category | Description | Comment 454 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 455 | | C | | 2.12.1 | dock | | 456 | 457 | ## 2.13 Configuration - Core 458 | 459 | The `` section is additional to openbox 3.6 spec. 460 | 461 | | Cat | Status | Reference | Category | Description | Comment 462 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 463 | | B | complete | 2.13.1 | core | `decoration` | EXTRA 464 | | B | complete | 2.13.2 | core | `gap` | EXTRA 465 | | B | complete | 2.13.3 | core | `adaptiveSync` | EXTRA 466 | | B | complete | 2.13.4 | core | `reuseOutputMode` | EXTRA 467 | | B | complete | 2.13.5 | core | `xwaylandPersistence` | EXTRA 468 | | B | complete | 2.13.6 | core | `allowTearing` | EXTRA 469 | | B | complete | 2.13.7 | core | `autoEnableOutputs` | EXTRA 470 | 471 | ## 2.14 Configuration - Window Switcher 472 | 473 | The window switcher can be cycled in reverse using shift-tab or up/left 474 | arrow whilst holding alt. 475 | 476 | | Cat | Status | Reference | Category | Description | Comment 477 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 478 | | B | complete | 2.14.1 | window switcher | `show` | EXTRA 479 | | B | complete | 2.14.2 | window switcher | `preview` | EXTRA 480 | | B | complete | 2.14.3 | window switcher | `outlines` | EXTRA 481 | | B | complete | 2.14.4.1 | window switcher | `fields.field.content` | EXTRA 482 | | B | complete | 2.14.4.2 | window switcher | `fields.field.width` | EXTRA 483 | | B | complete | 2.14.5 | window switcher | `allWorkspaces` | EXTRA 484 | 485 | ## 2.15 Configuration - Libinput 486 | 487 | | Cat | Status | Reference | Category | Description | Comment 488 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 489 | | B | complete | 3.6.1 | libinput | naturalScroll | EXTRA 490 | | B | complete | 3.6.2 | libinput | leftHanded | EXTRA 491 | | B | complete | 3.6.3 | libinput | pointerSpeed | EXTRA 492 | | B | complete | 3.6.4 | libinput | accelProfile | EXTRA 493 | | B | complete | 3.6.5 | libinput | tap | EXTRA 494 | | B | complete | 3.6.6 | libinput | tapButtonMap | EXTRA 495 | | B | complete | 3.6.7 | libinput | tapAndDrag | EXTRA 496 | | B | complete | 3.6.8 | libinput | dragLock | EXTRA 497 | | B | complete | 3.6.9 | libinput | middleEmulation | EXTRA 498 | | B | complete | 3.6.10 | libinput | disableWhiteTyping | EXTRA 499 | | B | complete | 3.6.11 | libinput | clickMethod | EXTRA 500 | | B | complete | 3.6.12 | libinput | sendEventsMode | EXTRA 501 | | B | complete | 3.6.13 | libinput | calibrationMatrix | EXTRA 502 | 503 | ## 3.1 Configuration - Keyboard Keybind 504 | 505 | | Cat | Status | Reference | Category | Description | Comment 506 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 507 | | A | complete | 3.1.1 | keyboard keybind | `key` | 508 | | A | complete | 3.1.2 | keyboard keybind | `action.name` | 509 | | A | complete | 3.1.3 | keyboard keybind | `action.menu` | 510 | | A | complete | 3.1.4 | keyboard keybind | Support modifier keys | 511 | | C | | 3.1.5 | keyboard keybind | Support key chains | 512 | | B | complete | 3.1.6 | keyboard binding | `default` | EXTRA 513 | | B | complete | 3.1.7 | keyboard binding | `layoutDependent` | EXTRA 514 | | B | complete | 3.1.8 | keyboard binding | `onRelease` | EXTRA 515 | | B | complete | 3.1.9 | keyboard binding | `allowWhenLocked` | EXTRA 516 | 517 | ## 3.2 Configuration - Mouse Binding 518 | 519 | | Cat | Status | Reference | Category | Description | Comment 520 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 521 | | A | complete | 3.2.1 | mouse binding | `context.name` | 522 | | A | complete | 3.2.2 | mouse binding | `mousebind.button` | 523 | | A | complete | 3.2.3 | mouse binding | `mousebind.action` | 524 | | B | complete | 3.2.4 | mouse binding | `default` | EXTRA 525 | 526 | ## 3.3 Configuration - Mouse Context 527 | 528 | | Cat | Status | Reference | Category | Description | Comment 529 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 530 | | B | complete | 3.3.1 | mouse context | `Frame` | 531 | | B | complete | 3.3.2 | mouse context | `Client` | 532 | | B | complete | 3.3.3 | mouse context | `Desktop` | 533 | | B | complete | 3.3.4 | mouse context | `Root` | DEVIATION [^2] 534 | | A | complete | 3.3.5 | mouse context | `Titlebar` | 535 | | B | complete | 3.3.6 | mouse context | `Top` | 536 | | B | complete | 3.3.7 | mouse context | `Bottom` | 537 | | B | complete | 3.3.8 | mouse context | `Left` | 538 | | B | complete | 3.3.9 | mouse context | `Right` | 539 | | B | complete | 3.3.10 | mouse context | `TLCorner` | 540 | | B | complete | 3.3.11 | mouse context | `TRCorner` | 541 | | B | complete | 3.3.12 | mouse context | `BLCorner` | 542 | | B | complete | 3.3.13 | mouse context | `BRCorner` | 543 | | B | | 3.3.14 | mouse context | `Icon` | 544 | | A | complete | 3.3.15 | mouse context | `Iconfiy` | 545 | | A | complete | 3.3.16 | mouse context | `Maximize` | 546 | | A | complete | 3.3.17 | mouse context | `Close` | 547 | | C | | 3.3.18 | mouse context | `AllDesktops` | 548 | | C | | 3.3.19 | mouse context | `Shade` | 549 | | C | | 3.3.20 | mouse context | `Moveresize` | 550 | | B | complete | 3.3.21 | mouse context | `Title` | EXTRA 551 | 552 | ## 3.4 Configuration - Mouse Button 553 | 554 | | Cat | Status | Reference | Category | Description | Comment 555 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 556 | | A | complete | 3.4.1 | mouse button | `Left` | 557 | | A | complete | 3.4.1 | mouse button | `Right` | 558 | | B | | 3.4.1 | mouse button | `Middle` | 559 | | B | complete | 3.4.1 | mouse button | `Up` (scroll) | 560 | | B | complete | 3.4.1 | mouse button | `Down` (scroll) | 561 | 562 | ## 3.5 Configuration - Mouse Event 563 | 564 | | Cat | Status | Reference | Category | Description | Comment 565 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 566 | | A | complete | 3.5.1 | mouse event | `Press` | 567 | | A | complete | 3.5.2 | mouse event | `Click` | 568 | | A | complete | 3.5.3 | mouse event | `DoubleClick` | 569 | | B | | 3.5.4 | mouse event | `Release` | 570 | | B | complete | 3.5.5 | mouse event | `Drag` | 571 | | B | complete | 3.5.6 | mouse event | `Scroll` | DEVIATION: Scroll is used instead of Click for mouse-buttons Up/Down 572 | 573 | ## 4 Global Actions 574 | 575 | | Cat | Status | Reference | Category | Description | Comment 576 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 577 | | A | complete | 4.1 | global action | `Execute` | 578 | | A | complete | 4.2.1 | global action | `ShowMenu` | 579 | | B | complete | 4.2.2 | global action | `ShowMenu.menu` | 580 | | B | complete | 4.2.3 | global action | `ShowMenu.atCursor` | EXTRA 581 | | B | complete | 4.2.4 | global action | `ShowMenu.position` | 582 | | A | complete | 4.3 | global action | `NextWindow` | 583 | | C | | 4.4 | global action | `PreviousWindow` | 584 | | B | | 4.5 | global action | `DirectionalCycleWindows` | 585 | | B | | 4.6 | global action | `DirectionalTargetWindows` | 586 | | B | complete | 4.7 | global action | `GoToDesktop` | 587 | | B | complete | 4.7.1 | global action | `GoToDesktop.to` | 588 | | B | complete | 4.7.1.1 | global action | `GoToDesktop.to::last` | 589 | | B | complete | 4.7.1.2 | global action | `GoToDesktop.to::right` | 590 | | B | complete | 4.7.1.3 | global action | `GoToDesktop.to::left` | 591 | | C | | 4.7.1.4 | global action | `GoToDesktop.to::current` | 592 | | C | | 4.7.1.5 | global action | `GoToDesktop.to::next` | 593 | | C | | 4.7.1.6 | global action | `GoToDesktop.to::previous` | 594 | | C | | 4.7.1.7 | global action | `GoToDesktop.to::up` | 595 | | C | | 4.7.1.8 | global action | `GoToDesktop.to::down` | 596 | | C | | 4.7.1.9 | global action | `GoToDesktop.to::north` | 597 | | C | | 4.7.1.10 | global action | `GoToDesktop.to::south` | 598 | | C | | 4.7.1.11 | global action | `GoToDesktop.to::west` | 599 | | C | | 4.7.1.12 | global action | `GoToDesktop.to::east` | 600 | | B | complete | 4.7.2 | global action | `GoToDesktop.wrap` | 601 | | B | | 4.8 | global action | `AddDesktop` | 602 | | B | | 4.9 | global action | `RemoveDesktop` | 603 | | B | | 4.10 | global action | `ToggleShowDesktop` | 604 | | C | | 4.11 | global action | `ToggleDockAutohide` | 605 | | A | complete | 4.12 | global action | `Reconfigure` | 606 | | C | | 4.13 | global action | `Restart` | 607 | | A | complete | 4.14 | global action | `Exit` | 608 | | C | | 4.15 | global action | `SessionLogout` | 609 | | B | complete | 4.16 | global action | `Debug` | EXTRA 610 | | B | complete | 4.17 | global action | `None` | EXTRA Removes other actions within mouse bindings 611 | | B | complete | 4.18 | global action | `Kill` | EXTRA Send SIGTERM 612 | | B | complete | 4.19 | global action | `FocusOutput` | EXTRA 613 | | B | complete | 4.20 | global action | `ToggleKeybinds` | EXTRA 614 | | B | complete | 4.21 | global action | `VirtualOutputAdd` | EXTRA 615 | | B | complete | 4.22 | global action | `VirtualOutputRemove` | EXTRA 616 | | B | complete | 4.23 | global action | `ToggleTabletMouseEmulation` | EXTRA 617 | | B | complete | 4.24 | global action | `ZoomIn` | EXTRA 618 | | B | complete | 4.25 | global action | `ZoomOut` | EXTRA 619 | | B | complete | 4.26 | global action | `EnableTabletMouseEmulation` | EXTRA 620 | | B | complete | 4.27 | global action | `DisableTabletMouseEmulation` | EXTRA 621 | | B | complete | 4.28 | global action | `WarpCursor` | EXTRA 622 | | B | complete | 4.29 | global action | `HideCursor` | EXTRA 623 | 624 | ## 5 Window Actions 625 | 626 | | Cat | Status | Reference | Category | Description | Comment 627 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 628 | | A | complete | 5.1 | window action | `Focus` | 629 | | A | complete | 5.2 | window action | `Raise` | 630 | | B | complete | 5.3 | window action | `Lower` | 631 | | B | | 5.4 | window action | `RaiseLower` | 632 | | B | complete | 5.5 | window action | `Unfocus` | 633 | | B | | 5.6 | window action | `FocusToBottom` | 634 | | A | complete | 5.7 | window action | `Iconify` | 635 | | A | complete | 5.8 | window action | `Close` | 636 | | B | complete | 5.9 | window action | `ToggleShade` | 637 | | B | complete | 5.10 | window action | `Shade` | 638 | | B | complete | 5.11 | window action | `Unshade` | 639 | | B | complete | 5.12 | window action | `ToggleOmnipresent` | aka sticky 640 | | A | complete | 5.13 | window action | `ToggleMaximize` | 641 | | B | | 5.13.1 | window action | `ToggleMaximize.direction` | 642 | | B | complete | 5.14 | window action | `Maximize` | 643 | | B | | 5.14.1 | window action | `Maximize.direction` | 644 | | B | complete | 5.15 | window action | `Unmaximize` | 645 | | B | | 5.15.1 | window action | `Unmaximize.direction` | 646 | | B | complete | 5.16 | window action | `ToggleFullscreen` | 647 | | B | complete | 5.17.1 | window action | `ToggleDecorations` | 648 | | B | complete | 5.17.2 | window action | `SetDecorations` | EXTRA 649 | | B | | 5.18 | window action | `Decorate` | 650 | | B | | 5.19 | window action | `Undecorate` | 651 | | B | complete | 5.20 | window action | `SendToDesktop` | 652 | | B | complete | 5.20.1 | window action | `SendToDesktop.to` | EXTRA: support value 'current' 653 | | B | complete | 5.20.2 | window action | `SendToDesktop.follow` | 654 | | B | complete | 5.20.3 | window action | `SendToDesktop.wrap` | 655 | | A | complete | 5.21 | window action | `Move` | 656 | | A | complete | 5.22 | window action | `Resize` | 657 | | B | complete | 5.23.1 | window action | `MoveTo` | DEVIATION: `MoveResizeTo` in Openbox 658 | | B | complete | 5.23.2 | window action | `ResizeTo` | 659 | | B | complete | 5.24 | window action | `MoveRelative` | 660 | | B | complete | 5.25 | window action | `ResizeRelative` | 661 | | B | complete | 5.26 | window action | `MoveToEdge` | 662 | | B | complete | 5.26.1 | window action | `MoveToEdge.snapWindows` | EXTRA 663 | | B | complete | 5.27 | window action | `GrowToEdge` | 664 | | B | | 5.28 | window action | `GrowToFill` | 665 | | B | complete | 5.29 | window action | `ShrinkToEdge` | 666 | | B | complete | 5.30 | window action | `If` | 667 | | B | complete | 5.31.1 | window action | `ForEach` | 668 | | B | complete | 5.31.2 | window action | `ForEach.none` | EXTRA 669 | | C | | 5.32 | window action | `Stop` | 670 | | B | complete | 5.33 | window action | `ToggleAlwaysOnTop` | 671 | | B | complete | 5.34 | window action | `ToggleAlwaysOnBottom` | 672 | | C | | 5.35 | window action | `SendToLayer` | 673 | | B | complete | 5.36 | window action | `SnapToEdge` | EXTRA 674 | | B | complete | 5.37 | window action | `SnapToRegion` | EXTRA 675 | | B | complete | 5.38 | window action | `MoveToCursor` | EXTRA 676 | | B | complete | 5.39 | window action | `MoveToOutput` | EXTRA 677 | | B | complete | 5.40 | window action | `AutoPlace` | EXTRA 678 | | B | complete | 5.41 | window action | `ToggleSnapToEdge` | EXTRA 679 | | B | complete | 5.42 | window action | `ToggleSnapToRegion` | EXTRA 680 | | B | complete | 5.43 | window action | `UnSnap` | EXTRA 681 | 682 | ## 6.1 Theme - Geometry 683 | 684 | | Cat | Status | Reference | Category | Description | Comment 685 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 686 | | A | complete | 6.1.1 | geometry | `border.width` | 687 | | B | complete | 6.1.2 | geometry | `menu.border.width` | 688 | | A | complete | 6.1.3 | geometry | `menu.separator.width` | 689 | | B | complete | 6.1.4 | geometry | `menu.separator.padding.width` | 690 | | B | complete | 6.1.5 | geometry | `menu.separator.padding.height` | 691 | | A | complete | 6.1.6 | geometry | `osd.border.width` | 692 | | C | | 6.1.7 | geometry | `window.client.padding.width` | No need to pad between client surface and title/handle/border 693 | | C | | 6.1.8 | geometry | `window.client.padding.height` | Ditto 694 | | C | | 6.1.9 | geometry | `window.handle.width` | Handle not supported 695 | | B | | 6.1.10 | geometry | `padding.width` | 696 | | B | complete | 6.1.11 | geometry | `padding.height` | 697 | | B | complete | 6.1.11.1 | geometry | `titlebar.height` | EXTRA 698 | | B | complete | 6.1.12 | geometry | `menu.overlap.x` | 699 | | B | complete | 6.1.13 | geometry | `menu.overlap.y` | 700 | | B | | 6.1.14 | geometry | `menu.overlap` | 701 | | B | complete | 6.1.15 | geometry | `menu.width.min` | EXTRA 702 | | B | complete | 6.1.16 | geometry | `menu.width.max` | EXTRA 703 | | B | complete | 6.1.17 | geometry | `menu.items.padding.x` | EXTRA 704 | | B | complete | 6.1.18 | geometry | `menu.items.padding.y` | EXTRA 705 | | B | complete | 6.1.19.1 | geometry | `osd.window-switcher.width` | EXTRA 706 | | B | complete | 6.1.19.2 | geometry | `osd.window-switcher.item.padding.x` | EXTRA 707 | | B | complete | 6.1.19.3 | geometry | `osd.window-switcher.item.padding.y` | EXTRA 708 | | B | complete | 6.1.19.4 | geometry | `osd.window-switcher.padding` | EXTRA 709 | | B | complete | 6.1.19.5 | geometry | `osd.window-switcher.item.active.border.width` | EXTRA 710 | | B | complete | 6.1.19.6 | geometry | `osd.window-switcher.item.icon.size` | EXTRA 711 | | B | complete | 6.1.20.1 | geometry | `osd.workspace-switcher.boxes.width` | EXTRA 712 | | B | complete | 6.1.20.2 | geometry | `osd.workspace-switcher.boxes.height` | EXTRA 713 | | B | complete | 6.1.20.3 | geometry | `osd.workspace-switcher.boxes.border.width` | EXTRA 714 | | B | complete | 6.1.21.1 | geometry | `window.button.width` | EXTRA 715 | | B | complete | 6.1.21.2 | geometry | `window.button.height` | EXTRA 716 | | B | complete | 6.1.21.3 | geometry | `window.button.spacing` | EXTRA 717 | | B | complete | 6.1.21.3 | geometry | `window.button.hover.bg.corner-radius` | EXTRA 718 | | B | complete | 6.1.22.1 | geometry | `window.titlebar.padding.width` | EXTRA 719 | | B | complete | 6.1.22.2 | geometry | `window.titlebar.padding.height` | EXTRA 720 | 721 | ## 6.2 Theme - Border Colors 722 | 723 | | Cat | Status | Reference | Category | Description | Comment 724 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 725 | | A | complete | 6.2.1 | border colors | `window.active.border.color` | 726 | | B | | 6.2.2 | border colors | `window.active.title.separator.color` | 727 | | A | complete | 6.2.3 | border colors | `window.inactive.border.color` | 728 | | B | | 6.2.4 | border colors | `window.inactive.title.separator.color` | 729 | | A | complete | 6.2.5 | border colors | `border.color` | 730 | | B | | 6.2.6 | border colors | `window.active.client.color` | 731 | | B | | 6.2.7 | border colors | `window.inactive.client.color` | 732 | | B | complete | 6.2.8 | border colors | `menu.border.color` | 733 | | A | complete | 6.2.9 | border colors | `osd.border.color` | 734 | 735 | ## 6.3 Theme - Titlebar Colors 736 | 737 | | Cat | Status | Reference | Category | Description | Comment 738 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 739 | | A | complete | 6.3.1 | titlebar colors | `window.active.label.text.color` | 740 | | A | complete | 6.3.2 | titlebar colors | `window.inactive.label.text.color` | 741 | | A | complete | 6.3.3 | titlebar colors | `window.active.button.unpressed.image.color` | 742 | | B | | 6.3.4 | titlebar colors | `window.active.button.pressed.image.color` | 743 | | B | | 6.3.5 | titlebar colors | `window.active.button.disabled.image.color` | 744 | | B | | 6.3.6 | titlebar colors | `window.active.button.hover.image.color` | 745 | | B | | 6.3.7 | titlebar colors | `window.active.button.toggled.unpressed.image.color` | 746 | | B | | 6.3.8 | titlebar colors | `window.active.button.toggled.pressed.image.color` | 747 | | B | | 6.3.9 | titlebar colors | `window.active.button.toggled.hover.image.color` | 748 | | B | | 6.3.10 | titlebar colors | `window.active.button.toggled.image.color` | 749 | | A | complete | 6.3.11 | titlebar colors | `window.inactive.button.unpressed.image.color` | 750 | | B | | 6.3.12 | titlebar colors | `window.inactive.button.pressed.image.color` | 751 | | B | | 6.3.13 | titlebar colors | `window.inactive.button.disabled.image.color` | 752 | | B | | 6.3.14 | titlebar colors | `window.inactive.button.hover.image.color` | 753 | | B | | 6.3.15 | titlebar colors | `window.inactive.button.toggled.unpressed.image.color` | 754 | | B | | 6.3.16 | titlebar colors | `window.inactive.button.toggled.pressed.image.color` | 755 | | B | | 6.3.17 | titlebar colors | `window.inactive.button.toggled.hover.image.color` | 756 | | B | | 6.3.18 | titlebar colors | `window.inactive.button.toggled.image.color` | 757 | 758 | ## 6.4 Theme - Active Window Textures 759 | 760 | | Cat | Status | Reference | Category | Description | Comment 761 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 762 | | A | complete | 6.4.1 | active window textures | `window.active.title.bg` | 763 | | B | | 6.4.2 | active window textures | `window.active.label.bg` | 764 | | C | | 6.4.3 | active window textures | `window.active.handle.bg` | We don't support handle. 765 | | B | | 6.4.4 | active window textures | `window.active.grip.bg` | 766 | | B | complete | 6.4.5 | active window textures | `window.active.shadow.size` | EXTRA 767 | | B | complete | 6.4.6 | active window textures | `window.active.shadow.color` | EXTRA 768 | 769 | ## 6.5 Theme - Inactive Window Textures 770 | 771 | Same as 6.4, just replace `active` with `inactive` 772 | 773 | ## 6.6 Theme - Active Window Button Textures 774 | 775 | | Cat | Status | Reference | Category | Description | Comment 776 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 777 | | B | | 6.6.1 | active window button textures | `window.active.button.unpressed.bg` | 778 | | B | | 6.6.2 | active window button textures | `window.active.button.pressed.bg` | 779 | | B | | 6.6.3 | active window button textures | `window.active.button.hover.bg` | 780 | | B | | 6.6.4 | active window button textures | `window.active.button.disabled.bg` | 781 | | B | | 6.6.5 | active window button textures | `window.active.button.toggled.unpressed.bg` | 782 | | B | | 6.6.6 | active window button textures | `window.active.button.toggled.pressed.bg` | 783 | | B | | 6.6.7 | active window button textures | `window.active.button.toggled.hover.bg` | 784 | | B | | 6.6.8 | active window button textures | `window.active.button.toggled.bg` | 785 | 786 | ## 6.7 Theme - Inactive Window Button Textures 787 | 788 | | Cat | Status | Reference | Category | Description | Comment 789 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 790 | | B | | 6.7.1 | inactive window button textures | `window.inactive.button.unpressed.bg` | 791 | | B | | 6.7.2 | inactive window button textures | `window.inactive.button.pressed.bg` | 792 | | B | | 6.7.3 | inactive window button textures | `window.inactive.button.hover.bg` | 793 | | B | | 6.7.4 | inactive window button textures | `window.inactive.button.disabled.bg` | 794 | | B | | 6.7.5 | inactive window button textures | `window.inactive.button.toggled.unpressed.bg` | 795 | | B | | 6.7.6 | inactive window button textures | `window.inactive.button.toggled.pressed.bg` | 796 | | B | | 6.7.7 | inactive window button textures | `window.inactive.button.toggled.hover.bg` | 797 | | B | | 6.7.8 | inactive window button textures | `window.inactive.button.toggled.bg` | 798 | 799 | ## 6.8 Theme - Menu Colors 800 | 801 | | Cat | Status | Reference | Category | Description | Comment 802 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 803 | | B | complete | 6.8.1 | menu colors | `menu.title.text.color` | 804 | | A | complete | 6.8.2 | menu colors | `menu.items.text.color` | 805 | | B | | 6.8.3 | menu colors | `menu.items.disabled.text.color` | 806 | | A | complete | 6.8.4 | menu colors | `menu.items.active.text.color` | 807 | | B | | 6.8.5 | menu colors | `menu.items.active.disabled.text.color` | 808 | | A | complete | 6.8.6 | menu colors | `menu.separator.color` | 809 | 810 | ## 6.9 Theme - Menu Textures 811 | 812 | | Cat | Status | Reference | Category | Description | Comment 813 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 814 | | A | complete | 6.9.1 | menu textures | `menu.items.bg` | 815 | | A | complete | 6.9.2 | menu textures | `menu.items.active.bg` | 816 | | B | complete | 6.9.3 | menu textures | `menu.title.bg` | 817 | 818 | ## 6.10 Theme - On-Screen-Display Textures 819 | 820 | | Cat | Status | Reference | Category | Description | Comment 821 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 822 | | A | complete | 6.10.1 | osd textures | `osd.bg` | we only set the color 823 | | C | | 6.10.2 | osd textures | `osd.label.bg` | 824 | | B | | 6.10.3 | osd textures | `osd.hilight.bg` | for desktop osd only 825 | | B | | 6.10.4 | osd textures | `osd.unhilight.bg` | for desktop osd only 826 | 827 | ## 6.11 Theme - On-Screen-Display Colors 828 | 829 | | Cat | Status | Reference | Category | Description | Comment 830 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 831 | | A | complete | 6.11.1 | osd colors | `osd.label.text.color` | 832 | | B | | 6.11.2 | osd colors | `osd.hilight.bg.color` | for desktop osd only 833 | | B | | 6.11.3 | osd colors | `osd.unhilight.bg.color` | for desktop osd only 834 | 835 | ## 6.12 Theme - Text Justification 836 | 837 | | Cat | Status | Reference | Category | Description | Comment 838 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 839 | | B | complete | 6.12.1 | text justification | `window.label.text.justify` | 840 | | B | complete | 6.12.2 | text justification | `menu.title.text.justify` | 841 | 842 | ## 6.13 Theme - Text Shadows 843 | 844 | | Cat | Status | Reference | Category | Description | Comment 845 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 846 | | C | | 6.13.1 | text shadows | `window.active.label.text.font` | 847 | | C | | 6.13.2 | text shadows | `window.inactive.label.text.font` | 848 | | C | | 6.13.3 | text shadows | `menu.items.font` | 849 | | C | | 6.13.4 | text shadows | `menu.title.text.font` | 850 | | C | | 6.13.5 | text shadows | `osd.label.text.font` | 851 | 852 | ## 6.14 Theme - Dialogs 853 | 854 | Not yet supported. 855 | 856 | ## 6.15 Theme - Button Images 857 | 858 | Parse svg, png and xbm icons. 859 | 860 | The following are referred to as 'base buttons': `max`, `max_toggled`, 861 | `iconify`, `close`, `desk`, `desk_toggled`, `shade`, `shade_toggled`, 862 | `bullet` and `menu`. 863 | 864 | In addition to the base buttons, the following variants exist: 865 | `_hover`, `_pressed` and `_disabled` 866 | 867 | | Cat | Status | Reference | Category | Description | Comment 868 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 869 | | A | complete | 6.15.1.1 | theme button base | `max.xbm` | 870 | | B | complete | 6.15.1.2 | theme button base | `max_toggled.xbm` | 871 | | A | complete | 6.15.1.3 | theme button base | `iconify.xbm` | 872 | | A | complete | 6.15.1.4 | theme button base | `close.xbm` | 873 | | B | complete | 6.15.1.5 | theme button base | `desk.xbm` | 874 | | B | complete | 6.15.1.6 | theme button base | `desk_toggled.xbm` | 875 | | B | complete | 6.15.1.7 | theme button base | `shade.xbm` | 876 | | B | complete | 6.15.1.8 | theme button base | `shade_toggled.xbm` | 877 | | B | | 6.15.1.9 | theme button base | `bullet.xbm` | 878 | | B | complete | 6.15.1.1 | theme button base | `menu.xbm` | EXTRA 879 | | B | complete | 6.15.2.1 | theme button variant | `_hover` | 880 | | B | | 6.15.2.2 | theme button variant | `_pressed` | 881 | | B | | 6.15.2.3 | theme button variant | `_disabled` | 882 | | B+ | complete | 6.15.3 | theme button png | Support png buttons | EXTRA 883 | | B+ | complete | 6.15.4 | theme button svg | Support svg buttons | EXTRA 884 | 885 | ## 6.16 Theme - Window Switcher 886 | 887 | | Cat | Status | Reference | Category | Description | Comment 888 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 889 | | B | complete | 6.16.1 | text window switcher | `osd.window-switcher.width` | EXTRA 890 | | B | complete | 6.16.2 | text window switcher | `osd.window-switcher.padding` | EXTRA 891 | | B | complete | 6.16.3 | text window switcher | `osd.window-switcher.item.padding.x` | EXTRA 892 | | B | complete | 6.16.4 | text window switcher | `osd.window-switcher.item.padding.y` | EXTRA 893 | | B | complete | 6.16.5 | text window switcher | `osd.window-switcher.item.active.border.width` | EXTRA 894 | | B | complete | 6.16.6 | text window switcher | `osd.window-switcher.preview.border.width` | EXTRA 895 | | B | complete | 6.16.7 | text window switcher | `osd.window-switcher.preview.border.color` | EXTRA 896 | | B | complete | 6.16.8 | text window switcher | `osd.window-switcher.preview.boxes.width` | EXTRA 897 | | B | complete | 6.16.9 | text window switcher | `osd.window-switcher.preview.boxes.height` | EXTRA 898 | 899 | ## 7 Menus 900 | 901 | | Cat | Status | Reference | Category | Description | Comment 902 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 903 | | B | complete | 7.0.1 | menu general | Parse menu.xml in accordance with Openbox 3.6 spec | 904 | | B | complete | 7.0.2 | menu general | Handle pointer input | 905 | | B+ | complete | 7.0.3 | menu general | Handle keyboard input | 906 | | A | complete | 7.1.1 | menu syntax general | `id` | 907 | | B | complete | 7.1.2 | menu syntax general | `label` | 908 | | C | | 7.1.3 | menu syntax general | `icon` | 909 | | B+ | complete | 7.1.4 | menu syntax general | `execute` | Pipe-menus 910 | | C | | 7.1.5 | menu syntax general | Menu keyboard shortcuts | 911 | | A | complete | 7.2.1 | menu syntax item | `label` | 912 | | C | | 7.2.2 | menu syntax item | `icon` | 913 | | A | complete | 7.2.3 | menu syntax item | `action` | 914 | | A | complete | 7.3.1 | menu syntax separator | `` | For separator line only 915 | | B | complete | 7.3.2 | menu syntax separator | `` | For separator with text 916 | | B | complete | 7.4.1 | menu builtin | `client-list-combined-menu` | 917 | | C | | 7.4.2 | menu builtin | `client-list-menu` | 918 | | C | | 7.4.3 | menu builtin | `client-menu` | 919 | | B | complete | 7.4.4 | menu builtin | `client-send-to-menu` | 920 | | C | complete | 7.4.5 | menu builtin | `client-layer-menu` | 921 | | B | complete | 7.4.6 | menu builtin | `root-menu` | 922 | 923 | ## 8.1 Extra - General 924 | 925 | Server-side-decoration: Make rounded corners square on maximize. 926 | Server-side-decoration: Disable border on maximize 927 | 928 | | Cat | Status | Reference | Category | Description | Comment 929 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 930 | | A | complete | 8.1.1 | extra | Support rounded top window corners | rc.xml `` 931 | | B | complete | 8.2.1 | extra | `` | 932 | | B | complete | 8.2.2 | extra | `` | 933 | | B | complete | 8.2.3 | extra | `` | 934 | | B | complete | 8.2.4 | extra | `` | 935 | | B | complete | 8.2.5 | extra | `` | 936 | 937 | ## 9 Regions 938 | 939 | Provide a means of specifying regions as a percentage of output geometry as 940 | follows: 941 | 942 | ``` 943 | 944 | 945 | 946 | ``` 947 | 948 | The compositor shall support the following with respect to defined regions: 949 | 950 | - [x] Allow windows to snap to a region by dragging a window with a pointer 951 | while pressing a modifier key. 952 | - [x] During such a dragging operation, a rectangle shall be rendered 953 | indicating where the window will be placed. 954 | - [x] Live config updates meaning that windows snapped to regions will 955 | update on `rc.xml` change and `labwc --reconfigure` 956 | - [x] Respect core.gap setting 957 | - [x] Support action `` to snap (move+tile) a window to a 958 | specified region. 959 | 960 | | Cat | Status | Reference | Category | Description | Comment 961 | | --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | ------- 962 | | B | complete | 9.1.1 | Regions | `` | 963 | 964 | # Appendix A - Terminology 965 | 966 | `handle`: The window handle is the piece of decorations on the bottom of windows 967 | 968 | # Appendix B - IPC 969 | 970 | IPC stands for inter-process communication and is important in building a 971 | complete desktop environment. 972 | 973 | `labwc` only understands the Wayland protocol. It cannot be controlled with 974 | dbus, sway/i3-ipc or other IPC technology. 975 | 976 | The `labwc` devs do not intend to implement any custom IPC or Wayland 977 | protocols, even if it's sometimes tempting to solve a short term problems. 978 | 979 | So, IPC will only be through [wayland-protocols] and [wlr-protocols]; 980 | and SIGHUP if you want to count that. 981 | 982 | The reason for this is that we believe that custom IPCs and Wayland 983 | protocols create a fragmentation that hinders general Wayland adoption. 984 | 985 | Where current protocols are not sufficient, we would rather work with 986 | upstream and the wider eco-system to plug any gaps. 987 | 988 | [wayland-protocols]: https://gitlab.freedesktop.org/wayland/wayland-protocols 989 | [wlr-protocols]: https://gitlab.freedesktop.org/wlroots/wlr-protocols 990 | 991 | See issues #128, #190 992 | 993 | # Appendix C - Configuration Syntax 994 | 995 | Occasionally we receive requests to support other configuration languages 996 | and syntaxes. This is out-of-scope. 997 | 998 | If this is high priority for anyone, I suggest helping to achieve prioirty 999 | one and two; then split `labwc` in a wlstem library and a compositor. 1000 | At this point new compositors with alternative config files should be easy 1001 | to implement. 1002 | 1003 | 1004 | [^1]: See swaywm/swaylock@3e84316. This is more secure than 1005 | wlr-input-inhibitor. It will not leak information on output hotplug nor 1006 | unlock the session when the screen locker crashes. 1007 | 1008 | [^2]: For mouse-contexts 'Root' is used as a synonym for 'Desktop' which is 1009 | a deviation from Openbox spec where they are defined as follows: 1010 | 'Desktop': The desktop or background, regardless of if you use a program 1011 | to place icons on your desktop or not (such as in KDE and GNOME). This is 1012 | also called the "root window" frequently. 1013 | 'Root': This works similarly to the Desktop context. However, this is a 1014 | special context for bindings you only want to work only when you don't 1015 | have a program running to place icons on your desktop. Generally this is 1016 | only used for the root menus, so that they won't override the menus 1017 | provided by your desktop icons. 1018 | See: http://openbox.org/wiki/Help:Bindings#Context 1019 | 1020 | [^3]: This protocol might actually annoy users. It is used by Chromium to 1021 | prevent *any* compositor keybinds to work as long as it has keyboard 1022 | focus. So if we decide to implement it we should likely combine it with 1023 | at least a global config option to disable it completely or even 1024 | integrate it with the policy framework so users can prevent applications 1025 | like Chromium to take advantage of it. It seems only to happen when using 1026 | Chromium in `--app` mode (possibly including Electron, not sure). But any 1027 | application being able to prevent compositor keybinds to work should 1028 | likely be whitelisted in some way. Some links regarding the chromium 1029 | behavior: 1030 | https://www.reddit.com/r/swaywm/comments/vuhr75/why_does_chromium_with_app_now_grab_complete/.compact 1031 | https://www.reddit.com/r/swaywm/comments/vkgfza/chromium_v103_application_mode_app_and_weird/.compact 1032 | https://www.reddit.com/r/swaywm/comments/vlvpws/chromeium_app_flag_spawns_windows_with_shortcut/.compact 1033 | chromium/chromium@ac0160a 1034 | 1035 | --------------------------------------------------------------------------------