From 4db22aafc379bb51132db8c0b3b0baad21d58b5e Mon Sep 17 00:00:00 2001 From: project-repo Date: Thu, 21 Apr 2022 21:12:57 +0200 Subject: [PATCH] Release 1.9.0 - Add message functionality (as per Issue 29 in Bugs.md) - message - configure_message - Add (as per Issue 30 in Bugs.md) - movetoprevscreen - movetoscreen - screen - additional output functionality for monitor numbering - Improve configuration documentation - Fix Issue 31 in Bugs.md (word omission) - Improve README.md and split off some files - Add SECURITY.md - Add Hashes.md (hashes of cagebreak binaries and man pages if built reproducably) - Add Changelog.md (changelog for major and minor releases but not patches) - Add FAQ.md (updated information from the former wiki) - Depreciate wiki - Fix Issue 32 in Bugs.md - Improve release checklist to partially prevent the above issue in the future - Fix Issue 33 in Bugs.md - Fix Issue 34 in Bugs.md - Manage gpg keys - Add new cagebreak gpg signing keys - Add new cagebreak email contact gpg key - Add new project-repo AUR gpg key (relevant for cagebreak-pkgbuild) --- Bugs.md | 264 ++++++++++++++ Changelog.md | 66 ++++ FAQ.md | 37 ++ Hashes.md | 211 +++++++++++ README.md | 333 +++--------------- SECURITY.md | 91 +++++ cagebreak.c | 10 - examples/config | 17 + keybinding.c | 32 +- keybinding.h | 24 +- keys/cagebreak@project-repo.co.pub | 193 ++++------ ...=> cagebreak@project-repo.co.pub-legacy-1} | 0 keys/cagebreak@project-repo.co.pub-legacy-2 | 123 +++++++ ...gebreak_signing_key_10@project-repo.co.pub | 76 ++++ ...agebreak_signing_key_9@project-repo.co.pub | 64 ++++ man/cagebreak-config.5.md | 298 ++++++++++------ man/cagebreak.1.md | 14 +- meson.build | 24 +- message.h | 7 + output.c | 2 + output.h | 8 + parse.c | 157 ++++++++- seat.c | 1 - signatures/1.8.3-cagebreak-config.5.sig | Bin 0 -> 566 bytes signatures/1.8.3-cagebreak.1.sig | Bin 0 -> 566 bytes signatures/1.8.3.sig | Bin 0 -> 566 bytes signatures/cagebreak-config.5.sig | Bin 566 -> 566 bytes signatures/cagebreak.1.sig | Bin 566 -> 566 bytes signatures/cagebreak.sig | Bin 566 -> 566 bytes xwayland.c | 3 + 30 files changed, 1493 insertions(+), 562 deletions(-) create mode 100644 Changelog.md create mode 100644 FAQ.md create mode 100644 Hashes.md create mode 100644 SECURITY.md rename keys/{cagebreak@project-repo.co.pub-legacy => cagebreak@project-repo.co.pub-legacy-1} (100%) create mode 100644 keys/cagebreak@project-repo.co.pub-legacy-2 create mode 100644 keys/cagebreak_signing_key_10@project-repo.co.pub create mode 100644 keys/cagebreak_signing_key_9@project-repo.co.pub create mode 100644 signatures/1.8.3-cagebreak-config.5.sig create mode 100644 signatures/1.8.3-cagebreak.1.sig create mode 100644 signatures/1.8.3.sig diff --git a/Bugs.md b/Bugs.md index 328450d..2c909fe 100644 --- a/Bugs.md +++ b/Bugs.md @@ -364,3 +364,267 @@ When I type in anything, the text is refreshed and becomes visible only followin ``` Cagebreak had an error with damage tracking. + +### Issue 29 + + * github issue number: #19 + * Fixed: 1.9.0 + +bda65hp: +``` +Hi, +Is there a way to easily change de font? "monospace 10" are too small for my eyes. I've changed them in message.c but can you add a configuration option, please? +Same for the display time of these window. They sometimes disappear too fast (mainly time). +May be a config for the background and foreground color of the message window too? + +cagebreak is great :) +``` + +project-repo: +``` +No, there is currently no easy way to change the font size, background or display +time of the message. + +Adding these ideas as a command is a good idea though. + +To summarize, the release pertaining to #19 will presumably introduce a +command for configuring the cagebreak messages. This command will be +able to set the following: + + * [ ] Font size + * [ ] Font colour + * [ ] Background colour + * [ ] Display time of message + +Another, related, idea would be to have an interface for sending +arbitrary messages over the socket which are then displayed by +cagebreak. This may also be added to the above features. + +We're glad to hear that you enjoy cagebreak! Thank you for helping to +make it even greater. + +cheers +project-repo +``` + +bda65hp: +``` +Awesome :) +Displaying time in locale format (or configurable) will be great too ;) +``` + +project-repo: +``` +Yes, once it is possible to send arbitrary messages via cagebreak over +the socket it will be possible to have the date be displayed however you +like! +cheers +project-repo +``` + +project-repo: +``` +We pushed some code to development implementing this in 348925e (configuration) and f12a161 (message command). Sorry for not writing this much sooner. However, at least it will be part of the upcoming release. + +cheers +project-repo +``` + +### Issue 30 + + * github issue number: #11 + * Fixed: 1.9.0 + +kinleyd: +``` +In my first post I forgot to thank you for cagebreak. I've been evaluating compositors for my needs and have been through kiwmi, japokwm, wayfire, sway and cagebreak. So far I like cagebreak most of all. + +Back to my question: + +You currently support 'movetonextscreen' but there is no equivalent movetoprevscreen. +For multiple 3 to 4 screen configurations the second command would be useful. + +Also, is it not possible to move to a screen directly, like 'movetoscreen 3'? + +The same thing with prevscreen and nextscreen: something like 'focusscreen 3', if it were possible, would be useful. +``` + +project-repo: +``` +Thank you! It's great to hear that cagebreak seems to suit your needs. + +About your question, yes, that absolutely makes sense. The reason this +wasn't implemented earlier is that no-one has needed it up to now, but +seeing as there now appears to be a use-case, we can definitely +implement these features. In future releases, cagebreak will then most +likely support movetoprevscreen and movetoscreen (as these are +distinct functionalities). + +The only issue I see at this point is that the numbering of screens is +not directly canonical. To resolve this, I suggest that per default, +screens are numbered according to the order in which they were added +along with an additional configuration option to specify numbering (this +would most likely be an additional option for the already existent +output command). Does that seem fine to you? +cheers, +project-repo +``` + +kinleyd: +``` +Yes, that would be perfect. Thank you! +``` + +kinleyd: +``` +May I suggest we also have 'screen ' like we have 'workspace '. +``` + +project-repo: +``` +Thank you for this suggestion. This will be implemented in the release +where the rest of this issue is resolved (probably the next one). + +To summarize, presumably the release pertaining to #11 will include: + + * [ ] movetoprevscreen as a command symmetric to movetonextscreen + * [ ] movetoscreen as a command similar to movetoworkspace + * [ ] screen as a command similar to workspace + * [ ] additional output functionality for monitor numbering (of + course backwards-compatible, such that valid configs remain + valid) + +If anything changes with regard to this draft, we will post it here so +you can let us know what you think. + +cheers, +project-repo +``` + +kinleyd: +``` +Super - I greatly look forward to their addition, and thank you for your responsiveness! +``` + +project-repo: +``` +Everything mentioned on our last comment has now been implemented on the +development branch. (More specifically in 851a2f8, +though documentation was added later.) + +The simple commands work as proposed in our previous comment. +The output command has a new feature called prio now, which you can call as follows: + +output prio + +All outputs, regardless of configuration are added once they request to be added +and have a default priority of -1. Using prio, you can set priorities +greater than or equal to 1 for specific outputs and hence order your outputs +as you wish. Note that cagebreak -s might be useful while fiddling around +with this. + +If you like, you can check it out on development and compile it for yourself. +If you're up to it we would be glad to know what you think about it, +especially when output prio is applied to your multi-screen setup and +regarding the readability of the cagebreak-config man page description of +output prio. + +Please note that this is not a release yet and the development branch +might undergo changes. + +cheers +project-repo +``` + +kinleyd: +``` +I took the development branch for a swirl, and it looks good. Thank you! + +Everything works as you had set out: screen, movetoscreen, movetoprevscreen and output screen prio all work as expected. The default screen position now reflects the prio settings and that's great. + +I took a look at the updates to the man page as well and it looks quite clear. + +So hey, thank you for the great work! I look forward to the incorporation of the new features in the master branch when it is ready. + +Happy holidays and a happy new year! +``` + +### Issue 31 + + * github issue number: #25 + * Fixed: 1.9.0 + +``` +The configuration man page for the input send events setting is missing the events word: + +diff --git man/cagebreak-config.5.md man/cagebreak-config.5.md +index 4eea4c5..c618314 100644 +--- man/cagebreak-config.5.md ++++ man/cagebreak-config.5.md +@@ -123,7 +123,7 @@ by prepending a line with the # symbol. + *dwt enabled|disabled* + Enables or disables disable-while-typing for the specified input device. + + - *enabled|disabled|disabled_on_external_mouse* + - + *events enabled|disabled|disabled_on_external_mouse* + Enables or disables send_events for specified input device. Disabling + send_events disables the input device. +Slightly off topic: I was hoping to use this setting to hide the mouse cursor, but it doesn't work. My embedded system must expose a pointer device even though none is connected, altough I can only infer that much because the system is very bare bones and I can't check. Is there a way to do that? +``` + +The word was omitted before 1.9.0. Mouse hiding was relegated to a new issue (#26). + +### Issue 32 + + * github issue number: #24 + * Fixed: 1.9.0 + +``` +The wlr/xwayland.h include in output.c:32 is missing an #if CG_HAS_XWAYLAND guard, which breaks building without xwayland. +``` + +Cagebreak did not build without xwayland. This bug has been fixed and building +without xwayland has been added to the release checklist. + +### Issue 33 + + * github issue number: #23 + * Fixed: 1.9.0 + +``` +Similar to djpohly/dwl#177. Xwayland works fine elsewhere: cage, hikari, kwinft, labwc, phoc, river, sway, wayfire. +``` +$ cagebreak +[...] +00:00:00.085 [xwayland/server.c:92] Starting Xwayland on :0 +00:00:00.116 [render/swapchain.c:105] Allocating new swapchain buffer +00:00:00.118 [render/allocator/gbm.c:142] Allocated 1280x720 GBM buffer (format 0x34325258, modifier 0x100000000000004) +00:00:00.118 [render/gles2/renderer.c:143] Created GL FBO for buffer 1280x720 +00:00:00.160 [types/wlr_surface.c:748] New wlr_surface 0x880d81f80 (res 0x86f22d380) +00:00:00.165 [xwayland/server.c:243] waitpid for Xwayland fork failed: No child processes +(EE) failed to read Wayland events: Broken pipe +xterm: Xt error: Can't open display: :0 + +$ cc --version +FreeBSD clang version 11.0.1 (git@github.com:llvm/llvm-project.git llvmorg-11.0.1-0-g43ff75f2c3fe) +Target: x86_64-unknown-freebsd13.0 +Thread model: posix +InstalledDir: /usr/bin + +$ pkg info -x cagebreak wayland wlroots +cagebreak-1.8.3 +wayland-1.20.0 +wayland-protocols-1.25 +xwayland-devel-21.0.99.1.171 +wlroots-0.15.1 +``` +``` + +## Issue 34 + + * github issue number: N/A + * Fixed: 1.9.0 + +Cagebreak crashed when a touch device was removed due to a call to +`wl_list_remove` on a pointer which was never initialized. + diff --git a/Changelog.md b/Changelog.md new file mode 100644 index 0000000..ff24285 --- /dev/null +++ b/Changelog.md @@ -0,0 +1,66 @@ +# Changelog + +## Release 1.0.0 + +Adds basic tiling window manager functionality to cage. + +## Release 1.1.0 + +Unifies commands and actions. See Issue 4 in Bugs.md. + +## Release 1.2.0 + +Adds output configuration as described in the man pages. + +## Release 1.3.0 + +Adds IPC as described in the man pages. + +## Release 1.4.0 + +Adds close command for windows as described in the man pages. + +## Release 1.5.0 + +Adds options to disable or enable outputs. See Issue 22 in Bugs.md and Issue #2 on github. + +## Release 1.6.0 + +Adds support for non-build dependencies and an option for builds without pandoc. + +## Release 1.7.0 + +Improves window ordering. + +## Release 1.8.0 + +Adds libinput configuration and virtual keyboard and pointer support. + +## Release 1.9.0 + +- Add message functionality (as per Issue 29 in Bugs.md) + - message + - configure_message +- Add (as per Issue 30 in Bugs.md) + - movetoprevscreen + - movetoscreen + - screen + - additional output functionality for monitor numbering +- Improve configuration documentation + - Fix Issue 31 in Bugs.md (word omission) +- Improve README.md and split off some files + - Add SECURITY.md + - Add Hashes.md (hashes of cagebreak binaries and man pages if built reproducably) + - Add Changelog.md (changelog for major and minor releases but not patches) + - Add FAQ.md (updated information from the former wiki) +- Depreciate wiki +- Fix Issue 32 in Bugs.md + - Improve release checklist to partially prevent the above issue + in the future +- Fix Issue 33 in Bugs.md +- Fix Issue 34 in Bugs.md +- Manage gpg keys + - Add new cagebreak gpg signing keys + - Add new cagebreak email contact gpg key + - Add new project-repo AUR gpg key (relevant for cagebreak-pkgbuild) + diff --git a/FAQ.md b/FAQ.md new file mode 100644 index 0000000..1077a69 --- /dev/null +++ b/FAQ.md @@ -0,0 +1,37 @@ +# Frequently Asked Questions + +## How do I do a particular thing with cagebreak? + + * Check the man pages + * [cagebreak config](man/cagebreak-config.5.md) (probably where you find the answer) + * [cagebreak](man/cagebreak.1.md) (command line options etc.) + * Check the rest of this FAQ + * [Open an issue](https://github.com/project-repo/cagebreak/issues/new) or otherwise get in touch with the development team (See section Email Contact in [SECURITY.md](SECURITY.md)). + +Note that the feature set of cagebreak is intentionally limited. + +## How do I remap Caps Lock? + +Remapping Caps Lock globally seems to be the best option. +Follow instructions [here](https://wiki.archlinux.org/title/Linux_console/Keyboard_configuration) to achieve this (should be roughly +distribution-agnostic). + +## How do I get firefox to run under wayland? + +Set the following environment variables + + * `MOZ_USE_WAYLAND=1` + * `GDK_BACKEND=wayland` + +to activate wayland support for firefox. + +## Which further resources are available? + + * [Arch Linux Wiki entry for Cagebreak](https://wiki.archlinux.org/title/Cagebreak) + * [Sway Wiki](https://github.com/swaywm/sway/wiki) + * [Cage Wiki](https://github.com/Hjdskes/cage/wiki) + +## This FAQ did not help me. What now? + + * Consider [opening an issue](https://github.com/project-repo/cagebreak/issues/new) on github or getting in touch with the + development team (See section Email Contact in [SECURITY.md](SECURITY.md)). diff --git a/Hashes.md b/Hashes.md new file mode 100644 index 0000000..abffe85 --- /dev/null +++ b/Hashes.md @@ -0,0 +1,211 @@ +# Hashes + +1.9.0 cagebreak + + * sha 256: 91096b4c558970666c5ef1ebd5c16301fbb40b52b34a73589f18a14c48edf5c1 + * sha 512: 52ec9c6996377d01d35df87ea5480a33c93cd7c62645f54523f3808fa9f84578f3a6201e969c6bdb5987e69b667be7edc8ce7067091c8413193c5e33cb434883 + +1.9.0 cagebreak.1 + + * sha 256: 431909f4c62157e57e789359a8458fc650b5f266b2fccc6fc5c0e501f8c879d3 + * sha 512: f7523288ef3ca406507ee996e189fd339623fa465585973ac769cbea7948399545e8886fe585c7ddd70ca89465c81a188137dcea5b7273353966ea882d9806bd + +1.9.0 cagebreak-config.5 + + * sha 256: 4433d8a160e48834fefb4cdd54fcec1f6038e21801c7a1dffb041b5eb238a2cc + * sha 512: af44aa42fe05b50a773420000c383fac837e45ead248876bb617c53e44e36d09a88ae26df80c1c9ffd6cf7c4dac72acb02d369888a79fed35114ed7e88fbe159 + +1.8.2 cagebreak + + * sha 256: f4d275d48ba3d999969f8cb3c8142d27aa8e8d362106ee7575e4b13c02173b2a + * sha 512: 72b11cb966b0978133b9848c2a7f57574c599c7fe895ca9f1cba16930216e1ac8aeae86d976593fc01b15e94ecc1430666f474654cf2fe41eda8c1181bf03f3d + +1.8.2 cagebreak.1 + + * sha 256: 51ee97a7c0b86268cf7622f84f7b1813df8e4a7838c00aae412a611d3693e87a + * sha 512: 5ce826afbee9cbc1129f37463f5b6d4dfc060583f6f7816dd5039b18d66a2b7e22f7293a4aa03acc4e6c690886d0297fef5b9f85d720a4467becfd833b59a160 + +1.8.2 cagebreak-config.5 + + * sha 256: 7c780ba85211ba40c7535b3f10f12312f9edeaa10030228ba21a96724469a325 + * sha 512: 9a56ba16c2aed6f17d4098e54900a5d25602f986e3606dd6ed26563c1920c66404b210dbca9f41bfcc3284bf5a42b750263bcaa2317320f8725e8f9c66e8b893 + +1.8.1 cagebreak + + * sha 256: e3247281d21525413790e3feceae129d9b0559497615d3fdd64ec2fc4ab9ab3d + * sha 512: 8c7c2820be9d7c74e3f9e239c7da740ff41d7f11cd40953dbfbc59c04942077f08625f6d7ec37e6037fd9c4b6950fc4f9af23478080665fdda867c65e0a187bf + +1.8.1 cagebreak.1 + + * sha 256: 96997afdfde9c2719533799aa48c8f036610bb04bc719130d2ab3a3617b072ee + * sha 512: 0831f5d2e3b4f23fd5775df2b7f6486099d64962567222a8fb49e6a40e7d29ed36a7c2c16201bbdcc985ac74f1d0e034b530afbe0ce58d6a0c53d467cff0a6a0 + +1.8.1 cagebreak-config.5 + + * sha 256: bd0e2eb02ba28ec1c8f2bd0fd5cd4c84af24b615fcc477414e49e68e1963cf1b + * sha 512: 7135a2b371294bfdc759a393c13fa0225f1789dba94bb09e96ae689796215b8030280d6cc09c9d1fe139f000f5a4748efd16bb3e5d3b9fcc74a19259802f20ef + +1.8.0 cagebreak + + * sha 256: ac84aa4a08c311da79ca29d92eef4254cb625674b255dbb75621ee6b171a1d79 + * sha 512: c047bb1986fd1d444547e4d64aa7ef9138b3d30327ac3ad9b4c6976e8df6638bae07c39293b5bc9c20e959c0a22b0e40eb2b23b4766d9a5531377ff954b16229 + +1.8.0 cagebreak.1 + + * sha 256: 4de43de7bde67d6d806d206dffc34389f0b5c3ba648bfef673b7bc0adeb29202 + * sha 512: 72aac9a2e9a47f2f85949222d5944dc293332a616e3b961c625fe876172f66638038057c30aa18904d6d969451f468b4fe45e918c0b204cf6952d58ea4c69c33 + +1.8.0 cagebreak-config.5 + + * sha 256: 678aadde06b5ff6bfbd9bc9460423210f9599bcaa0e50c2eae076dc6d6852781 + * sha 512: 72056018fc1c559f26bd7e007b3f1db7d478cec7ec9337620e03a1e3d06910e244a52e8f655ea4f5d73669ffe064bbd23506005d9a6c06764b0f820d7a1df43f + +1.7.4 cagebreak + + * sha 256: c7442db906239b13f8d09e91cbe01f9e47b2a2c75bbb4b52adefd15dfbfa820f + * sha 512: 9c36ce706f31e1b8afacd8f9cd216c460d66030e0b2736a3dd929902b0d5fc52c5e69dbf6787205b8c495d960e00b6e7f633da86ab6e31613f1b4a9fd47c9f0e + +1.7.4 cagebreak.1 + + * sha 256: 3dacc521e5e9b963cceeefeed6a10104c7c415d86826a72788aba5b33ce320f1 + * sha 512: 0a4c4fbff09dd403fed61056ae3211ad2b4370b4e9ed07806fc22624e5312b4a25e469dc0eef1ca4556cbb8efabb0127e7519df79852e110faa98fb17ca377de + +1.7.4 cagebreak-config.5 + + * sha 256: ed22fed1818172f31d3fb3efbe5e66b49f135cb2367b1c85209fd880ff7532ab + * sha 512: cc634c63962ae50b4de20a3aad8ca0970175b53156690d69e6a69fd8f370ad20d84db783cc7e94c61d4d4d89f1205d43622690e58afba549ed57ddad009e3bac + +1.7.3 cagebreak + + * sha 256: 8adb4911d9603fec5b8eb4f67a09be95b8f0b37e50d4ab579191da78df18f70b + * sha 512: eddaecd7b577b9fe77b1ed4d341074f7f860967568392d0479543ea8860b4289df3eb5645885e18e35260b14843663ae50f98103f8016e857237a397632322a6 + +1.7.3 cagebreak.1 + + * sha 256: bcc623e42c86ab65bc2f8cb7e4377ca0d816ddc281527b7caeded62753e943b8 + * sha 512: b4290e1040bd6a299d478ad6b695de75cf030d0d274340b43d3ed4382cf6877f824cd4ed9d7020bfb55afe276c62de7fc07c3fbee6f6485c6440a024115afe12 + +1.7.3 cagebreak-config.5 + + * sha 256: b9789b6abd473e9afb33d4e2c7822f7d8f3c10e9eb3fb70c47b713f6331c626a + * sha 512: c49e01cfc4a4ed272f054bea8f2845f0e3f1609cf85d1a0ce14c1b67dc207df153b11bc20ceef09c855d467f0e013e54623ce9f70c217c4278607fc54d0e3206 + +1.7.2 cagebreak + + * sha 256: 40f4642e8e8caee338055079b046f6e0b790c87226ee307b27a64fcb2a6c6472 + * sha 512: 22c5f1986ca4262a7c08a6c03cffe36eaedd8c3c5e27e12baf12a90f94aea088ac93ee107770f162fc70148be687f6394b8fd64ad3fe14414bdf63b55b33798e + +1.7.2 cagebreak.1 + + * sha 256: 3253e592c40c78fd3733c761163acc2efaaf5865627cf51fd33cc0bc5d9cc6e7 + * sha 512: 901305e166c10aa7e4a26b721a69e0ba4779f4f8ee690551438ceadae65929f13949457872b9397dd46c5b7bad6a6f2638d6fd6df9bc5567c914c798cbf3e9a4 + +1.7.2 cagebreak-config.5 + + * sha 256: 148ec4d80dc9a86485fe77f8daf1f7fa4cb3d1b6aaa709bb012005583779e1f7 + * sha 512: d5732572e47dd07078ac2f6d589522e6007188fc05ac79520c93442212d5c0341459f135191b88c608a75b2f56c2de4065566bd869fbc24e475936d32a54a7f8 + +1.7.1 cagebreak + + * sha 256: 5a40797e016a2fa32b5bb70a056b35c482bef09f1795bbaf0188dbadaf8197c3 + * sha 512: 2ef327b63ac4651f23517be8d5cb8fbec99bd889f52f8abfd62a09ca6e6c0060347ab8d60e4917d39edd36db34597a673239967533f14457733acb97f6c29a7f + +1.7.1 cagebreak.1 + + * sha 256: 0301f04254ae6e7ada7e22bbe7aee022ec0793fbce434a396868258e6f1ea4cf + * sha 512: f0c0c5de30be907e9ba5c9cfa0bca8cef3e94c0b5f52de9e2c3681c85aa957f75e92b5e26bb894c3a5e251295cfe7a1470653cc7dc05564d7d91c6eb43b7409a + +1.7.1 cagebreak-config.5 + + * sha 256: 6882330a77f3ff98ea642f47b4090b38d542abf0b7be3f226486c5614899efc6 + * sha 512: a572f97836e4ccc6d67aa21c7f4aaebe06adb066c70038b670ec1ef267e3750764cb53e96b8d7bc24c7f993f24c0cfabee183307b45006d049f7416559bcaca4 + +1.7.0 + + * sha 256: 5af11b84e61a82a1a276e8f91f6ebc6baafd2c98d22be3da1d01734cc9d55faa + * sha 512: 45474115fb4c28fe1ee91ad54706bfe521b6e70bd8ea619b94a3f50bae426891bf6a0387aa9b2f7f6d18349280c4e84973e4e433d50c090e5a764c64fa67795d + +1.6.0 + + * sha 256: aef473eae73454429afb158d66a7bd9aec75ef915845b7508de5448820357aa8 + * sha 512: 17889bc1af9f343598a5ee599b25e702987dd0bd905a9566874e8a0094c57168e413938624949fa214e6e382cbcf89d7342292b44012cd8e692947f6c01a960a + +1.5.1 + + * sha 256: 9c6df4b94c180f5657cb424383aa2bf3aca063c8e7b40af0497be1ef7bdb858a + * sha 512: 219f753347ae64a4dd593568797438742e9ddae380c729598d8eda863080a6ed4e5086d735fc348c48328bb795a5a5b57b0421be5dd45755744d895b24312627 + +1.5.0 + + * sha 256: 22010e2916493b0d7cfb08c2196f12589509ce11010a7107aed13ddbfd9709cc + * sha 512: 707d6cc01326ba32402f9fb402ff8aceaeaba63ca6ba2eb157e5a4c83123515a3a74da960813479db303eddc2e7f79f39b241dff05b89d47d72d5f1d20ca6d37 + +1.4.4 + + * sha 256: c6e08e19feb17f768e136cf02f5692ef121ff289763dc60ef8678103803d3307 + * sha 512: aebf27fa9c24f93dfd0b7c96536c253e2ea603d6746c40e8de2163e06367bc57ac4e22d6c07dd1e0963cce5b18b460d373e15b5c12a5a42ae6b70787971960c9 + +1.4.3 + + * sha 256: 5e29cbaf7c0c5ca74f71a5605bb3d6e302e051798401fee9a79419720b8d8e95 + * sha 512: 8004865f8603648d9ac9bb700f3ee040e6516c222ad3d783b34219c8fa3a7bdbba6abb74fe92c4d0bd4dbbce0ec4d08be12297a8bad5032baeb589eec557e24e + +1.4.2 + + * sha 256: 27efb9328cf9cab1f81e66627696baf8c7cc2c372339a2890f955b40f3a7c396 + * sha 512: afcdbbce0753aff4770a88ddbd7df5687a7de0c77de3a2d296f85a8b8e01813212be6a0b69548aadef58e0e7da19ffea71c4f3448572656d4b19ff7f2f2fb70a + +1.4.1 + + * sha 256: c3e0ccceaf1078b91071c40b0ccb7c4f8e53ae38b05ee6637f9f39f7f6ece2cb + * sha 512: fd77f39fc7a7e5376d8505a61d643ed4d8f4cfbbf38d70cf9ef6989645e8cc6cb9d4b1024d241dc689b6fd927a405c97b9c918b6994b8f9ab7406646f37b952d + +1.4.0 + + * sha 256: 14aa93d890c62cc763b3b546a51ad8560479d5e91fa9f949858ae6bc785e80be + * sha 512: 88f93b49792684c38553b65d2296a0e502a059814a0cfff30d05c89958870d6f66d67aac2074cfd307bad82b0d72d5c4944822a61a68f665dc161407db365fbc + +1.3.4 + + * sha 256: ea9f634b8f6e2b9f191745a25abff4969eb7ea19cb3186b79a6138904aedeb1c + * sha 512: 9094f9c92acbff8fd95d38e7458c5184804f8913fa8c405bc2b6a0a220fe478b06cfeadbae41bd5ef84bde8d5642c249df9dada953e39c25926aa650c30a5309 + +1.3.3 + + * sha 256: 801851ceb52afac333a1decdd236ddef55555f8b36f865e8b3a831975a496f0d + * sha 512: ce64dd56ab99bba0a83414fecc82d85322e1ca5ca3a2ca77bdc7055b2dd10fd5e20e3ff62809a696d1b04ff0046fed88e2d7538aa447099d7c2d7df8e627b2e0 + +1.3.2 + + * sha 256: 2cefab73b8d5902b30adb0dda1bd292af2ee808d232abcc4b2a2802d522d5232 + * sha 512: 3789efde2cb6f629c77738dd6c8638646b345d5272868aa9b244b2b19c53e6a0f5911d34744e3a9ff6253c73b2b11f6714f37ae86cc21d6979e0c8539315d659 + +1.3.1 + + * sha 256: 71be224cd99d20da4f039675ec5c48213dd14ef027b804501fa3241886b2b08b + * sha 512: d094b786e5a74b01699997a85747943e6de3544cc903dd1c5dba449c66bd925b6378de800d3734969dabf8a20c7004dc3402e3c59577db09ce107b68a1f7bd21 + +1.3.0 + + * sha 256: aecc5292f56f7250d777110cee1f11a92018a9eb2117d7d37cd51d7d3a5cbae0 + * sha 512: 1d2d220f44787a97359a32f305e33185f0369551e61a9d7066023bfa43de50849eba5bcbb0083d2dc563ac993b8d51dd733afa0adb2a823ef50ecfee5624bbc0 + +1.2.1 + + * sha 256: 803f7667dc4997062f9ec95afcdca0cac68c82a7cf057cef83fe1ccfee33b8bc + * sha 512: 4d6b7efea10d190a153f893123b1715f290f4b131b490f3d23f489e2dd8edbb886001282849aad9575ad2f40375bbbded59c1cb6157115fcc14dd6a2a061b103 + +1.2.0 + + * sha 256: b3c6135833001a0ef600ea9628cca11f4130a524ebe748929d8f7bad034f2bf0 + * sha 512: c044a086a9f65b0d27d05e2f12a20fe5d77386fc5682991c13a1894a84804bcd337c9167235869661d6e6581133521bd710ef2330066a5d2e2703d1630042f3f + +1.1.0 + + * sha 256: fc393e225c549f893b9e21e8b904e546d5857bac1d905b3d26334c8f8a1cda11 + * sha 512: 8b94b1069e767202bcab087cb592eadc42f0453d17ee119d48760be00bc66278cf0fa60bb09308d30cb551df6a7a3e26e2ab8b29c04f0e953cc6906542cd2d6f + +1.0.6 + + * sha 256: 712ae9a8f17a9e589e108f0d503da203cc5eaf1c4a6ca6efb5b4c83b432ce0b8 + * sha 512: d574003023a00cfd6623aac986a5a7f397cfd0bc9114017629a8c72731b0df3977c4a31768502dfa8a6607be06930089b2ccf6ffca9b5bcd1096b7ca0aede226 diff --git a/README.md b/README.md index 939a682..3da2c16 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,23 @@ # Cagebreak: A Wayland Tiling Compositor Inspired by Ratpoison -This is Cagebreak, a Wayland tiling compositor. The goal of this project is to -provide a successor to ratpoison for Wayland users. However, this is -no reimplementation of ratpoison. Should you like to know if a feature -will be implemented, open an issue or get in touch with the development team. +This is Cagebreak, a Wayland tiling compositor. + +The goal of this project is to provide a successor to ratpoison for Wayland +users. However, this is no reimplementation of ratpoison. + +Should you like to know if a feature will be implemented, open an issue +or get in touch with the development team. For documentation of Cagebreak, please see -the man pages for [cagebreak](man/cagebreak.1.md) and cagebreak -[configuration](man/cagebreak-config.5.md) and the -[Wiki](https://github.com/project-repo/cagebreak/wiki/). + * the man pages + * [cagebreak](man/cagebreak.1.md) + * [configuration](man/cagebreak-config.5.md) + * also the [FAQ](FAQ.md) Cagebreak is based on [Cage](https://github.com/Hjdskes/cage), a Wayland kiosk compositor. -Cagebreak is currently being developed under Arch Linux and uses the libraries +Cagebreak is developed under Arch Linux and uses the libraries as they are obtained through pacman. However, cagebreak should also work on other distributions given the proper library versions. @@ -21,8 +25,11 @@ other distributions given the proper library versions. If you are using archlinux, just use the PKGBUILDs from the aur: - * Using the `cagebreak` package, Cagebreak is compiled on the target system (since release 1.3.0) - * Using `cagebreak-bin` package, the pre-built binaries are extracted to the appropriate paths on the target system (since release 1.3.2) + * Using [cagebreak](https://aur.archlinux.org/packages/cagebreak), Cagebreak is + compiled on the target system (since release 1.3.0) + * Using [cagebreak-bin](https://aur.archlinux.org/packages/cagebreak-bin), + the pre-built binaries are extracted to + appropriate paths on the target system (since release 1.3.2) See [cagebreak-pkgbuild](https://github.com/project-repo/cagebreak-pkgbuild) for details. @@ -59,7 +66,7 @@ $ ninja -C build By default, this builds a debug build. To build a release build, use `meson build --buildtype=release`. -#### Xwayland Support +##### Xwayland Support Cagebreak comes with compile-time support for XWayland. To enable this, first make sure that your version of wlroots is compiled with this @@ -67,9 +74,9 @@ option. Then, add `-Dxwayland=true` to the `meson` command above. Note that you'll need to have the XWayland binary installed on your system for this to work. -#### Man Pages +##### Man Pages -Cagebreak has man pages. To use them, make sure that you have `pandoc` +Cagebreak has man pages. To use them, make sure that you have `scdoc` installed. Then, add `-Dman-pages=true` to the `meson` command. ### Running Cagebreak @@ -81,24 +88,22 @@ KMS+DRM backend. For more configuration options, see the man pages. ## Contributing to Cagebreak -Cagebreak is currently developed to fit the needs of its creators. Should you desire -to implement a feature, please let us know in advance by opening an issue. However, -the feature set is intentionally limited (i.e. we removed support for a desktop -background) and will continue to be so in the future. +Cagebreak is currently developed to fit the needs of its creators. Should you +desire to implement a feature, please let us know in advance by opening +an issue. However, the feature set is intentionally limited (i.e. we removed +support for a desktop background) and will continue to be so in the future. -Nonetheless, don't be intimidated by the (slightly lengthy) release checklist or any other -part of this file. Do what you can, open an issue and we will collaborate -toward a solution. +Nonetheless, don't be intimidated by the (slightly lengthy) release checklist +or any other part of this file. Do what you can, open an issue and we will +collaborate toward a solution. ### Branching Strategy and Versioning -All features are to be developed on feature branches, named after the feature. +There exists a branch `development` to which all reasonable code +is comitted for final testing. -There exists a branch `development` to which all reasonable feature branches -are merged for final testing. - -Once `development` is ready for a release, meaning that the release checklist is fulfilled, -it is merged into `master`, creating a new release, which is tagged and signed. +Once `development` is ready for a release, it is merged into `master` (possibly via +a cherry-picked branch), creating a new release, which is tagged and signed. All releases are tagged according to [semantic versioning](https://semver.org) guidelines. @@ -107,7 +112,7 @@ In the past, our git history did not perfectly reflect this scheme. ### Releases The release checklist must be completely fulfilled in one run for a release to -occur. Once any failure occurs the entire checklist must be completed from scratch. +occur. * [ ] `git checkout development` * [ ] `git pull origin development` @@ -120,13 +125,16 @@ occur. Once any failure occurs the entire checklist must be completed from scrat * [ ] man/cagebreak * [ ] man/cagebreak-config * [ ] Set EPOCH to release day in man generation in meson.build - * [ ] wiki - * [ ] README.md Changelog for major and minor releases but not patches + * [ ] FAQ.md + * [ ] Changelog.md for major and minor releases but not patches + * [ ] Check features for SECURITY.md relevance (changes to socket scope + for example) * [ ] Fixed bugs documented in Bugs.md * [ ] Include issue description from github * [ ] Testing * [ ] Manual testing * [ ] Libfuzzer testing + * [ ] Build version without xwayland support * [ ] Version Number * [ ] meson.build * [ ] git tag @@ -165,6 +173,9 @@ occur. Once any failure occurs the entire checklist must be completed from scrat * [ ] `cp build/cagebreak-config.5 release-artefacts_version/` * [ ] `cp build/cagebreak-config.5.sig release-artefacts_version/` * [ ] `cp LICENSE release-artefacts_version/` + * [ ] `cp README.md release-artefacts_version/` + * [ ] `cp SECURITY.md release-artefacts_version/` + * [ ] `cp FAQ.md release-artefacts_version/` * [ ] `export SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct) ; tar --sort=name --mtime= --owner=0 --group=0 --numeric-owner -czf release-artefacts_version.tar.gz release-artefacts_version` * [ ] Checked archive * [ ] tar -xvf release_version.tar.gz @@ -204,215 +215,7 @@ For every release after 1.0.5, hashes will be provided. For every release after 1.7.0, hashes will be provided for man pages too. -1.8.3 cagebreak - - * sha 256: 85803b75b1be0d9bf600175ce6aa981a1632768872e5afddea7569f825c1f7c3 - * sha 512: 96c9b33804bbd7c652e32556d5001e12c2b07ab7127118a050be513bd6e0d6241fb78c80d9cce50447ae32a7b33c5c6a6cf1def36efaf3d8e8ddb028bcd769df - -1.8.3 cagebreak.1 - - * sha 256: e583f818d73484cbcae65dbe6ffc226ea58fdad87363213ea5b1059d866216e4 - * sha 512: b96d8f9308d31bb1faa346267136fd7a53caed95065e7da09713b5f64addb42c835b27cd6cfa6bcf8c5b5d572a73b1e828f47b14e06a00b0871a77a25a286597 - -1.8.3 cagebreak-config.5 - - * sha 256: d0be008e0e5d47b876ccfb8cf70967097673b81fa93718838db45f4056b76bc0 - * sha 512: 42f8d25eb89219aebd00e927627a51fd8b7f6fda6f7c6147abbc0e4fae5de1ceb5827b79a814127a0706cc213d7717733e02cfa5275960cb0cce23eb54493b1e - -1.8.2 cagebreak - - * sha 256: f4d275d48ba3d999969f8cb3c8142d27aa8e8d362106ee7575e4b13c02173b2a - * sha 512: 72b11cb966b0978133b9848c2a7f57574c599c7fe895ca9f1cba16930216e1ac8aeae86d976593fc01b15e94ecc1430666f474654cf2fe41eda8c1181bf03f3d - -1.8.2 cagebreak.1 - - * sha 256: 51ee97a7c0b86268cf7622f84f7b1813df8e4a7838c00aae412a611d3693e87a - * sha 512: 5ce826afbee9cbc1129f37463f5b6d4dfc060583f6f7816dd5039b18d66a2b7e22f7293a4aa03acc4e6c690886d0297fef5b9f85d720a4467becfd833b59a160 - -1.8.2 cagebreak-config.5 - - * sha 256: 7c780ba85211ba40c7535b3f10f12312f9edeaa10030228ba21a96724469a325 - * sha 512: 9a56ba16c2aed6f17d4098e54900a5d25602f986e3606dd6ed26563c1920c66404b210dbca9f41bfcc3284bf5a42b750263bcaa2317320f8725e8f9c66e8b893 - -1.8.1 cagebreak - - * sha 256: e3247281d21525413790e3feceae129d9b0559497615d3fdd64ec2fc4ab9ab3d - * sha 512: 8c7c2820be9d7c74e3f9e239c7da740ff41d7f11cd40953dbfbc59c04942077f08625f6d7ec37e6037fd9c4b6950fc4f9af23478080665fdda867c65e0a187bf - -1.8.1 cagebreak.1 - - * sha 256: 96997afdfde9c2719533799aa48c8f036610bb04bc719130d2ab3a3617b072ee - * sha 512: 0831f5d2e3b4f23fd5775df2b7f6486099d64962567222a8fb49e6a40e7d29ed36a7c2c16201bbdcc985ac74f1d0e034b530afbe0ce58d6a0c53d467cff0a6a0 - -1.8.1 cagebreak-config.5 - - * sha 256: bd0e2eb02ba28ec1c8f2bd0fd5cd4c84af24b615fcc477414e49e68e1963cf1b - * sha 512: 7135a2b371294bfdc759a393c13fa0225f1789dba94bb09e96ae689796215b8030280d6cc09c9d1fe139f000f5a4748efd16bb3e5d3b9fcc74a19259802f20ef - -1.8.0 cagebreak - - * sha 256: ac84aa4a08c311da79ca29d92eef4254cb625674b255dbb75621ee6b171a1d79 - * sha 512: c047bb1986fd1d444547e4d64aa7ef9138b3d30327ac3ad9b4c6976e8df6638bae07c39293b5bc9c20e959c0a22b0e40eb2b23b4766d9a5531377ff954b16229 - -1.8.0 cagebreak.1 - - * sha 256: 4de43de7bde67d6d806d206dffc34389f0b5c3ba648bfef673b7bc0adeb29202 - * sha 512: 72aac9a2e9a47f2f85949222d5944dc293332a616e3b961c625fe876172f66638038057c30aa18904d6d969451f468b4fe45e918c0b204cf6952d58ea4c69c33 - -1.8.0 cagebreak-config.5 - - * sha 256: 678aadde06b5ff6bfbd9bc9460423210f9599bcaa0e50c2eae076dc6d6852781 - * sha 512: 72056018fc1c559f26bd7e007b3f1db7d478cec7ec9337620e03a1e3d06910e244a52e8f655ea4f5d73669ffe064bbd23506005d9a6c06764b0f820d7a1df43f - -1.7.4 cagebreak - - * sha 256: c7442db906239b13f8d09e91cbe01f9e47b2a2c75bbb4b52adefd15dfbfa820f - * sha 512: 9c36ce706f31e1b8afacd8f9cd216c460d66030e0b2736a3dd929902b0d5fc52c5e69dbf6787205b8c495d960e00b6e7f633da86ab6e31613f1b4a9fd47c9f0e - -1.7.4 cagebreak.1 - - * sha 256: 3dacc521e5e9b963cceeefeed6a10104c7c415d86826a72788aba5b33ce320f1 - * sha 512: 0a4c4fbff09dd403fed61056ae3211ad2b4370b4e9ed07806fc22624e5312b4a25e469dc0eef1ca4556cbb8efabb0127e7519df79852e110faa98fb17ca377de - -1.7.4 cagebreak-config.5 - - * sha 256: ed22fed1818172f31d3fb3efbe5e66b49f135cb2367b1c85209fd880ff7532ab - * sha 512: cc634c63962ae50b4de20a3aad8ca0970175b53156690d69e6a69fd8f370ad20d84db783cc7e94c61d4d4d89f1205d43622690e58afba549ed57ddad009e3bac - -1.7.3 cagebreak - - * sha 256: 8adb4911d9603fec5b8eb4f67a09be95b8f0b37e50d4ab579191da78df18f70b - * sha 512: eddaecd7b577b9fe77b1ed4d341074f7f860967568392d0479543ea8860b4289df3eb5645885e18e35260b14843663ae50f98103f8016e857237a397632322a6 - -1.7.3 cagebreak.1 - - * sha 256: bcc623e42c86ab65bc2f8cb7e4377ca0d816ddc281527b7caeded62753e943b8 - * sha 512: b4290e1040bd6a299d478ad6b695de75cf030d0d274340b43d3ed4382cf6877f824cd4ed9d7020bfb55afe276c62de7fc07c3fbee6f6485c6440a024115afe12 - -1.7.3 cagebreak-config.5 - - * sha 256: b9789b6abd473e9afb33d4e2c7822f7d8f3c10e9eb3fb70c47b713f6331c626a - * sha 512: c49e01cfc4a4ed272f054bea8f2845f0e3f1609cf85d1a0ce14c1b67dc207df153b11bc20ceef09c855d467f0e013e54623ce9f70c217c4278607fc54d0e3206 - -1.7.2 cagebreak - - * sha 256: 40f4642e8e8caee338055079b046f6e0b790c87226ee307b27a64fcb2a6c6472 - * sha 512: 22c5f1986ca4262a7c08a6c03cffe36eaedd8c3c5e27e12baf12a90f94aea088ac93ee107770f162fc70148be687f6394b8fd64ad3fe14414bdf63b55b33798e - -1.7.2 cagebreak.1 - - * sha 256: 3253e592c40c78fd3733c761163acc2efaaf5865627cf51fd33cc0bc5d9cc6e7 - * sha 512: 901305e166c10aa7e4a26b721a69e0ba4779f4f8ee690551438ceadae65929f13949457872b9397dd46c5b7bad6a6f2638d6fd6df9bc5567c914c798cbf3e9a4 - -1.7.2 cagebreak-config.5 - - * sha 256: 148ec4d80dc9a86485fe77f8daf1f7fa4cb3d1b6aaa709bb012005583779e1f7 - * sha 512: d5732572e47dd07078ac2f6d589522e6007188fc05ac79520c93442212d5c0341459f135191b88c608a75b2f56c2de4065566bd869fbc24e475936d32a54a7f8 - -1.7.1 cagebreak - - * sha 256: 5a40797e016a2fa32b5bb70a056b35c482bef09f1795bbaf0188dbadaf8197c3 - * sha 512: 2ef327b63ac4651f23517be8d5cb8fbec99bd889f52f8abfd62a09ca6e6c0060347ab8d60e4917d39edd36db34597a673239967533f14457733acb97f6c29a7f - -1.7.1 cagebreak.1 - - * sha 256: 0301f04254ae6e7ada7e22bbe7aee022ec0793fbce434a396868258e6f1ea4cf - * sha 512: f0c0c5de30be907e9ba5c9cfa0bca8cef3e94c0b5f52de9e2c3681c85aa957f75e92b5e26bb894c3a5e251295cfe7a1470653cc7dc05564d7d91c6eb43b7409a - -1.7.1 cagebreak-config.5 - - * sha 256: 6882330a77f3ff98ea642f47b4090b38d542abf0b7be3f226486c5614899efc6 - * sha 512: a572f97836e4ccc6d67aa21c7f4aaebe06adb066c70038b670ec1ef267e3750764cb53e96b8d7bc24c7f993f24c0cfabee183307b45006d049f7416559bcaca4 - -1.7.0 - - * sha 256: 5af11b84e61a82a1a276e8f91f6ebc6baafd2c98d22be3da1d01734cc9d55faa - * sha 512: 45474115fb4c28fe1ee91ad54706bfe521b6e70bd8ea619b94a3f50bae426891bf6a0387aa9b2f7f6d18349280c4e84973e4e433d50c090e5a764c64fa67795d - -1.6.0 - - * sha 256: aef473eae73454429afb158d66a7bd9aec75ef915845b7508de5448820357aa8 - * sha 512: 17889bc1af9f343598a5ee599b25e702987dd0bd905a9566874e8a0094c57168e413938624949fa214e6e382cbcf89d7342292b44012cd8e692947f6c01a960a - -1.5.1 - - * sha 256: 9c6df4b94c180f5657cb424383aa2bf3aca063c8e7b40af0497be1ef7bdb858a - * sha 512: 219f753347ae64a4dd593568797438742e9ddae380c729598d8eda863080a6ed4e5086d735fc348c48328bb795a5a5b57b0421be5dd45755744d895b24312627 - -1.5.0 - - * sha 256: 22010e2916493b0d7cfb08c2196f12589509ce11010a7107aed13ddbfd9709cc - * sha 512: 707d6cc01326ba32402f9fb402ff8aceaeaba63ca6ba2eb157e5a4c83123515a3a74da960813479db303eddc2e7f79f39b241dff05b89d47d72d5f1d20ca6d37 - -1.4.4 - - * sha 256: c6e08e19feb17f768e136cf02f5692ef121ff289763dc60ef8678103803d3307 - * sha 512: aebf27fa9c24f93dfd0b7c96536c253e2ea603d6746c40e8de2163e06367bc57ac4e22d6c07dd1e0963cce5b18b460d373e15b5c12a5a42ae6b70787971960c9 - -1.4.3 - - * sha 256: 5e29cbaf7c0c5ca74f71a5605bb3d6e302e051798401fee9a79419720b8d8e95 - * sha 512: 8004865f8603648d9ac9bb700f3ee040e6516c222ad3d783b34219c8fa3a7bdbba6abb74fe92c4d0bd4dbbce0ec4d08be12297a8bad5032baeb589eec557e24e - -1.4.2 - - * sha 256: 27efb9328cf9cab1f81e66627696baf8c7cc2c372339a2890f955b40f3a7c396 - * sha 512: afcdbbce0753aff4770a88ddbd7df5687a7de0c77de3a2d296f85a8b8e01813212be6a0b69548aadef58e0e7da19ffea71c4f3448572656d4b19ff7f2f2fb70a - -1.4.1 - - * sha 256: c3e0ccceaf1078b91071c40b0ccb7c4f8e53ae38b05ee6637f9f39f7f6ece2cb - * sha 512: fd77f39fc7a7e5376d8505a61d643ed4d8f4cfbbf38d70cf9ef6989645e8cc6cb9d4b1024d241dc689b6fd927a405c97b9c918b6994b8f9ab7406646f37b952d - -1.4.0 - - * sha 256: 14aa93d890c62cc763b3b546a51ad8560479d5e91fa9f949858ae6bc785e80be - * sha 512: 88f93b49792684c38553b65d2296a0e502a059814a0cfff30d05c89958870d6f66d67aac2074cfd307bad82b0d72d5c4944822a61a68f665dc161407db365fbc - -1.3.4 - - * sha 256: ea9f634b8f6e2b9f191745a25abff4969eb7ea19cb3186b79a6138904aedeb1c - * sha 512: 9094f9c92acbff8fd95d38e7458c5184804f8913fa8c405bc2b6a0a220fe478b06cfeadbae41bd5ef84bde8d5642c249df9dada953e39c25926aa650c30a5309 - -1.3.3 - - * sha 256: 801851ceb52afac333a1decdd236ddef55555f8b36f865e8b3a831975a496f0d - * sha 512: ce64dd56ab99bba0a83414fecc82d85322e1ca5ca3a2ca77bdc7055b2dd10fd5e20e3ff62809a696d1b04ff0046fed88e2d7538aa447099d7c2d7df8e627b2e0 - -1.3.2 - - * sha 256: 2cefab73b8d5902b30adb0dda1bd292af2ee808d232abcc4b2a2802d522d5232 - * sha 512: 3789efde2cb6f629c77738dd6c8638646b345d5272868aa9b244b2b19c53e6a0f5911d34744e3a9ff6253c73b2b11f6714f37ae86cc21d6979e0c8539315d659 - -1.3.1 - - * sha 256: 71be224cd99d20da4f039675ec5c48213dd14ef027b804501fa3241886b2b08b - * sha 512: d094b786e5a74b01699997a85747943e6de3544cc903dd1c5dba449c66bd925b6378de800d3734969dabf8a20c7004dc3402e3c59577db09ce107b68a1f7bd21 - -1.3.0 - - * sha 256: aecc5292f56f7250d777110cee1f11a92018a9eb2117d7d37cd51d7d3a5cbae0 - * sha 512: 1d2d220f44787a97359a32f305e33185f0369551e61a9d7066023bfa43de50849eba5bcbb0083d2dc563ac993b8d51dd733afa0adb2a823ef50ecfee5624bbc0 - -1.2.1 - - * sha 256: 803f7667dc4997062f9ec95afcdca0cac68c82a7cf057cef83fe1ccfee33b8bc - * sha 512: 4d6b7efea10d190a153f893123b1715f290f4b131b490f3d23f489e2dd8edbb886001282849aad9575ad2f40375bbbded59c1cb6157115fcc14dd6a2a061b103 - -1.2.0 - - * sha 256: b3c6135833001a0ef600ea9628cca11f4130a524ebe748929d8f7bad034f2bf0 - * sha 512: c044a086a9f65b0d27d05e2f12a20fe5d77386fc5682991c13a1894a84804bcd337c9167235869661d6e6581133521bd710ef2330066a5d2e2703d1630042f3f - -1.1.0 - - * sha 256: fc393e225c549f893b9e21e8b904e546d5857bac1d905b3d26334c8f8a1cda11 - * sha 512: 8b94b1069e767202bcab087cb592eadc42f0453d17ee119d48760be00bc66278cf0fa60bb09308d30cb551df6a7a3e26e2ab8b29c04f0e953cc6906542cd2d6f - -1.0.6 - - * sha 256: 712ae9a8f17a9e589e108f0d503da203cc5eaf1c4a6ca6efb5b4c83b432ce0b8 - * sha 512: d574003023a00cfd6623aac986a5a7f397cfd0bc9114017629a8c72731b0df3977c4a31768502dfa8a6607be06930089b2ccf6ffca9b5bcd1096b7ca0aede226 +See [Hashes.md](Hashes.md) #### GPG Signatures @@ -441,6 +244,8 @@ keys. * 8F872885968EB8C589A32E9539ACC012896D450F * 896B92AF738C974E0065BF42F2576BD366156BB9 * AA927AFD50AF7C6810E69FE8274F2C605359E31B + * BE2DED372287BC4EB2213E13A0C743848A638955 + * 0F3476E4B2404F95EC41600683D5810F7911B020 Should we at any point retire a key, we will only replace it with keys signed by at least one of the above collection. @@ -520,61 +325,19 @@ issue](https://github.com/project-repo/cagebreak/issues/new) on Fixed bugs are to be assigned a number and summarized inside Bugs.md for future reference independent of github, in case this service is unavailable. -### Security Bugs +Mail contact: `cagebreak @ project-repo . co` -Should you want to get in touch with the developers of cagebreak to report a -security vulnerability or a different issue confidentially, contact -`cagebreak @ project-repo . co`. - -We will try to respond to everything that is not obvious spam. - -Please encrypt your email with the appropriate GPG key found in `keys/`. +GPG Fingerprints: * B15B92642760E11FE002DE168708D42451A94AB5 * F8DD9F8DD12B85A28F5827C4678E34D2E753AA3C + * 3ACEA46CCECD59E4C8222F791CBEB493681E8693 -Note that the keys are signed by cagebreak signing keys. - -If you want us to respond via GPG-encrypted mail, please include your own -public key or provide the fingerprint and directions to obtain the key. +See [SECURITY.md](SECURITY.md) for details. ## Changelog -### Release 1.0.0 - -Adds basic tiling window manager functionality to cage. - -### Release 1.1.0 - -Unifies commands and actions. See Issue 4 in Bugs.md. - -### Release 1.2.0 - -Adds output configuration as described in the man pages. - -### Release 1.3.0 - -Adds IPC as described in the man pages. - -### Release 1.4.0 - -Adds close command for windows as described in the man pages. - -### Release 1.5.0 - -Adds options to disable or enable outputs. See Issue 22 in Bugs.md and Issue #2 on github. - -### Release 1.6.0 - -Adds support for non-build dependencies and an option for builds without pandoc. - -### Release 1.7.0 - -Improve window ordering. - -### Release 1.8.0 - -Adds libinput configuration and virtual keyboard and pointer support. +See [Changelog.md](Changelog.md) ## Contributors diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..5f8ee2c --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,91 @@ +# Security + +The main possibility for security bugs to occur in cagebreak is by privilege +escalation using the socket. Indeed, any program with access to the socket +immediately gains arbitrary code execution rights. As of right now, the socket +is world-writable. If you disagree with this threat model, you may contact +us via email (See section Email Contact below.) or [open an issue on github](https://github.com/project-repo/cagebreak/issues/new). + +Should any problem with the github issue system arise or any other reason +for (potentially confidential) contact with the Cagebreak authors appear, +you may contact us via email (See section Email Contact below.). + +## Supported Versions + +The latest release always contains the latest bug fixes and features. +There are no official backports for security vulnerabilities. Builds +are reproducible under conditions outlined in [README.md](README.md). + +## Bug Reports + +For normal bugs you may [open an issue on github](https://github.com/project-repo/cagebreak/issues/new). + +For everything else, an email contact (with gpg encryption and signature) +is available below. + +## Email Contact + +Should you want to get in touch with the developers of cagebreak to report +a security vulnerability or anything else via email, contact +`cagebreak @ project-repo . co`. + +We will try to respond to everything that is not obvious spam. + +### GPG-Encrypted Emails + +If you can, please encrypt your email with the appropriate GPG key found +in `keys/` and sign your message with your own key. + + * B15B92642760E11FE002DE168708D42451A94AB5 + * F8DD9F8DD12B85A28F5827C4678E34D2E753AA3C + * 3ACEA46CCECD59E4C8222F791CBEB493681E8693 + +Note that our keys are signed by cagebreak signing keys. + +If you want us to respond via GPG-encrypted email, please include your own +public key or provide the fingerprint and directions to obtain the key. + +## Threat Model + +Cagebreak is a wayland compositor, which is run by the user of the system +and thus has access to whichever resources this user has access to. +Cagebreak can restrict other programs in no way, because this would hamper +usability (consider a web browser unable to write a downloaded file to disk +for instance). There is no transmission of information by cagebreak other +than to the screens, ipc and potentially other documented local channels. + +### STRIDE Threat List + +This is not a thorough analysis, just an overview of the ways in which cagebreak +has/does not have an attack surface. + +#### Spoofing + +Not applicable - Using cagebreak already requires a login as a user. + +#### Tampering + +Not applicable - Cagebreak must allow system manipulation for user software. + +#### Repudiation + +Not applicable - There are no prohibited operations (See Tampering above.). +While cagebreak does send events over documented channels there is no logging +activated by default, though, of course, this can be changed by the user +by logging socket output for example. + +#### Information Disclosure + +Not applicable - Information disclosure over documented channels is a feature +and any software run by the user may exfiltrate any data the user has access to. + +#### Denial of Service + +Not applicable - Cagebreak offers functionality to terminate itself, which is +available to all user software over the socket. + +#### Elevation of privilege + +Software may gain arbitrary code execution rights if it has access to the +Cagebreak socket. Privilege escalation to root is unlikely since privileges +are dropped before any user input is accepted. diff --git a/cagebreak.c b/cagebreak.c index b6fbcab..00712f9 100644 --- a/cagebreak.c +++ b/cagebreak.c @@ -77,14 +77,6 @@ set_sig_handler(int sig, void (*action)(int)) { } } -void -sig_chld_handler(int signal) { - int pid = 1; - while(pid > 0) { - pid = waitpid(WAIT_ANY, NULL, WNOHANG); - } -} - static bool drop_permissions(void) { if(getuid() != geteuid() || getgid() != getegid()) { @@ -316,8 +308,6 @@ main(int argc, char *argv[]) { wl_event_loop_add_signal(event_loop, SIGALRM, handle_signal, &server); server.event_loop = event_loop; - set_sig_handler(SIGCHLD, sig_chld_handler); - backend = wlr_backend_autocreate(server.wl_display); if(!backend) { wlr_log(WLR_ERROR, "Unable to create the wlroots backend"); diff --git a/examples/config b/examples/config index f701684..e6a6cb5 100644 --- a/examples/config +++ b/examples/config @@ -23,6 +23,7 @@ bind N nextscreen bind P prevscreen bind a time bind C-n movetonextscreen +bind C-p movetoprevscreen bind H exchangeleft bind J exchangedown bind K exchangeup @@ -33,6 +34,7 @@ bind k focusup bind l focusright bind t exec xterm bind C-k close +#bind m message Hello World! definekey resize h resizeleft definekey resize l resizeright definekey resize j resizedown @@ -42,6 +44,20 @@ definekey resize Escape setmode top ###################### #Workspaces ###################### +bind 1 screen 1 +bind 2 screen 2 +bind 3 screen 3 +bind 4 screen 4 +bind 5 screen 5 +bind 6 screen 6 + +bind A-1 movetoscreen 1 +bind A-2 movetoscreen 2 +bind A-3 movetoscreen 3 +bind A-4 movetoscreen 4 +bind A-5 movetoscreen 5 +bind A-6 movetoscreen 6 + definekey top A-1 workspace 1 definekey top A-2 workspace 2 definekey top A-3 workspace 3 @@ -78,6 +94,7 @@ definekey top XF86MonBrightnessUp exec xbacklight -inc 1 #output eDP-1 pos 0 0 res 1366x768 rate 60 #output eDP-1 disable #output eDP-1 enable +#output eDP-1 prio 1 ##################### #Input configuration diff --git a/keybinding.c b/keybinding.c index f7761cd..5207d24 100644 --- a/keybinding.c +++ b/keybinding.c @@ -1,6 +1,7 @@ #define _POSIX_C_SOURCE 200809L #include +#include #include #include #include @@ -718,7 +719,12 @@ keybinding_show_info(struct cg_server *server) { } void -keybinding_move_view_to_next_output(struct cg_server *server) { +keybinding_display_message(struct cg_server *server, char *msg) { + message_printf(server->curr_output, "%s", msg); +} + +void +keybinding_move_view_to_cycle_output(struct cg_server *server, bool reverse) { if(wl_list_length(&server->outputs) <= 1) { return; } @@ -927,20 +933,23 @@ run_action(enum keybinding_action action, struct cg_server *server, case KEYBINDING_SPLIT_VERTICAL: keybinding_split_vertical(server); break; - case KEYBINDING_RUN_COMMAND: - if(fork() == 0) { - into_process(data.c); + case KEYBINDING_RUN_COMMAND: { + int pid; + if((pid = fork()) == 0) { + if(fork() == 0) { + into_process(data.c); + } + _exit(0); + } else if(pid > 0) { + waitpid(pid, NULL, 0); } - break; + } break; case KEYBINDING_CYCLE_VIEWS: keybinding_cycle_views(server, data.b); break; case KEYBINDING_CYCLE_TILES: keybinding_cycle_tiles(server, data.b); break; - case KEYBINDING_CYCLE_OUTPUT: - keybinding_cycle_outputs(server, data.b); - break; case KEYBINDING_SWITCH_WORKSPACE: keybinding_switch_ws(server, data.u); break; @@ -959,6 +968,9 @@ run_action(enum keybinding_action action, struct cg_server *server, case KEYBINDING_SHOW_INFO: keybinding_show_info(server); break; + case KEYBINDING_DISPLAY_MESSAGE: + keybinding_display_message(server, data.c); + break; case KEYBINDING_RESIZE_TILE_HORIZONTAL: resize_tile(server, data.i, 0); break; @@ -1017,8 +1029,8 @@ run_action(enum keybinding_action action, struct cg_server *server, ->focused_tile); break; } - case KEYBINDING_MOVE_VIEW_TO_NEXT_OUTPUT: { - keybinding_move_view_to_next_output(server); + case KEYBINDING_MOVE_VIEW_TO_CYCLE_OUTPUT: { + keybinding_move_view_to_cycle_output(server, data.b); break; } case KEYBINDING_DEFINEKEY: diff --git a/keybinding.h b/keybinding.h index 4cd0e87..ebbfae9 100644 --- a/keybinding.h +++ b/keybinding.h @@ -20,15 +20,17 @@ enum keybinding_action { KEYBINDING_SPLIT_HORIZONTAL, KEYBINDING_CHANGE_TTY, // data.u is the desired tty KEYBINDING_LAYOUT_FULLSCREEN, - KEYBINDING_CYCLE_VIEWS, // data.b is 0 if forward, 1 if reverse - KEYBINDING_CYCLE_TILES, // data.b is 0 if forward, 1 if reverse - KEYBINDING_CYCLE_OUTPUT, // data.b is 0 if forward, 1 if reverse - KEYBINDING_CONFIGURE_OUTPUT, // data.o_cfg is the desired output - // configuration - KEYBINDING_CONFIGURE_INPUT, // data.i_cfg is the desired input - // configuration + KEYBINDING_CYCLE_VIEWS, // data.b is 0 if forward, 1 if reverse + KEYBINDING_CYCLE_TILES, // data.b is 0 if forward, 1 if reverse + KEYBINDING_CYCLE_OUTPUT, // data.b is 0 if forward, 1 if reverse + KEYBINDING_CONFIGURE_OUTPUT, // data.o_cfg is the desired output + // configuration + KEYBINDING_CONFIGURE_MESSAGE, // data.m_cfg is the desired config + KEYBINDING_CONFIGURE_INPUT, // data.i_cfg is the desired input + // configuration KEYBINDING_QUIT, KEYBINDING_NOOP, + KEYBINDING_SWITCH_OUTPUT, // data.u is the desired output KEYBINDING_SWITCH_WORKSPACE, // data.u is the desired workspace KEYBINDING_SWITCH_MODE, // data.u is the desired mode KEYBINDING_SWITCH_DEFAULT_MODE, // data.u is the desired mode @@ -36,10 +38,13 @@ enum keybinding_action { // to the current width KEYBINDING_RESIZE_TILE_VERTICAL, // data.i is the number of pixels to add to // the current height - KEYBINDING_MOVE_VIEW_TO_WORKSPACE, // data.u is the desired workspace - KEYBINDING_MOVE_VIEW_TO_NEXT_OUTPUT, + KEYBINDING_MOVE_VIEW_TO_WORKSPACE, // data.u is the desired workspace + KEYBINDING_MOVE_VIEW_TO_OUTPUT, // data.u is the desired output + KEYBINDING_MOVE_VIEW_TO_CYCLE_OUTPUT, // data.b is 0 if forward, 1 if + // reverse KEYBINDING_SHOW_TIME, KEYBINDING_SHOW_INFO, + KEYBINDING_DISPLAY_MESSAGE, KEYBINDING_SWAP_LEFT, KEYBINDING_SWAP_RIGHT, @@ -66,6 +71,7 @@ union keybinding_params { struct keybinding *kb; struct cg_output_config *o_cfg; struct cg_input_config *i_cfg; + struct cg_message_config *m_cfg; }; struct keybinding { diff --git a/keys/cagebreak@project-repo.co.pub b/keys/cagebreak@project-repo.co.pub index 6d23cef..c266665 100644 --- a/keys/cagebreak@project-repo.co.pub +++ b/keys/cagebreak@project-repo.co.pub @@ -1,123 +1,76 @@ -----BEGIN PGP PUBLIC KEY BLOCK----- -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 -LA== -=UJ+r +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 +PbvoKi4FeWdszeakeWuqdmKEi/+ltIk= +=uqsg -----END PGP PUBLIC KEY BLOCK----- diff --git a/keys/cagebreak@project-repo.co.pub-legacy b/keys/cagebreak@project-repo.co.pub-legacy-1 similarity index 100% rename from keys/cagebreak@project-repo.co.pub-legacy rename to keys/cagebreak@project-repo.co.pub-legacy-1 diff --git a/keys/cagebreak@project-repo.co.pub-legacy-2 b/keys/cagebreak@project-repo.co.pub-legacy-2 new file mode 100644 index 0000000..6d23cef --- /dev/null +++ b/keys/cagebreak@project-repo.co.pub-legacy-2 @@ -0,0 +1,123 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +LA== +=UJ+r +-----END PGP PUBLIC KEY BLOCK----- diff --git a/keys/cagebreak_signing_key_10@project-repo.co.pub b/keys/cagebreak_signing_key_10@project-repo.co.pub new file mode 100644 index 0000000..c266665 --- /dev/null +++ b/keys/cagebreak_signing_key_10@project-repo.co.pub @@ -0,0 +1,76 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +PbvoKi4FeWdszeakeWuqdmKEi/+ltIk= +=uqsg +-----END PGP PUBLIC KEY BLOCK----- diff --git a/keys/cagebreak_signing_key_9@project-repo.co.pub b/keys/cagebreak_signing_key_9@project-repo.co.pub new file mode 100644 index 0000000..2e99549 --- /dev/null +++ b/keys/cagebreak_signing_key_9@project-repo.co.pub @@ -0,0 +1,64 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +=gLvW +-----END PGP PUBLIC KEY BLOCK----- diff --git a/man/cagebreak-config.5.md b/man/cagebreak-config.5.md index 4eea4c5..b931db4 100644 --- a/man/cagebreak-config.5.md +++ b/man/cagebreak-config.5.md @@ -1,8 +1,8 @@ -cagebreak-config(1) "Version 1.8.3" "Cagebreak Manual" +cagebreak-config(5) "Version 1.9.0" "Cagebreak Manual" # NAME -*cagebreak-config* — Cagebreak config file +*cagebreak-config* — Cagebreak configuration file # SYNOPSIS @@ -10,91 +10,135 @@ cagebreak-config(1) "Version 1.8.3" "Cagebreak Manual" # DESCRIPTION -The cagebreak configuration file is a simple plain text file which configures -the way cagebreak behaves. -Each line constitutes a separate command which is parsed -independently from the rest of the file. Comments can be added -by prepending a line with the # symbol. +The cagebreak configuration is a plain text file. + +Each line consists of a comment or a command and its arguments which +are parsed sequentially but independently from the rest of the file. + +Each line starting with a "#" is a comment. + +See *KEY DEFINITIONS* for details on modifier keys and *MODES* for details +on modes. ## COMMANDS *abort* - Return to the default mode without running any command + Return to default mode -*background - Set background color* - Set the background color. This command expects three floating point numbers - between 0 and 1, specifying the r, g and b values respectively. - (e.g. "background 1.0 0.0 0.0" sets to background color to red) - There is no support for specifying a background image. +*background * + Set RGB of background - <[r|g|b]> are floating point numbers + between 0 and 1. + There is no support for background images. -*bind - Bind key to command in root mode* - This command requires a key (see *KEY DEFINITIONS*) and a command (see *COMMANDS*) as an argument. - Subsequently, pressing this key while in command mode executes the - supplied action. bind is equivalent to - definekey root +``` +# Set background to red +background 1.0 0.0 0.0 +``` -*close - Close current window* - This command closes the current window. It may be useful for windows of applications which - do not offer any method of closing them. +*bind * + Bind to execute if pressed in root mode -*definekey - Bind key to action in arbitrary mode* - This command behaves similarly to the *bind* command with the - difference that the mode in which the keybinding is activated is - specified by the user. A call to this function is to be structured as follows: +``` +bind +# is equivalent to +definekey root +``` - definekey +*close* + Close current window - This may be useful for windows of + applications which do not offer any method of closing them. -*definemode* - This command requires a single argument; the name of the mode to be defined. - Subsequent to a call to this function, the defined mode may be used along with - the definekey command to create a custom key mapping. Synopsis: +configure_message [font |[f|b]g_color b> |display_time ] + Configure message characteristics - + - font sets + - is + - X core font description or + - FreeType font description via pango + - fg_color sets RGBA of foreground + - bg_color sets RGBA of background + - display_time sets display time in seconds - definemode +``` +# Set font +## Set example X code font +configure_message font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1 +## Set example FreeType font description +configure_message font pango:monospace 10 -*escape* - Defines the key with which the current mode can be changed to "root". - escape is equivalent to definekey top switch_mode root +# Set foreground RGBA to red +configure_message fg_color 1.0 0.0 0.0 1.0 + +# Set background RGBA to red +configure_message bg_color 1.0 0.0 0.0 1.0 + +# Set duration for message display to four seconds +configure_message display_time 4 +``` + +*definekey * + Bind to execute if pressed in - + *definekey* is a more general version of *bind*. + +*definemode * + Define new mode - After a call to *definemode*, + can be used with *definekey* to create a custom key mapping. + +``` +# define new mode and create a mapping for it +definemode foo +definekey foo C-t abort +``` + +*escape * + Set to switch to root mode to execute one command + +``` +escape +# is equivalent to +definekey top mode root +``` *exchangedown* - Exchange the current window with the window in the tile to the bottom + Exchange current window with window in the tile to the bottom *exchangeleft* - Exchange the current window with the window in the tile to the left + Exchange current window with window in the tile to the left *exchangeright* - Exchange the current window with the window in the tile to the right + Exchange current window with window in the tile to the right *exchangeup* - Exchange the current window with the window in the tile to the top + Exchange current window with window in the tile to the top -*exec* - Executes the supplied shell command using *sh -c ""*. Synopsis: - - exec +*exec * + Execute using *sh -c* *focus* Focus next tile *focusdown* - Focus the tile to the bottom + Focus tile to the bottom *focusleft* - Focus the tile to the left + Focus tile to the left *focusprev* Focus previous tile *focusright* - Focus the tile to the right + Focus tile to the right *focusup* - Focus the tile to the top + Focus tile to the top *hsplit* Split current tile horizontally *input * - Set the setting "" to "" for device "". The identifier can either be "\*" (wildcard), of the form "type:" or the identifier of the device as printed for example by *cagebreak -s*. The supported input types are + Set to for device - + can be "\*" (wildcard), of the form + "type:" or the identifier of the device as printed + for example by *cagebreak -s*. The supported input types are - touchpad - pointer - keyboard @@ -103,121 +147,145 @@ by prepending a line with the # symbol. - tablet_pad - switch - Configurations are applied sequentially. Currently, only libinput devices may be configured. The available settings and their corresponding values are as follows: + Configurations are applied sequentially. Currently, only libinput + devices may be configured. The available settings and their + corresponding values are as follows: *accel_profile adaptive|flat* - Sets the pointer acceleration profile for the specified input device. + Set pointer acceleration profile for specified input device *calibration_matrix <6 space-separated floating point values>* - Sets the calibration matrix. + Set calibration matrix *click_method none|button_areas|clickfinger* - Changes the click method for the specified device. + Change click method for the specified device *drag enabled|disabled* - Enables or disables tap-and-drag for specified input device. + Enable or disable tap-and-drag for specified input device *drag_lock enabled|disabled* - Enables or disables drag lock for specified input device. + Enable or disable drag lock for specified input device *dwt enabled|disabled* - Enables or disables disable-while-typing for the specified input device. + Enable or disable disable-while-typing for specified input + device - *enabled|disabled|disabled_on_external_mouse* - Enables or disables send_events for specified input device. Disabling - send_events disables the input device. + *event enabled|disabled|disabled_on_external_mouse* + Enable or disable send_events for specified input device - + Disabling send_events disables the input device. *left_handed enabled|disabled* - Enables or disables left handed mode for specified input device. + Enable or disable left handed mode for specified input device *middle_emulation enabled|disabled* - Enables or disables middle click emulation. + Enable or disable middle click emulation *natural_scroll enabled|disabled* - Enables or disables natural (inverted) scrolling for the specified input - device. + Enable or disable natural (inverted) scrolling for specified + input device *pointer_accel [<-1|1>]* - Changes the pointer acceleration for the specified input device. + Change the pointer acceleration for specified input device *scroll_button disable|* - Sets the button used for scroll_method on_button_down. The button can - be given as an event name or code, which can be obtained from *libinput - debug-events*. If set to - _disable_, it disables the scroll_method on_button_down. + Set button used for scroll_method on_button_down - The button + can be given as an event name or code, which can be obtained from + *libinput debug-events*. If set to _disable_, it disables the + scroll_method on_button_down. *scroll_factor * - Changes the scroll factor for the specified input device. Scroll speed will - be scaled by the given value, which must be non-negative. + Change the scroll factor for the specified input device - Scroll + speed will be scaled by the given value, which must be non-negative. *scroll_method none|two_finger|edge|on_button_down* - Changes the scroll method for the specified input device. + Change scroll method for specified input device *tap enabled|disabled* - Enables or disables tap for specified input device. + Enable or disable tap for specified input device *tap_button_map lrm|lmr* - Specifies which button mapping to use for tapping. _lrm_ treats 1 finger as - left click, 2 fingers as right click, and 3 fingers as middle click. _lmr_ - treats 1 finger as left click, 2 fingers as middle click, and 3 fingers as - right click. + Specify which button mapping to use for tapping - _lrm_ treats 1 + finger as left click, 2 fingers as right click, and 3 fingers as + middle click. _lmr_ treats 1 finger as left click, 2 fingers as + middle click, and 3 fingers as right click. + +message + Display a line of arbitrary text. *mode * - Enter mode "". After a keybinding is processed, return to default mode + Enter mode "" - Returns to default mode, after a command is + executed. *movetonextscreen* - Move the current window to the next screen + Move currently focused window to next screen + +*movetoprevscreen* + Move currently focused window to previous screen + +*movetoscreen * + Move currently focused window to -th screen *movetoworkspace * - Move the currently focused window to the n-th workspace + Move currently focused window to -th workspace *next* Focus next window in current tile *nextscreen* - Focus the next screen + Focus next screen *only* - Remove all splits and make the current window fill the entire screen + Remove all splits and make current window fill the entire screen -*output [[pos res x rate ] | enable | disable]* - Configure the output "". and are the position of the monitor - in pixels. The top-left monitor should have the coordinates 0 0. and - specify the resolution in pixels and sets the refresh rate of - the monitor (often this is 50 or 60). The options enable and disable - enable or disable the output . Note that if is the only enabled - output, *output disable* has no effect. +*output [[pos res x rate ] | enable | disable | prio ]* + Configure output "" - + - and are the position of the + monitor in pixels. The top-left monitor should have the coordinates 0 0. + - and specify the resolution in pixels. + - sets the refresh rate of the monitor (often this is 50 or 60). + - enable and disable enable or disable . Note that if + is the only enabled output, *output disable* has + no effect. + - prio is used to set the priority of an output. If + nothing else is set, outputs are added as they request to be added + and have a numerical priority of -1. Using prio it is possible + to set priorities for outputs, where >= 1. The larger is, + the higher the priority is, that is to say, the earlier the output + will appear in the list of outputs. *prev* Focus previous window in current tile *prevscreen* - Focus the previous screen + Focus previous screen *quit* Exit cagebreak *resizedown* - Resize the current tile towards the bottom + Resize current tile towards the bottom *resizeleft* - Resize the current tile towards the left + Resize current tile towards the left *resizeright* - Resize the current tile towards the right + Resize current tile towards the right *resizeup* - Resize the current tile towards the top + Resize current tile towards the top + +*screen * + Change to -th screen *show_info* - Display info about the current setup. In particular, print the identifiers + Display information about the current setup - In particular, print the identifiers of the available inputs and outputs. *setmode * - Set the default mode to + Set default mode to *switchvt * - Switch to tty n + Switch to tty *time* Display time @@ -226,31 +294,37 @@ by prepending a line with the # symbol. Split current tile vertically *workspace * - Change to the n-th workspace + Change to -th workspace -*workspaces* - Requires a single integer larger than 1 and less than 30 as an argument. Sets the number of - workspaces to the supplied number +*workspaces * + Set number of workspaces to - is a single integer larger than 1 + and less than 30. # MODES By default, three modes are defined: *top* - The default mode. Keybindings defined in this mode can be accessed - directly, without the use of an escape key. + Default mode - Keybindings defined in this mode can be accessed + directly. + - *definekey* can be used to set keybindings for top mode. + - *setmode* can be used to set a different default mode. *root* - The command mode. Keybindings defined in this mode can be accessed - after pressing the key defined by the *escape* command. + Command mode - Keybindings defined in this mode can be accessed + after pressing the key defined by *escape*. + - *bind* can be used to set keybindings for root mode. *resize* - Resize mode. This mode is used for resizing tiles. + Resize mode - Used to resize tiles. + +*definemode* can be used to create additional modes. # KEY DEFINITIONS Keys are specified by their names as displayed for example by *xev*. -In addition, modifiers can be specified using the following syntax: + +Modifiers can be specified using the following syntax: - @@ -270,9 +344,11 @@ The supported modifiers are: *5 - Mod 5* -For example to specify the keybinding Control+t, the expression: +For example to specify the keybinding Control+t, the expression - C-t +``` +C-t +``` is used. @@ -284,10 +360,20 @@ is used. See GitHub Issues: +Mail contact: `cagebreak @ project-repo . co` + +GPG Fingerprints: + +- B15B92642760E11FE002DE168708D42451A94AB5 +- F8DD9F8DD12B85A28F5827C4678E34D2E753AA3C +- 3ACEA46CCECD59E4C8222F791CBEB493681E8693 + # LICENSE Copyright (c) 2020-2022 The Cagebreak authors + Copyright (c) 2018-2020 Jente Hidskes + Copyright (c) 2019 The Sway authors Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/man/cagebreak.1.md b/man/cagebreak.1.md index 4fe5c6c..fd6584c 100644 --- a/man/cagebreak.1.md +++ b/man/cagebreak.1.md @@ -1,8 +1,8 @@ -cagebreak(1) "Version 1.8.3" "Cagebreak Manual" +cagebreak(1) "Version 1.9.0" "Cagebreak Manual" # NAME -cagebreak - A Wayland tiling compositor to the likes of ratpoison +cagebreak - A Wayland tiling compositor # SYNOPSIS @@ -73,10 +73,20 @@ are displayed in a message box at the top right of the screen. See GitHub Issues: +Mail contact: `cagebreak @ project-repo . co` + +GPG Fingerprints: + +- B15B92642760E11FE002DE168708D42451A94AB5 +- F8DD9F8DD12B85A28F5827C4678E34D2E753AA3C +- 3ACEA46CCECD59E4C8222F791CBEB493681E8693 + # LICENSE Copyright (c) 2020-2022 The Cagebreak authors + Copyright (c) 2018-2020 Jente Hidskes + Copyright (c) 2019 The Sway authors Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/meson.build b/meson.build index 10afb69..b4c7dfd 100644 --- a/meson.build +++ b/meson.build @@ -1,5 +1,5 @@ project('cagebreak', 'c', - version: '1.8.3', + version: '1.9.0', license: 'MIT', default_options: [ 'c_std=c11', @@ -206,16 +206,16 @@ reproducible_build_versions = { 'wayland_server': '1.19.0', 'wayland_client': '1.20.0', 'wayland_cursor': '1.20.0', - 'wlroots': '0.15.0', - 'xkbcommon': '1.3.1', - 'fontconfig': '2.13.94', - 'libinput': '1.19.3', - 'libevdev': '1.12.0', + 'wlroots': '0.15.1', + 'xkbcommon': '1.4.0', + 'fontconfig': '2.14.0', + 'libinput': '1.20.1', + 'libevdev': '1.12.1', 'libudev': '250', 'pixman': '0.40.0', - 'pango': '1.50.3', - 'cairo': '1.17.4', - 'pangocairo': '1.50.3', + 'pango': '1.50.7', + 'cairo': '1.17.6', + 'pangocairo': '1.50.7', 'math': '-1' } @@ -241,7 +241,7 @@ foreach name, dep : cagebreak_dependencies_dict endforeach reproducible_build_compiler = 'gcc' -reproducible_build_compiler_version = '11.1.0' +reproducible_build_compiler_version = '11.2.0' if cc.get_id() != reproducible_build_compiler warning('The compiler "' + cc.get_id() + '" differs from the one used to generate to binary specified in the README section "Reproducible Builds" (' + reproducible_build_compiler + ').') @@ -270,7 +270,7 @@ if get_option('man-pages') output : 'cagebreak.1', input : 'man/cagebreak.1.md', capture : true, - command : [sh, '-c', 'export SOURCE_DATE_EPOCH=1638785664 ; @0@ < @INPUT@'.format(scdoc.path())], + command : [sh, '-c', 'export SOURCE_DATE_EPOCH=1650564686 ; @0@ < @INPUT@'.format(scdoc.path())], install: true, install_dir: mandir1 ) @@ -279,7 +279,7 @@ if get_option('man-pages') output : 'cagebreak-config.5', input : 'man/cagebreak-config.5.md', capture : true, - command : [sh, '-c', 'export SOURCE_DATE_EPOCH=1638785664 ; @0@ < @INPUT@'.format(scdoc.path())], + command : [sh, '-c', 'export SOURCE_DATE_EPOCH=1650564686 ; @0@ < @INPUT@'.format(scdoc.path())], install: true, install_dir: mandir5 ) diff --git a/message.h b/message.h index 9a4e53e..b1081ab 100644 --- a/message.h +++ b/message.h @@ -16,6 +16,13 @@ enum cg_message_align { CG_MESSAGE_CENTER, }; +struct cg_message_config { + char *font; + int display_time; + float bg_color[4]; + float fg_color[4]; +}; + struct cg_message { struct wlr_box *position; struct wlr_texture *message; diff --git a/output.c b/output.c index 3ce60c4..90f1f7e 100644 --- a/output.c +++ b/output.c @@ -29,7 +29,9 @@ #include #include #include +#if CG_HAS_XWAYLAND #include +#endif #include "keybinding.h" #include "message.h" diff --git a/output.h b/output.h index 7a0dc7c..ca44a6b 100644 --- a/output.h +++ b/output.h @@ -23,11 +23,18 @@ struct cg_output { struct cg_workspace **workspaces; struct wl_list messages; int curr_workspace; + int priority; struct cg_view *last_scanned_out_view; struct wl_list link; // cg_server::outputs }; +struct cg_output_priorities { + char *ident; + int priority; + struct wl_list link; +}; + enum output_status { OUTPUT_ENABLE, OUTPUT_DISABLE, OUTPUT_DEFAULT }; struct cg_output_config { @@ -35,6 +42,7 @@ struct cg_output_config { struct wlr_box pos; char *output_name; float refresh_rate; + int priority; struct wl_list link; // cg_server::output_config }; diff --git a/parse.c b/parse.c index 4bbf72d..92a8943 100644 --- a/parse.c +++ b/parse.c @@ -8,6 +8,7 @@ #include "input_manager.h" #include "keybinding.h" +#include "message.h" #include "output.h" #include "parse.h" #include "server.h" @@ -122,7 +123,7 @@ parse_input_config(char **saveptr, char **errstr) { char *ident = NULL; if(cfg == NULL) { *errstr = - log_error("Failed to allocate memory for output configuration"); + log_error("Failed to allocate memory for input configuration"); goto error; } @@ -340,6 +341,9 @@ parse_input_config(char **saveptr, char **errstr) { "Invalid option \"%s\" to setting \"tap_button_map\"", value); goto error; } + } else { + *errstr = log_error("Invalid option to command \"input\""); + goto error; } free(value); @@ -503,6 +507,8 @@ parse_output_config_keyword(char *key_str, enum output_status *status) { } if(strcmp(key_str, "pos") == 0) { *status = OUTPUT_DEFAULT; + } else if(strcmp(key_str, "prio") == 0) { + *status = OUTPUT_DEFAULT; } else if(strcmp(key_str, "enable") == 0) { *status = OUTPUT_ENABLE; } else if(strcmp(key_str, "disable") == 0) { @@ -521,6 +527,11 @@ parse_output_config(char **saveptr, char **errstr) { log_error("Failed to allocate memory for output configuration"); goto error; } + cfg->status = OUTPUT_DEFAULT; + cfg->pos.x = -1; + cfg->output_name = NULL; + cfg->refresh_rate = 0; + cfg->priority = -1; char *name = strtok_r(NULL, " ", saveptr); if(name == NULL) { *errstr = @@ -529,7 +540,7 @@ parse_output_config(char **saveptr, char **errstr) { } char *key_str = strtok_r(NULL, " ", saveptr); if(parse_output_config_keyword(key_str, &(cfg->status)) != 0) { - *errstr = log_error("Expected keyword \"pos\", \"enable\" or " + *errstr = log_error("Expected keyword \"pos\", \"prio\", \"enable\" or " "\"disable\" in output configuration for output %s", name); goto error; @@ -539,6 +550,18 @@ parse_output_config(char **saveptr, char **errstr) { return cfg; } + if(strcmp(key_str, "prio") == 0) { + cfg->priority = parse_uint(saveptr, " "); + if(cfg->priority < 0) { + *errstr = log_error( + "Error parsing priority of output configuration for output %s", + name); + goto error; + } + cfg->output_name = strdup(name); + return cfg; + } + cfg->pos.x = parse_uint(saveptr, " "); if(cfg->pos.x < 0) { *errstr = log_error( @@ -606,6 +629,74 @@ error: return NULL; } +struct cg_message_config * +parse_message_config(char **saveptr, char **errstr) { + struct cg_message_config *cfg = calloc(1, sizeof(struct cg_message_config)); + if(cfg == NULL) { + *errstr = + log_error("Failed to allocate memory for message configuration"); + goto error; + } + + cfg->bg_color[0] = -1; + cfg->fg_color[0] = -1; + cfg->display_time = -1; + cfg->font = NULL; + + char *setting = strtok_r(NULL, " ", saveptr); + if(setting == NULL) { + *errstr = log_error( + "Expected setting to be set for message configuration, got none"); + goto error; + } + + if(strcmp(setting, "font") == 0) { + cfg->font = strdup(*saveptr); + if(cfg->font == NULL) { + *errstr = log_error("Unable to allocate memory for font descrition " + "in command \"message\""); + goto error; + } + } else if(strcmp(setting, "display_time") == 0) { + cfg->display_time = parse_uint(saveptr, " "); + if(cfg->display_time < 0) { + *errstr = + log_error("Error parsing command \"configure_message " + "display_time\", expected a non-negative integer"); + goto error; + } + } else if(strcmp(setting, "bg_color") == 0) { + for(int i = 0; i < 4; ++i) { + cfg->bg_color[i] = parse_float(saveptr, " "); + if(cfg->bg_color[i] == FLT_MIN) { + *errstr = log_error( + "Error parsing command \"configure_message bg_color\", " + "expected 4 float values separated by spaces"); + goto error; + } + } + } else if(strcmp(setting, "fg_color") == 0) { + for(int i = 0; i < 4; ++i) { + cfg->fg_color[i] = parse_float(saveptr, " "); + if(cfg->fg_color[i] == FLT_MIN) { + *errstr = log_error( + "Error parsing command \"configure_message bg_color\", " + "expected 4 float values separated by spaces"); + goto error; + } + } + } else { + *errstr = log_error("Invalid option to command \"configure_message\""); + goto error; + } + return cfg; + +error: + wlr_log(WLR_ERROR, "Message configuration must be of the form " + "'configure_message '"); + return NULL; +} + int parse_command(struct cg_server *server, struct keybinding *keybinding, char *saveptr, char **errstr) { @@ -641,6 +732,15 @@ parse_command(struct cg_server *server, struct keybinding *keybinding, keybinding->action = KEYBINDING_LAYOUT_FULLSCREEN; } else if(strcmp(action, "abort") == 0) { keybinding->action = KEYBINDING_NOOP; + } else if(strcmp(action, "message") == 0) { + keybinding->action = KEYBINDING_DISPLAY_MESSAGE; + if(saveptr == NULL) { + *errstr = + log_error("Not enough paramaters to \"message\". Expected " + "string to display."); + return -1; + } + keybinding->data.c = strdup(saveptr); } else if(strcmp(action, "time") == 0) { keybinding->action = KEYBINDING_SHOW_TIME; } else if(strcmp(action, "nextscreen") == 0) { @@ -669,6 +769,23 @@ parse_command(struct cg_server *server, struct keybinding *keybinding, } else if(strcmp(action, "resizeup") == 0) { keybinding->action = KEYBINDING_RESIZE_TILE_VERTICAL; keybinding->data.i = -10; + } else if(strcmp(action, "screen") == 0) { + keybinding->action = KEYBINDING_SWITCH_OUTPUT; + char *noutp_str = strtok_r(NULL, " ", &saveptr); + if(noutp_str == NULL) { + *errstr = + log_error("Expected argument for \"output\" action, got none."); + return -1; + } + + long outp = strtol(noutp_str, NULL, 10); + if(outp < 1) { + *errstr = log_error("Workspace number must be an integer number " + "larger or equal to 1. Got %ld", + outp); + return -1; + } + keybinding->data.u = outp; } else if(strcmp(action, "workspace") == 0) { keybinding->action = KEYBINDING_SWITCH_WORKSPACE; char *nws_str = strtok_r(NULL, " ", &saveptr); @@ -686,12 +803,29 @@ parse_command(struct cg_server *server, struct keybinding *keybinding, return -1; } keybinding->data.u = ws - 1; + } else if(strcmp(action, "movetoscreen") == 0) { + keybinding->action = KEYBINDING_MOVE_VIEW_TO_OUTPUT; + char *noutp_str = strtok_r(NULL, " ", &saveptr); + if(noutp_str == NULL) { + *errstr = log_error( + "Expected argument for \"movetoscreen\" action, got none."); + return -1; + } + + long outp = strtol(noutp_str, NULL, 10); + if(outp < 1) { + *errstr = log_error("Output number must be an integer larger or " + "equal to 1. Got %ld", + outp); + return -1; + } + keybinding->data.u = outp; } else if(strcmp(action, "movetoworkspace") == 0) { keybinding->action = KEYBINDING_MOVE_VIEW_TO_WORKSPACE; char *nws_str = strtok_r(NULL, " ", &saveptr); if(nws_str == NULL) { *errstr = log_error( - "Expected argument for \"workspace\" action, got none."); + "Expected argument for \"movetoworkspace\" action, got none."); return -1; } @@ -720,7 +854,11 @@ parse_command(struct cg_server *server, struct keybinding *keybinding, } else if(strcmp(action, "focusdown") == 0) { keybinding->action = KEYBINDING_FOCUS_BOTTOM; } else if(strcmp(action, "movetonextscreen") == 0) { - keybinding->action = KEYBINDING_MOVE_VIEW_TO_NEXT_OUTPUT; + keybinding->action = KEYBINDING_MOVE_VIEW_TO_CYCLE_OUTPUT; + keybinding->data.b = false; + } else if(strcmp(action, "movetoprevscreen") == 0) { + keybinding->action = KEYBINDING_MOVE_VIEW_TO_CYCLE_OUTPUT; + keybinding->data.b = true; } else if(strcmp(action, "switchvt") == 0) { keybinding->action = KEYBINDING_CHANGE_TTY; char *ntty = strtok_r(NULL, " ", &saveptr); @@ -735,13 +873,12 @@ parse_command(struct cg_server *server, struct keybinding *keybinding, keybinding->action = KEYBINDING_SWITCH_MODE; char *mode = strtok_r(NULL, " ", &saveptr); if(mode == NULL) { - *errstr = - log_error("Expected mode after \"switch_mode\". Got nothing."); + *errstr = log_error("Expected mode after \"mode\". Got nothing."); return -1; } int mode_idx = get_mode_index_from_name(server->modes, mode); if(mode_idx == -1) { - *errstr = log_error("Unknown mode \"%s\" for switch_mode", mode); + *errstr = log_error("Unknown mode \"%s\" for \"mode\"", mode); return -1; } keybinding->data.u = (unsigned int)mode_idx; @@ -808,6 +945,12 @@ parse_command(struct cg_server *server, struct keybinding *keybinding, if(keybinding->data.i_cfg == NULL) { return -1; } + } else if(strcmp(action, "configure_message") == 0) { + keybinding->action = KEYBINDING_CONFIGURE_MESSAGE; + keybinding->data.m_cfg = parse_message_config(&saveptr, errstr); + if(keybinding->data.m_cfg == NULL) { + return -1; + } } else { *errstr = log_error("Error, unsupported action \"%s\".", action); return -1; diff --git a/seat.c b/seat.c index 280b3ea..5449aa4 100644 --- a/seat.c +++ b/seat.c @@ -138,7 +138,6 @@ remove_touch(struct cg_seat *seat, struct cg_touch *touch) { if(!touch) { return; } - wl_list_remove(&touch->link); wlr_cursor_detach_input_device(seat->cursor, touch->device->wlr_device); --seat->num_touch; free(touch); diff --git a/signatures/1.8.3-cagebreak-config.5.sig b/signatures/1.8.3-cagebreak-config.5.sig new file mode 100644 index 0000000000000000000000000000000000000000..2c2521097806777388e10ec2a54e39a8da910cda GIT binary patch literal 566 zcmV-60?GY}0y6{v0SEvc79j+QYm%>XjF(OTWxqo5S8LN|6>GT#0%7sLR{#nL5b{@R z(`FTGxd?I(|8M?9naG+*bCfpF;j)QRc&QC*44^0XGuM1wKjt7{QA{%7v_k=4ON<_ef zWpIiARd7*H2y~9j8!;;;+xk&9L*$MNX6n7q8t1$9CQO#YLa0(1APg=g%{ZqF6p z!8p*YjO|nA~74VTs_?a2iTn{q>gnpt8 zhAzn7^PRQn9uO`sz;+bL`{1+~^{0xFiM>^^a_ch zK19HgeOPOSJI$t(fh;&En3U?~hm-W^&PX=AOb*Ub&o#mc66T~NI@$v(QTt7ikTf87 EK3}vC2><{9 literal 0 HcmV?d00001 diff --git a/signatures/1.8.3-cagebreak.1.sig b/signatures/1.8.3-cagebreak.1.sig new file mode 100644 index 0000000000000000000000000000000000000000..e5280a3e9428d3ac0a136e52a68348cebda750b5 GIT binary patch literal 566 zcmV-60?GY}0y6{v0SEvc79j+QYm%>XjF(OTWxqo5S8LN|6>GT#0%7sLQ~(MI5b{@R z(`FTGxvGy3|3yA!!;*cYZs2L&&Zx2#rsczCz-Ab3%~DnXeWM}a3u$4`d;#iudf8UE z85-YQht@sU;YgqpRURr~pHvujl#ABOh9n4UG_sWImrSVTCXQ7YJts^8^#Ue7nC!bY zxhUh4^E9aVcmj8u`xq+d5?*4j(Eh#7^hrBJeTtv2<(iiCrPJ@f3f4BUl@*#p#Gj&S z=Q(7o-Gst{pOSCUj3I&~`Q^VxexaY7kb#JnbT#JPwc?l>W*_Qyc_kYg6xee6CUfD) zUn+KI%835Blg8(ka48(@b$kXxfdEUqKc-(A2(n#DEw7gS+mDpia@)YI5~M<)DgzRS zW<>I?dK?E4Q34my?yWAL-dP#RMv{2qsR59v1UL|PTRYx$+{L_2_7s@ZtIeyry}V5j z9>O8kfT{L!xJL5xmEI>?2hEHu%X9MVkb`J5f5q>bYnOq*b1|EnhKz?bH&WBw9e}QRu(t8T@Tz2V_MXm|@QsvS4!yJYD=j8;yVaeZ;*Wtz=UJwN3sZjXv78Czkq? zpKNfg!UK^|UpjDhk7RHs8-kHvo}1Z=@(^hkz7bJnCSQgns?}M>HQ4u9R=+=4;#!9y EkJ_6S%m4rY literal 0 HcmV?d00001 diff --git a/signatures/1.8.3.sig b/signatures/1.8.3.sig new file mode 100644 index 0000000000000000000000000000000000000000..6ac0f6398b4e28fed3e1542b7801fd3dfc04345d GIT binary patch literal 566 zcmV-60?GY}0y6{v0SEvc79j+QYm%>XjF(OTWxqo5S8LN|6>GT#0%7sLQUD4G5b{@R z(`FTGxsHzy{Si!g6bYArk3RmZG~KkLvUkttH*dM%C+&*7?wlitog&*iAaZf%mgP-M zu^0!#-NEjWC`6f>bKKr-_nGtivVVGfaWHZob2(H0K)B8>CcMjOp;JS zuIIA6PzLsb(2famh&|+fRaZQX+HvI%Ir;MVzrk~FUY-7#gq3lF%k5xBn+SCNystm6H|WtCT2dJNnq!JIfk&VBDwdoy$5-IQ!Oe{2JsOzul;oWCB%c zk}&nU(Cz2DmFN2uqj6M~TZ^^C`sm7;5zH1|d!MJk3MYrMG@+mW zu_B!hLyCsptEvb($9?ogTecWcHapn(b$l+bQiPNJm4^bA=Jo}U=e+ye$JCou%?%$c z99UyJiQPJnbZpTJeZ$$|nFzmY2ORLI));==hW$&1& zePyl%{uIFE7|P<4Ug=Q!tLtKd#EH`^o~VvTVpW20Q3 zQKwL?vPxdOX)_*VO!_X{tEt}=qZPj7c`$j>7B8nP9^OKGKj7JDA`%mEhD0%$Nww5c zCR7d5NwmW6D(b$vw@99AsC;o}^{3*X$=61%1C1eCI_kZCYC(QP6&SB$+QqU_LPa$u zOS?D%NXh*lr*`_`7FL84Ff51wXeQK26F*W4!_Ou+>{O_EyV#yzQ{pJeXC51)*Ru#r E&X@KM`v3p{ literal 566 zcmV-60?GY}0y6{v0SEvc79j+QYm%>XjF(OTWxqo5S8LN|6>GT#0%7sLR{#nL5b{@R z(`FTGxd?I(|8M?9naG+*bCfpF;j)QRc&QC*44^0XGuM1wKjt7{QA{%7v_k=4ON<_ef zWpIiARd7*H2y~9j8!;;;+xk&9L*$MNX6n7q8t1$9CQO#YLa0(1APg=g%{ZqF6p z!8p*YjO|nA~74VTs_?a2iTn{q>gnpt8 zhAzn7^PRQn9uO`sz;+bL`{1+~^{0xFiM>^^a_ch zK19HgeOPOSJI$t(fh;&En3U?~hm-W^&PX=AOb*Ub&o#mc66T~NI@$v(QTt7ikTf87 EK3}vC2><{9 diff --git a/signatures/cagebreak.1.sig b/signatures/cagebreak.1.sig index e5280a3e9428d3ac0a136e52a68348cebda750b5..47ba7f2978d4cfa6d59e5b25d8e340db574ad9ef 100644 GIT binary patch literal 566 zcmV-60?GY}0y6{v0SEvc79j+_E$ufVhrCX*AwCnJ$3ujQV~JG-0%BpPe*g*z5TM6H zgo=}DIUWoz{7hfGwj z^imey0J@ey-HnU+B@C^oa-Ib0cEc4X%ehZ(a2a_vs23Y_k3lCVFk{MGsxw>qMvjWt zRDDJP;fxyhvo+2LrGo`xb-~fRB{I>mUl;lw!y;n<-D%{_>@RgJO(~P-@P}4E>)1c? zBtl!)Kzq55_Gb4?)o@(YjfVr@Mr>^)azcSCeaV34$NfO!AF=9pvR%+_wdk@8%mw;$ z=u_9NpuLBE2J0hv<4BIY4TUx3as)h4-eVr;vq7{%DNML|$D0Ii-8;17x_#TyM=BK? zPz`O`y}Y#QX9t@YxtIJh*M=^Xt+^uZ1j?Wi`N`I0rVLX!K+ykoCyBfWv}fV~c!Z*V z@eNWSR{CACsW6`TSjmP-8>e#vHh8A>rRyfhvA#IVeC8-r62C27bbVL&1A>rszmJ1)If? zx)<_hI(xdUgSHKi+2oj7bLWd14Ry)Dxl0Q6a}*ykRohKejfqufwkluKOkIs=F^dK) z(xGR7HVsYvD_98Ti4<(0n98&j0ex#xY%DqS%%E+FD|YOcUY3i)f<^at+w@s$xcxM- ET8sA(CjbBd literal 566 zcmV-60?GY}0y6{v0SEvc79j+QYm%>XjF(OTWxqo5S8LN|6>GT#0%7sLQ~(MI5b{@R z(`FTGxvGy3|3yA!!;*cYZs2L&&Zx2#rsczCz-Ab3%~DnXeWM}a3u$4`d;#iudf8UE z85-YQht@sU;YgqpRURr~pHvujl#ABOh9n4UG_sWImrSVTCXQ7YJts^8^#Ue7nC!bY zxhUh4^E9aVcmj8u`xq+d5?*4j(Eh#7^hrBJeTtv2<(iiCrPJ@f3f4BUl@*#p#Gj&S z=Q(7o-Gst{pOSCUj3I&~`Q^VxexaY7kb#JnbT#JPwc?l>W*_Qyc_kYg6xee6CUfD) zUn+KI%835Blg8(ka48(@b$kXxfdEUqKc-(A2(n#DEw7gS+mDpia@)YI5~M<)DgzRS zW<>I?dK?E4Q34my?yWAL-dP#RMv{2qsR59v1UL|PTRYx$+{L_2_7s@ZtIeyry}V5j z9>O8kfT{L!xJL5xmEI>?2hEHu%X9MVkb`J5f5q>bYnOq*b1|EnhKz?bH&WBw9e}QRu(t8T@Tz2V_MXm|@QsvS4!yJYD=j8;yVaeZ;*Wtz=UJwN3sZjXv78Czkq? zpKNfg!UK^|UpjDhk7RHs8-kHvo}1Z=@(^hkz7bJnCSQgns?}M>HQ4u9R=+=4;#!9y EkJ_6S%m4rY diff --git a/signatures/cagebreak.sig b/signatures/cagebreak.sig index 6ac0f6398b4e28fed3e1542b7801fd3dfc04345d..2cc14a8392a06e2f4bee8076cd2bd3acdee2f4cc 100644 GIT binary patch literal 566 zcmV-60?GY}0y6{v0SEvc79j+_E$ufVhrCX*AwCnJ$3ujQV~JG-0%BpPd;kgw5TM6H zgo6OjSbm&_ZEJ$$GagLEuabvlKYurs-dCP z#3oIYm2Oi?{pu1ZF{He;gxqi@kqjd%|G3QZ>3@Su%n~0l%d#3a{ckK9_K0WjWfPAo zNkknL(M{;s?|M55Zd zW+nlT^h+U-g9YKl2?|kQrMea*2@zxm+<=NDnI~D=obs&(((46JW6TfX%W!R40dn0M z1VnSD9d`RJzY)dZuKUv)>h_&ZLNWeJV2*b-Hp$qj5~{~N!;h{G-CT&b@|1#s8oxAP z^PDV3tXr>ju?9Yf-$rPOgG)x5l?Q8%ncMRxa@} zsZUn+m@#F3baYgr#wwd+>S)gm`y7V>e&`8IYafPMo;jl9?x4+M1#Qrlh6{?Ii&$zi z=E{C}c0!`SQ5s9Vyq%1}8_@_ANb&Xk8+QE1@YTdJ(iRM3sX Ev3HpTg#Z8m literal 566 zcmV-60?GY}0y6{v0SEvc79j+QYm%>XjF(OTWxqo5S8LN|6>GT#0%7sLQUD4G5b{@R z(`FTGxsHzy{Si!g6bYArk3RmZG~KkLvUkttH*dM%C+&*7?wlitog&*iAaZf%mgP-M zu^0!#-NEjWC`6f>bKKr-_nGtivVVGfaWHZob2(H0K)B8>CcMjOp;JS zuIIA6PzLsb(2famh&|+fRaZQX+HvI%Ir;MVzrk~FUY-7#gq3lF%k5xBn+SCNystm6H|WtCT2dJNnq!JIfk&VBDwdoy$5-IQ!Oe{2JsOzul;oWCB%c zk}&nU(Cz2DmFN2uqj6M~TZ^^C`sm7; #include @@ -14,7 +15,9 @@ #include #include #include +#if CG_HAS_XWAYLAND #include +#endif #include "output.h" #include "server.h"