From 61fb97b070b65335bab573daed4caeab97ad9a46 Mon Sep 17 00:00:00 2001 From: project-repo Date: Mon, 4 Dec 2023 12:22:24 +0100 Subject: [PATCH 1/2] Release 2.2.2 - Adjust Cagebreak to wlroot 0.17 - Improve README & SECURITY.md --- Hashes.md | 20 +++++++ README.md | 51 ++++++++---------- SECURITY.md | 33 ++++++------ cagebreak.c | 28 +++++----- fuzz/fuzz-lib.c | 10 ++-- idle_inhibit_v1.c | 4 +- keybinding.c | 24 ++++----- man/cagebreak-config.5.md | 2 +- man/cagebreak-socket.7.md | 2 +- man/cagebreak.1.md | 2 +- meson.build | 18 +++---- message.c | 1 - output.c | 37 ++++--------- output.h | 2 +- release-non-auto-checks/Bugs.md | 4 +- release-non-auto-checks/FAQ.md | 4 +- release-non-auto-checks/SECURITY.md | 4 +- release-non-auto-checks/WLR_XDG_VERSION | 4 +- .../acknowledge-contributors | 4 +- release-non-auto-checks/changelog-major-minor | 4 +- release-non-auto-checks/internal-wiki | 4 +- release-non-auto-checks/release-note | 4 +- .../reproducibility-checked | 4 +- .../security-to-man-page-info-transfer | 4 +- seat.c | 48 ++++++++--------- server.h | 4 +- signatures/2.2.1-cagebreak-config.5.sig | Bin 0 -> 566 bytes signatures/2.2.1-cagebreak-socket.7.sig | Bin 0 -> 566 bytes signatures/2.2.1-cagebreak.1.sig | Bin 0 -> 566 bytes signatures/2.2.1-cagebreak.sig | Bin 0 -> 566 bytes signatures/cagebreak-config.5.sig | Bin 566 -> 566 bytes signatures/cagebreak-socket.7.sig | Bin 566 -> 566 bytes signatures/cagebreak.1.sig | Bin 566 -> 566 bytes signatures/cagebreak.sig | Bin 566 -> 566 bytes view.c | 1 - view.h | 4 ++ workspace.c | 3 -- xdg_shell.c | 18 ++++--- xwayland.c | 40 ++++++++++---- xwayland.h | 2 + 40 files changed, 205 insertions(+), 189 deletions(-) create mode 100644 signatures/2.2.1-cagebreak-config.5.sig create mode 100644 signatures/2.2.1-cagebreak-socket.7.sig create mode 100644 signatures/2.2.1-cagebreak.1.sig create mode 100644 signatures/2.2.1-cagebreak.sig diff --git a/Hashes.md b/Hashes.md index 240925f..ace89e4 100644 --- a/Hashes.md +++ b/Hashes.md @@ -1,5 +1,25 @@ # Hashes +2.2.2 cagebreak + + * sha 256: 98e0dfe870a7242fdf7c6fb1a5c520cfe7d1154b3f139560da6cb86b2430b2a0 + * sha 512: c335f8f6e226203e797e232caead74db9b1e7f24d5edf80dd99a0c00c5f4e81351a5ddcad4f601a12618ebed5c62be547462c4f06ae4ccb6a622a869ee8741ec + +2.2.2 cagebreak.1 + + * sha 256: c655fff018377b5ee541854ee428559ba4c5080d44f87247fe608f18651b0764 + * sha 512: 7cbef17cbe3c59cde21466d6c76e1a34ffce748d2d9011a77bd7703f605b737e344cabaad1e3a599316321481524cb860b2533ab6bef2e7714c00b2641fe962c + +2.2.2 cagebreak-config.5 + + * sha 256: b799e0252d7224befc92bdd143d00dc3f42a38e39f510f3ace575b03f293a788 + * sha 512: 3778db9ff07429efb74b4b07476193844698e07ea91a742aac078391ba38fb07987dc61ba312c30b6eb04ad2d847ee552826e7a09be8dc572be5626c27059df3 + +2.2.2 cagebreak-socket.7 + + * sha 256: dd10359fd1840909bb817858668e67bdd433f367b0ed199328e4b29c99529322 + * sha 512: 67f8c39864472c9b2396946a943ce249297b1b9fc5e452a4051f0512fd61b4a22906e1a16aee1c2bf6cacb3b9cd7a11da19c5d760c192020402008eab379eee1 + 2.2.1 cagebreak * sha 256: 96469a78eeaddf9476c82e0ab8a0e35a95b3119bf83633a54feb8f3f5780df2f diff --git a/README.md b/README.md index 1781cc3..f2fd64d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Cagebreak: A Wayland Tiling Compositor -[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/6532/badge)](https://bestpractices.coreinfrastructure.org/projects/6532) [![Packaging status](https://repology.org/badge/tiny-repos/cagebreak.svg)](https://repology.org/project/cagebreak/versions) [![AUR package](https://repology.org/badge/version-for-repo/aur/cagebreak.svg?minversion=2.2.1)](https://repology.org/project/cagebreak/versions) +[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/6532/badge)](https://bestpractices.coreinfrastructure.org/projects/6532) [![Packaging status](https://repology.org/badge/tiny-repos/cagebreak.svg)](https://repology.org/project/cagebreak/versions) [![AUR package](https://repology.org/badge/version-for-repo/aur/cagebreak.svg?minversion=2.2.2)](https://repology.org/project/cagebreak/versions) ## Quick Introduction @@ -9,25 +9,21 @@ based on [Cage](https://github.com/Hjdskes/cage) and inspired by [ratpoison](htt ### Purpose -The goal of this project is to provide a successor to ratpoison for Wayland. +This project provides a successor to ratpoison for Wayland. However, this is no reimplementation of ratpoison. #### New Features, Bugs and Contact Information -Should you want to know if a feature will be implemented, file a bug or -get in touch, [open an issue](https://github.com/project-repo/cagebreak/issues/new) +You can [open an issue](https://github.com/project-repo/cagebreak/issues/new) or write an e-mail (See [SECURITY.md](SECURITY.md) for details.). -The Roadmap section outlines what is planned for the future. +The Roadmap section outlines our plans. #### Compatibility & Development Distribution Cagebreak supports [Arch Linux](https://archlinux.org/) and uses the libraries -(and software versions) as they are obtained through [pacman](https://wiki.archlinux.org/title/Pacman) -at the time of release. Any other use is out of scope. - -Most other setups probably work with a bit of luck. We -make no guarantees. +and versions from extra and core at the time of release. +Most other setups work with a bit of luck. ### Quick Installation @@ -42,17 +38,12 @@ details on getting started and the documentation for everything else. ### Documentation - * the rest of this file - * the man pages: - * [cagebreak](man/cagebreak.1.md) - * [configuration](man/cagebreak-config.5.md) - * [socket](man/cagebreak-socket.7.md) - * the [FAQ](FAQ.md) - * [SECURITY.md](SECURITY.md) + * the man pages: [cagebreak](man/cagebreak.1.md), [configuration](man/cagebreak-config.5.md) & [socket](man/cagebreak-socket.7.md) + * the [README](README.md), [FAQ](FAQ.md) & [SECURITY.md](SECURITY.md) #### What's new? -See the [Changelog](Changelog.md). +Check the [Changelog](Changelog.md). ### Uninstallation @@ -60,9 +51,9 @@ See the [Changelog](Changelog.md). ### Contributing - * Just [open an issue](https://github.com/project-repo/cagebreak/issues/new) and state your idea. - We will consider the proposal and get back to you. - * Don't open a pull request. We might not accept your code and + * [Open an issue](https://github.com/project-repo/cagebreak/issues/new) and state your idea. + We will get back to you. + * Ask before you open a pull request. We might not accept your code and it would be sad to waste the effort. * Respect the [Code of Conduct](CODE_OF_CONDUCT.md) (To date, we never had to intervene - Keep it that way!) @@ -208,16 +199,16 @@ as a source of inspiration and explanations for certain particularities. ## Contributing * Read this document. - * Just [open an issue](https://github.com/project-repo/cagebreak/issues/new) and state your feature request. - We will consider the proposal and get back to you. - * Don't open a pull request without asking first. We might not accept your + * [Open an issue](https://github.com/project-repo/cagebreak/issues/new) and state your feature request. + We will get back to you. + * Ask before opening a pull request. We might not accept your code and it would be sad to waste the effort. * Respect the [Code of Conduct](CODE_OF_CONDUCT.md) (To date, we never had to intervene - Please keep it that way!) ### Good First Contributions - * Reviewing the project is always welcome. + * Reviews are always welcome. * Read the code. * Read the documentation. * Test whether the documentation matches the code. @@ -225,12 +216,12 @@ as a source of inspiration and explanations for certain particularities. * Compile the code. * Ideas on improving the testing and quality assurance are particularly welcome. - * If you want, you can share your cagebreak scripts and we might include them - in the repository provided you agree to release them under MIT and we agree - with the use case and coding style. - * Iff you are happy with Cagebreak and use Arch Linux, you may vote for + * You can share your cagebreak scripts and we might include them with Cagebreak + provided you agree to release them under MIT and we agree with the + use case and coding style. + * If you are happy with Cagebreak under Arch Linux, you may vote for [Cagebreak in the AUR](https://aur.archlinux.org/packages/cagebreak). - * The points above still apply. + * The points from the Contributing section above still apply. ### Philosophy diff --git a/SECURITY.md b/SECURITY.md index 2f33197..a55a2b4 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -51,11 +51,10 @@ public key or provide the fingerprint and directions to obtain the key. ## Threat Model -Cagebreak is a wayland compositor 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). +Cagebreak is a wayland compositor run by a user and has access to +the resources the user has access to. +Cagebreak cannot restrict other programs (consider a web browser +unable to write a downloaded file for instance). There is no transmission of information by cagebreak other than to the screens, ipc and potentially other documented local channels. @@ -63,38 +62,36 @@ 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 (no) attack surface. Please reference the man pages for details but especially -the -e and --bs options. +has (no) attack surface. Please reference the man pages (especially options -e and --bs ). #### Spoofing -Not applicable - Using Cagebreak already requires a login as a user. +Not applicable - Cagebreak is executed after user login. #### Tampering -Not applicable - Cagebreak must allow system manipulation for user software. +Not applicable - Cagebreak allows 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 (if enabled) for example. +Cagebreak sends events over documented channels. There is no logging +activated by default - this can be changed by logging the socket (if enabled) 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. +Not applicable - Information disclosure over documented channels is a feature. +Any user software 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 if the socket is enabled. +Not applicable - Cagebreak offers functionality to terminate itself. This is +available to user software over the socket (if enabled). #### 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 +Software may gain arbitrary code execution if it has access to the +socket (if enabled). Privilege escalation to root is unlikely since privileges are dropped before any user input is accepted. ## GPG Keys of the Cagebreak Repository diff --git a/cagebreak.c b/cagebreak.c index 4437331..66afdf3 100644 --- a/cagebreak.c +++ b/cagebreak.c @@ -26,8 +26,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -368,7 +368,7 @@ main(int argc, char *argv[]) { wl_event_loop_add_signal(event_loop, SIGPIPE, handle_signal, &server); server.event_loop = event_loop; - backend = wlr_backend_autocreate(server.wl_display); + backend = wlr_backend_autocreate(server.wl_display, &server.session); if(!backend) { wlr_log(WLR_ERROR, "Unable to create the wlroots backend"); ret = 1; @@ -428,9 +428,10 @@ main(int argc, char *argv[]) { ret = 1; goto end; } - wlr_scene_attach_output_layout(server.scene, server.output_layout); + server.scene_output_layout = + wlr_scene_attach_output_layout(server.scene, server.output_layout); - compositor = wlr_compositor_create(server.wl_display, server.renderer); + compositor = wlr_compositor_create(server.wl_display, 6, server.renderer); if(!compositor) { wlr_log(WLR_ERROR, "Unable to create the wlroots compositor"); ret = 1; @@ -474,14 +475,8 @@ main(int argc, char *argv[]) { goto end; } - server.idle = wlr_idle_create(server.wl_display); - if(!server.idle) { - wlr_log(WLR_ERROR, "Unable to create the idle tracker"); - ret = 1; - goto end; - } - server.idle_inhibit_v1 = wlr_idle_inhibit_v1_create(server.wl_display); + server.idle = wlr_idle_notifier_v1_create(server.wl_display); if(!server.idle_inhibit_v1) { wlr_log(WLR_ERROR, "Cannot create the idle inhibitor"); ret = 1; @@ -687,6 +682,12 @@ main(int argc, char *argv[]) { wl_display_run(server.wl_display); +#if CG_HAS_XWAYLAND + if(server.xwayland != NULL) { + wlr_xwayland_destroy(server.xwayland); + } +#endif + wl_display_destroy_clients(server.wl_display); end: @@ -734,11 +735,6 @@ end: if(server.seat != NULL) { seat_destroy(server.seat); } -#if CG_HAS_XWAYLAND - if(server.xwayland != NULL) { - wlr_xwayland_destroy(server.xwayland); - } -#endif if(sigint_source != NULL) { wl_event_source_remove(sigint_source); diff --git a/fuzz/fuzz-lib.c b/fuzz/fuzz-lib.c index d331880..650d8a8 100644 --- a/fuzz/fuzz-lib.c +++ b/fuzz/fuzz-lib.c @@ -25,10 +25,9 @@ #include #include #include -#include #include +#include #include -#include #include #include #include @@ -271,9 +270,10 @@ LLVMFuzzerInitialize(int *argc, char ***argv) { ret = 1; goto end; } - wlr_scene_attach_output_layout(server.scene, server.output_layout); + server.scene_output_layout = + wlr_scene_attach_output_layout(server.scene, server.output_layout); - compositor = wlr_compositor_create(server.wl_display, server.renderer); + compositor = wlr_compositor_create(server.wl_display, 5, server.renderer); if(!compositor) { wlr_log(WLR_ERROR, "Unable to create the wlroots compositor"); ret = 1; @@ -310,7 +310,7 @@ LLVMFuzzerInitialize(int *argc, char ***argv) { goto end; } - server.idle = wlr_idle_create(server.wl_display); + server.idle = wlr_idle_notifier_v1_create(server.wl_display); if(!server.idle) { wlr_log(WLR_ERROR, "Unable to create the idle tracker"); ret = 1; diff --git a/idle_inhibit_v1.c b/idle_inhibit_v1.c index b4f91f9..019d47b 100644 --- a/idle_inhibit_v1.c +++ b/idle_inhibit_v1.c @@ -2,8 +2,8 @@ // SPDX-License-Identifier: MIT #include -#include #include +#include #include "idle_inhibit_v1.h" #include "server.h" @@ -24,7 +24,7 @@ idle_inhibit_v1_check_active(struct cg_server *server) { /* As of right now, this does not check whether the inhibitor * is visible or not.*/ bool inhibited = !wl_list_empty(&server->inhibitors); - wlr_idle_set_enabled(server->idle, NULL, !inhibited); + wlr_idle_notifier_v1_set_inhibited(server->idle, inhibited); } #if CG_HAS_FANALYZE #pragma GCC diagnostic pop diff --git a/keybinding.c b/keybinding.c index eaf2ae7..6da0cc6 100644 --- a/keybinding.c +++ b/keybinding.c @@ -11,7 +11,6 @@ #include #include #include -#include #include #include #include @@ -506,11 +505,10 @@ keybinding_workspace_fullscreen(struct cg_server *server) { // Switch to a differerent virtual terminal static int -keybinding_switch_vt(struct wlr_backend *backend, unsigned int vt) { - if(wlr_backend_is_multi(backend)) { - struct wlr_session *session = wlr_backend_get_session(backend); - if(session) { - wlr_session_change_vt(session, vt); +keybinding_switch_vt(struct cg_server *server, unsigned int vt) { + if(wlr_backend_is_multi(server->backend)) { + if(server->session) { + wlr_session_change_vt(server->session, vt); } return 0; } @@ -1627,11 +1625,11 @@ void set_cursor(bool enabled, struct cg_seat *seat) { if(enabled == true) { seat->enable_cursor = true; - wlr_xcursor_manager_set_cursor_image(seat->xcursor_manager, - DEFAULT_XCURSOR, seat->cursor); + wlr_cursor_set_xcursor(seat->cursor, seat->xcursor_manager, + DEFAULT_XCURSOR); } else { seat->enable_cursor = false; - wlr_cursor_set_image(seat->cursor, NULL, 0, 0, 0, 0, 0, 0); + wlr_cursor_unset_image(seat->cursor); } } @@ -1645,7 +1643,7 @@ run_action(enum keybinding_action action, struct cg_server *server, server->running = false; break; case KEYBINDING_CHANGE_TTY: - return keybinding_switch_vt(server->backend, data.u); + return keybinding_switch_vt(server, data.u); case KEYBINDING_CURSOR: set_cursor(data.i, server->seat); break; @@ -1688,9 +1686,9 @@ run_action(enum keybinding_action action, struct cg_server *server, if(data.u != server->seat->default_mode) { wlr_seat_pointer_notify_clear_focus(server->seat->seat); if(server->seat->enable_cursor == true) { - wlr_xcursor_manager_set_cursor_image( - server->seat->xcursor_manager, "dot_box_mask", - server->seat->cursor); + wlr_cursor_set_xcursor(server->seat->cursor, + server->seat->xcursor_manager, + "dot_box_mask"); } } server->seat->mode = data.u; diff --git a/man/cagebreak-config.5.md b/man/cagebreak-config.5.md index f894d04..c04c757 100644 --- a/man/cagebreak-config.5.md +++ b/man/cagebreak-config.5.md @@ -1,4 +1,4 @@ -cagebreak-config(5) "Version 2.2.1" "Cagebreak Manual" +cagebreak-config(5) "Version 2.2.2" "Cagebreak Manual" # NAME diff --git a/man/cagebreak-socket.7.md b/man/cagebreak-socket.7.md index 210a4f9..d61e498 100644 --- a/man/cagebreak-socket.7.md +++ b/man/cagebreak-socket.7.md @@ -1,4 +1,4 @@ -cagebreak-socket(7) "Version 2.2.1" "Cagebreak Manual" +cagebreak-socket(7) "Version 2.2.2" "Cagebreak Manual" # NAME diff --git a/man/cagebreak.1.md b/man/cagebreak.1.md index d99a87a..7e0c421 100644 --- a/man/cagebreak.1.md +++ b/man/cagebreak.1.md @@ -1,4 +1,4 @@ -cagebreak(1) "Version 2.2.1" "Cagebreak Manual" +cagebreak(1) "Version 2.2.2" "Cagebreak Manual" # NAME diff --git a/meson.build b/meson.build index fb83017..e28557e 100644 --- a/meson.build +++ b/meson.build @@ -3,7 +3,7 @@ project( 'cagebreak', 'c', -version : '2.2.1', +version : '2.2.2', license : 'MIT', default_options : ['c_std=c11', 'warning_level=3'] ) @@ -55,7 +55,7 @@ if is_freebsd ) endif -wlroots = dependency('wlroots', version: ['>=0.16.1', '< 0.17.0']) +wlroots = dependency('wlroots', version: ['>=0.16.1', '< 0.17.1']) wayland_protos = dependency('wayland-protocols', version: '>=1.14') wayland_server = dependency('wayland-server') wayland_cursor = dependency('wayland-cursor') @@ -204,15 +204,15 @@ reproducible_build_versions = { 'wayland_server': '1.19.0', 'wayland_client': '1.22.0', 'wayland_cursor': '1.22.0', - 'wlroots': '0.16.2', - 'xkbcommon': '1.5.0', + 'wlroots': '0.17.0', + 'xkbcommon': '1.6.0', 'fontconfig': '2.14.2', - 'libinput': '1.23.0', + 'libinput': '1.24.0', 'libevdev': '1.13.1', 'libudev': '254', - 'pango': '1.50.14', - 'cairo': '1.17.8', - 'pangocairo': '1.50.14', + 'pango': '1.51.0', + 'cairo': '1.18.0', + 'pangocairo': '1.51.0', 'math': '-1' } @@ -260,7 +260,7 @@ install_data('LICENSE', install_dir : '/usr/share/licenses/' + meson.project_nam if get_option('man-pages') scdoc = find_program('scdoc') - secssinceepoch = 1692353837 + secssinceepoch = 1701680868 shcommand = 'export SOURCE_DATE_EPOCH=' + secssinceepoch.to_string() + ' ; @0@ < @INPUT@'.format(scdoc.path()) sh = find_program('sh') mandir1 = join_paths(get_option('mandir'), 'man1') diff --git a/message.c b/message.c index 74b1d0a..d74b8cf 100644 --- a/message.c +++ b/message.c @@ -12,7 +12,6 @@ #include #include #include -#include #include #include #include diff --git a/output.c b/output.c index 506f5bd..d4fef70 100644 --- a/output.c +++ b/output.c @@ -15,9 +15,9 @@ #include #endif #include +#include #include #include -#include #include #include #include @@ -42,7 +42,7 @@ void output_clear(struct cg_output *output) { struct cg_server *server = output->server; - wlr_output_layout_remove(server->output_layout, output->wlr_output); + wlr_scene_output_destroy(output->scene_output); if(server->running && server->curr_output == output && wl_list_length(&server->outputs) > 1) { @@ -118,7 +118,6 @@ output_destroy(struct cg_output *output) { int outp_num = output_get_num(output); wl_list_remove(&output->destroy.link); - wl_list_remove(&output->mode.link); wl_list_remove(&output->commit.link); wl_list_remove(&output->frame.link); @@ -166,7 +165,7 @@ handle_output_frame(struct wl_listener *listener, void *data) { if(scene_output == NULL) { return; } - wlr_scene_output_commit(scene_output); + wlr_scene_output_commit(scene_output, NULL); struct timespec now = {0}; clock_gettime(CLOCK_MONOTONIC, &now); @@ -439,8 +438,9 @@ handle_output_commit(struct wl_listener *listener, void *data) { return; } - if(event->committed & - (WLR_OUTPUT_STATE_TRANSFORM | WLR_OUTPUT_STATE_SCALE)) { + if(event->state->committed & + (WLR_OUTPUT_STATE_TRANSFORM | WLR_OUTPUT_STATE_SCALE | + WLR_OUTPUT_STATE_MODE)) { struct cg_view *view; wl_list_for_each( view, &output->workspaces[output->curr_workspace]->views, link) { @@ -451,23 +451,6 @@ handle_output_commit(struct wl_listener *listener, void *data) { } } -static void -handle_output_mode(struct wl_listener *listener, void *data) { - struct cg_output *output = wl_container_of(listener, output, mode); - - if(!output->wlr_output->enabled || output->workspaces == NULL) { - return; - } - - struct cg_view *view; - wl_list_for_each(view, &output->workspaces[output->curr_workspace]->views, - link) { - if(view_is_visible(view)) { - view_maximize(view, view->tile); - } - } -} - void output_make_workspace_fullscreen(struct cg_output *output, int ws) { struct cg_server *server = output->server; @@ -517,6 +500,7 @@ handle_new_output(struct wl_listener *listener, void *data) { } struct cg_output *output = calloc(1, sizeof(struct cg_output)); + output->scene_output = wlr_scene_output_create(server->scene, wlr_output); if(!output) { wlr_log(WLR_ERROR, "Failed to allocate output"); return; @@ -568,8 +552,8 @@ handle_new_output(struct wl_listener *listener, void *data) { if(server->curr_output == NULL) { server->curr_output = output; } - wlr_xcursor_manager_set_cursor_image(server->seat->xcursor_manager, - DEFAULT_XCURSOR, server->seat->cursor); + wlr_cursor_set_xcursor(server->seat->cursor, server->seat->xcursor_manager, + DEFAULT_XCURSOR); wlr_cursor_warp(server->seat->cursor, NULL, 0, 0); output->destroy.notify = handle_output_destroy; @@ -578,8 +562,7 @@ handle_new_output(struct wl_listener *listener, void *data) { wl_signal_add(&wlr_output->events.frame, &output->frame); output->commit.notify = handle_output_commit; wl_signal_add(&wlr_output->events.commit, &output->commit); - output->mode.notify = handle_output_mode; - wl_signal_add(&wlr_output->events.mode, &output->mode); + ipc_send_event(server, "{\"event_name\":\"new_output\",\"output\":\"%s\",\"output_" "id\":%d,\"priority\":%d}", diff --git a/output.h b/output.h index 90cd615..c1d4853 100644 --- a/output.h +++ b/output.h @@ -16,8 +16,8 @@ struct cg_output { struct cg_server *server; struct wlr_output *wlr_output; struct wlr_scene_rect *bg; + struct wlr_scene_output *scene_output; - struct wl_listener mode; struct wl_listener commit; struct wl_listener destroy; struct wl_listener frame; diff --git a/release-non-auto-checks/Bugs.md b/release-non-auto-checks/Bugs.md index d340262..9388d0a 100644 --- a/release-non-auto-checks/Bugs.md +++ b/release-non-auto-checks/Bugs.md @@ -1,2 +1,2 @@ -2.2.1 -2023-08-21 +2.2.2 +2023-12-04 diff --git a/release-non-auto-checks/FAQ.md b/release-non-auto-checks/FAQ.md index d340262..9388d0a 100644 --- a/release-non-auto-checks/FAQ.md +++ b/release-non-auto-checks/FAQ.md @@ -1,2 +1,2 @@ -2.2.1 -2023-08-21 +2.2.2 +2023-12-04 diff --git a/release-non-auto-checks/SECURITY.md b/release-non-auto-checks/SECURITY.md index d340262..9388d0a 100644 --- a/release-non-auto-checks/SECURITY.md +++ b/release-non-auto-checks/SECURITY.md @@ -1,2 +1,2 @@ -2.2.1 -2023-08-21 +2.2.2 +2023-12-04 diff --git a/release-non-auto-checks/WLR_XDG_VERSION b/release-non-auto-checks/WLR_XDG_VERSION index d340262..9388d0a 100644 --- a/release-non-auto-checks/WLR_XDG_VERSION +++ b/release-non-auto-checks/WLR_XDG_VERSION @@ -1,2 +1,2 @@ -2.2.1 -2023-08-21 +2.2.2 +2023-12-04 diff --git a/release-non-auto-checks/acknowledge-contributors b/release-non-auto-checks/acknowledge-contributors index d340262..9388d0a 100644 --- a/release-non-auto-checks/acknowledge-contributors +++ b/release-non-auto-checks/acknowledge-contributors @@ -1,2 +1,2 @@ -2.2.1 -2023-08-21 +2.2.2 +2023-12-04 diff --git a/release-non-auto-checks/changelog-major-minor b/release-non-auto-checks/changelog-major-minor index d340262..9388d0a 100644 --- a/release-non-auto-checks/changelog-major-minor +++ b/release-non-auto-checks/changelog-major-minor @@ -1,2 +1,2 @@ -2.2.1 -2023-08-21 +2.2.2 +2023-12-04 diff --git a/release-non-auto-checks/internal-wiki b/release-non-auto-checks/internal-wiki index d340262..9388d0a 100644 --- a/release-non-auto-checks/internal-wiki +++ b/release-non-auto-checks/internal-wiki @@ -1,2 +1,2 @@ -2.2.1 -2023-08-21 +2.2.2 +2023-12-04 diff --git a/release-non-auto-checks/release-note b/release-non-auto-checks/release-note index d340262..9388d0a 100644 --- a/release-non-auto-checks/release-note +++ b/release-non-auto-checks/release-note @@ -1,2 +1,2 @@ -2.2.1 -2023-08-21 +2.2.2 +2023-12-04 diff --git a/release-non-auto-checks/reproducibility-checked b/release-non-auto-checks/reproducibility-checked index d340262..9388d0a 100644 --- a/release-non-auto-checks/reproducibility-checked +++ b/release-non-auto-checks/reproducibility-checked @@ -1,2 +1,2 @@ -2.2.1 -2023-08-21 +2.2.2 +2023-12-04 diff --git a/release-non-auto-checks/security-to-man-page-info-transfer b/release-non-auto-checks/security-to-man-page-info-transfer index d340262..9388d0a 100644 --- a/release-non-auto-checks/security-to-man-page-info-transfer +++ b/release-non-auto-checks/security-to-man-page-info-transfer @@ -1,2 +1,2 @@ -2.2.1 -2023-08-21 +2.2.2 +2023-12-04 diff --git a/seat.c b/seat.c index 1c88f49..80206e9 100644 --- a/seat.c +++ b/seat.c @@ -14,7 +14,7 @@ #include #include #include -#include +#include #include #include #include @@ -59,10 +59,10 @@ update_capabilities(const struct cg_seat *seat) { /* Hide cursor if the seat doesn't have pointer capability. */ if(((caps & WL_SEAT_CAPABILITY_POINTER) == 0) || seat->enable_cursor == false) { - wlr_cursor_set_image(seat->cursor, NULL, 0, 0, 0, 0, 0, 0); + wlr_cursor_unset_image(seat->cursor); } else { - wlr_xcursor_manager_set_cursor_image(seat->xcursor_manager, - DEFAULT_XCURSOR, seat->cursor); + wlr_cursor_set_xcursor(seat->cursor, seat->xcursor_manager, + DEFAULT_XCURSOR); } } @@ -169,7 +169,7 @@ handle_modifier_event(struct wlr_input_device *device, struct cg_seat *seat) { wlr_seat_set_keyboard(seat->seat, keyboard); wlr_seat_keyboard_notify_modifiers(seat->seat, &keyboard->modifiers); - wlr_idle_notify_activity(seat->server->idle, seat->seat); + wlr_idle_notifier_v1_notify_activity(seat->server->idle, seat->seat); } void @@ -205,12 +205,11 @@ handle_command_key_bindings(struct cg_server *server, xkb_keysym_t sym, &server->scene->tree.node, server->seat->cursor->x, server->seat->cursor->y, &sx, &sy); if(server->seat->enable_cursor) { - wlr_xcursor_manager_set_cursor_image(server->seat->xcursor_manager, - "left_ptr", - server->seat->cursor); + wlr_cursor_set_xcursor(server->seat->cursor, + server->seat->xcursor_manager, "left_ptr"); if(node && node->type == WLR_SCENE_NODE_BUFFER) { struct wlr_scene_surface *scene_surface = - wlr_scene_surface_from_buffer( + wlr_scene_surface_try_from_buffer( wlr_scene_buffer_from_node(node)); if(scene_surface != NULL) { surface = scene_surface->surface; @@ -239,7 +238,7 @@ handle_command_key_bindings(struct cg_server *server, xkb_keysym_t sym, } message_clear(group->seat->server->curr_output); run_action((*keybinding)->action, server, (*keybinding)->data); - wlr_idle_notify_activity(server->idle, server->seat->seat); + wlr_idle_notifier_v1_notify_activity(server->idle, server->seat->seat); return true; } else if(mode != 0) { run_action(KEYBINDING_NOOP, server, (union keybinding_params){NULL}); @@ -312,7 +311,7 @@ handle_key_event(struct cg_keyboard_group *group, struct cg_seat *seat, event->keycode, event->state); } - wlr_idle_notify_activity(seat->server->idle, seat->seat); + wlr_idle_notifier_v1_notify_activity(seat->server->idle, seat->seat); } static void @@ -589,7 +588,7 @@ handle_touch_down(struct wl_listener *listener, void *data) { uint32_t serial = 0; if(node && node->type == WLR_SCENE_NODE_BUFFER) { struct wlr_scene_surface *scene_surface = - wlr_scene_surface_from_buffer(wlr_scene_buffer_from_node(node)); + wlr_scene_surface_try_from_buffer(wlr_scene_buffer_from_node(node)); if(scene_surface != NULL) { serial = wlr_seat_touch_notify_down( seat->seat, scene_surface->surface, event->time_msec, @@ -603,7 +602,7 @@ handle_touch_down(struct wl_listener *listener, void *data) { seat->touch_ly = ly; } - wlr_idle_notify_activity(seat->server->idle, seat->seat); + wlr_idle_notifier_v1_notify_activity(seat->server->idle, seat->seat); } static void @@ -616,7 +615,7 @@ handle_touch_up(struct wl_listener *listener, void *data) { } wlr_seat_touch_notify_up(seat->seat, event->time_msec, event->touch_id); - wlr_idle_notify_activity(seat->server->idle, seat->seat); + wlr_idle_notifier_v1_notify_activity(seat->server->idle, seat->seat); } static void @@ -638,7 +637,7 @@ handle_touch_motion(struct wl_listener *listener, void *data) { if(node && node->type == WLR_SCENE_NODE_BUFFER) { struct wlr_scene_surface *scene_surface = - wlr_scene_surface_from_buffer(wlr_scene_buffer_from_node(node)); + wlr_scene_surface_try_from_buffer(wlr_scene_buffer_from_node(node)); if(scene_surface != NULL) { wlr_seat_touch_point_focus(seat->seat, scene_surface->surface, @@ -657,7 +656,7 @@ handle_touch_motion(struct wl_listener *listener, void *data) { seat->touch_ly = ly; } - wlr_idle_notify_activity(seat->server->idle, seat->seat); + wlr_idle_notifier_v1_notify_activity(seat->server->idle, seat->seat); } static void @@ -665,7 +664,7 @@ handle_cursor_frame(struct wl_listener *listener, void *_data) { struct cg_seat *seat = wl_container_of(listener, seat, cursor_frame); wlr_seat_pointer_notify_frame(seat->seat); - wlr_idle_notify_activity(seat->server->idle, seat->seat); + wlr_idle_notifier_v1_notify_activity(seat->server->idle, seat->seat); } static void @@ -676,7 +675,7 @@ handle_cursor_axis(struct wl_listener *listener, void *data) { wlr_seat_pointer_notify_axis(seat->seat, event->time_msec, event->orientation, event->delta, event->delta_discrete, event->source); - wlr_idle_notify_activity(seat->server->idle, seat->seat); + wlr_idle_notifier_v1_notify_activity(seat->server->idle, seat->seat); } static void @@ -686,7 +685,7 @@ handle_cursor_button(struct wl_listener *listener, void *data) { wlr_seat_pointer_notify_button(seat->seat, event->time_msec, event->button, event->state); - wlr_idle_notify_activity(seat->server->idle, seat->seat); + wlr_idle_notifier_v1_notify_activity(seat->server->idle, seat->seat); } static void @@ -701,7 +700,7 @@ process_cursor_motion(struct cg_seat *seat, uint32_t time) { if(node && node->type == WLR_SCENE_NODE_BUFFER) { struct wlr_scene_surface *scene_surface = - wlr_scene_surface_from_buffer(wlr_scene_buffer_from_node(node)); + wlr_scene_surface_try_from_buffer(wlr_scene_buffer_from_node(node)); if(scene_surface != NULL) { surface = scene_surface->surface; if(surface != NULL) { @@ -722,7 +721,7 @@ process_cursor_motion(struct cg_seat *seat, uint32_t time) { drag_icon_update_position(drag_icon); } - wlr_idle_notify_activity(seat->server->idle, seat->seat); + wlr_idle_notifier_v1_notify_activity(seat->server->idle, seat->seat); /* Check if cursor switched tile */ struct wlr_output *c_outp = wlr_output_layout_output_at( @@ -749,7 +748,8 @@ process_cursor_motion(struct cg_seat *seat, uint32_t time) { break; } } - if(seat->cursor_tile != NULL && seat->cursor_tile != c_tile) { + if(seat->cursor_tile != NULL && seat->cursor_tile != c_tile && + seat->server->running) { ipc_send_event(seat->server, "{\"event_name\":\"cursor_switch_tile\",\"old_output\":" "\"%s\",\"old_output_id\":%d," @@ -772,7 +772,7 @@ handle_cursor_motion_absolute(struct wl_listener *listener, void *data) { wlr_cursor_warp_absolute(seat->cursor, &event->pointer->base, event->x, event->y); process_cursor_motion(seat, event->time_msec); - wlr_idle_notify_activity(seat->server->idle, seat->seat); + wlr_idle_notifier_v1_notify_activity(seat->server->idle, seat->seat); } static void @@ -783,7 +783,7 @@ handle_cursor_motion(struct wl_listener *listener, void *data) { wlr_cursor_move(seat->cursor, &event->pointer->base, event->delta_x, event->delta_y); process_cursor_motion(seat, event->time_msec); - wlr_idle_notify_activity(seat->server->idle, seat->seat); + wlr_idle_notifier_v1_notify_activity(seat->server->idle, seat->seat); } static void diff --git a/server.h b/server.h index 9f6eca6..0c067ec 100644 --- a/server.h +++ b/server.h @@ -26,17 +26,19 @@ struct cg_server { struct cg_seat *seat; struct cg_input_manager *input; struct wlr_backend *backend; - struct wlr_idle *idle; + struct wlr_idle_notifier_v1 *idle; struct wlr_idle_inhibit_manager_v1 *idle_inhibit_v1; struct wl_listener new_idle_inhibitor_v1; struct wl_list inhibitors; struct wlr_output_layout *output_layout; + struct wlr_scene_output_layout *scene_output_layout; struct wl_list disabled_outputs; struct wl_list outputs; struct cg_output *curr_output; struct wl_listener new_output; struct wl_list output_priorities; + struct wlr_session *session; struct wlr_renderer *renderer; struct wlr_allocator *allocator; diff --git a/signatures/2.2.1-cagebreak-config.5.sig b/signatures/2.2.1-cagebreak-config.5.sig new file mode 100644 index 0000000000000000000000000000000000000000..4a959e13f13ef5987a24bbb6bc8c7c921738b108 GIT binary patch literal 566 zcmV-60?GY}0y6{v0SEvc79j*qg2yatK3J!`Pxw_y3HVH?JGf^B0%YHX-2e&+5J?I6 zOsG4!XQo~c{So||y?|0?M)3u$CcFzF)_LZS7Pymc>5n`Ri!1#cUhO4VUuudz^%-%h zwJ)E8oVzp~{~R2H%V8C~W$3TAx;v0NVmnaz2@|gODF=%M4k9HzfgT0J%nc*ATOvuk z!^W^{qu(kzt+?JcqCkFrso8HuoOP2<1#A5qGZ7Fyw!1{(`!ufUYC+kNvDIJSvudkx zt1zJ{B-`}bP?t`+m!QeZ;R?u7m+ju=9J((NIsU48Dyjsa0^mzL5!)<|({8*RHb3c6 zK}5h3978c|e=VzESOfzCVw^D#1ZD2WXbDL-^YW#P^Bx1BQ8*$87o4V>w5G#o^@jiO z)GdC+b4SbUUd`E;Tz%?J;z>FbK~eWc=%q#}As&+aQm!7l) z$Fd^(t8!#twP8d?1;7`hEe3hq+RHp6G_?qSgxy-8KK=nL%CaSjkeA=mWs|NL9Gn-h EAUQ`3sQ>@~ literal 0 HcmV?d00001 diff --git a/signatures/2.2.1-cagebreak-socket.7.sig b/signatures/2.2.1-cagebreak-socket.7.sig new file mode 100644 index 0000000000000000000000000000000000000000..c2006c13f278568e1f3dcf9c7987f024611c72d6 GIT binary patch literal 566 zcmV-60?GY}0y6{v0SEvc79j*qg2yatK3J!`Pxw_y3HVH?JGf^B0%YHX-2e&+5J?I6 zOsG4!XGNqC0Hz9+wC;n0Gi?5@lJY#U^YIRf{|^*8eRtER7;$M0Qb${|8_~tEj))HH z=dd5<`J0kI!Ij%qLvdD_CVl}Rb&js>7+`G$243s*U-wVAgR7{w%0~6-t?7tf3~ahutq3?# zjl|Nnk6uqbhtavYDi!lu$o9qCCdpvf5e(nAVQASsYYp!dEvwi^ee0|PipH{?HXchI z&c75I{w!>=As-Gp;ayjxe&fU)RRjI54>%e7bw_zVx|J=FTFg8d3^+Q)Ofxvn{X9{` zT7~)InN|+RCKblN&hD9P$4FzYL2+kR|KR^ww6mxNAL11jcslAvV-&73!Pr0I1<$lL z)ObUzLz35 zip~M0*p34ZhN?t4s}T>e3mOIDU>T>LC!DVU+Ui#>i8A1$#w3!`u0#r%c;oC~Eh}Y5 zt1J7s=?e<2{yaxgO)t-w_0Fy9B2%x9x=Rh#YFZVD<7AoN_@0;v zOGEK1#gotcETyjpIyp)bKrl1*pxP71ME^Emzz)_#TuEZF7f1Me_x+EZG5{AqR#UAT EKn)iNFaQ7m literal 0 HcmV?d00001 diff --git a/signatures/2.2.1-cagebreak.1.sig b/signatures/2.2.1-cagebreak.1.sig new file mode 100644 index 0000000000000000000000000000000000000000..cdbd7812f165dad1f19ea2b2b9181f53b4825f6f GIT binary patch literal 566 zcmV-60?GY}0y6{v0SEvc79j*qg2yatK3J!`Pxw_y3HVH?JGf^B0%YHX-2e&+5J?I6 zOsG4!XQlBF0Erx3YeY2@5K4l&J*~(huos~pT;6m~#SOJViF|eoCy;;jHjy zl64=uqIcd~)dw3^bjE)7*84}rS-@%%JEj@|uRxA&@B{s(Hv%B0vKLM!-a-2X_zll^ zC!tN`TGxcas0q4$69%gMMqiorHm3FvqUqff^os?^mZVNCS|Vjw(;()AR}Ue5)N#*T zY%wX6f0=6{uqA|=)gBh&JnryQRnF!A(1q?uV7;nZLz!OoZx99ADYs$M(Dv$KxR$|? zuA8V)y(;<1HAUW~j|}*Ld65^fTX}+#N#b=17R#3Z-$DA?e`RK1|Ol)RKy6n_G z<99;!K)q#7lBTggtU8V;yg8Y)pB5YPi4u^+@o=(}rj+l)g{LA6?GmC650m}u_^3ZC zI48;Ea8hF%R2oLfSt{)Il7!jvvGl~)*x=r1zWWTrLR-A$D$vn(8ppR$z`|@*t zdlat~vmxysYApsx)#+>|Qsg0oi)#=i*XRd-{NmC|E78#B>-kRju~Df3AqB)adYaVMaV0QXM>4W1aF{Y4d zW1W@fidlyGUbSc*L+%C|Yr2}$p2)+`)Nu5o(i)#}_j^qf{vW{edYxOxs=x;H&KCvS z+*qq!d`%&AIv{T>A`ls(1OIGZ(ZC5q$Hv+#Oi#Be8|tO(6W_*>g<>m!%ghD;=9!0K z(3N=YHgS$tFUnUAzno+B<&FctvxoC*0G+<`Xoe!pP$F)LEBUut|8P0NE-ppQOYB3a zkOQR*pRyWf9g&I#%kSX;y7E`I>2j4qxt)_aM95c3M)_~buX#*$TCx>WE+&y==Ic^D z2P1jjq%}y$o;~|=o%249x0{WCwq!-o&*BYiqS-I+Hg={^|yMxhAMp#(r@TjP?IuP_3~Vk zdnB5WIxqxUM(1WfPPO#7agQOnJf*P+$lX&SlL}tj@{w|5hnD8j1_}>gi_nUBiv*Ac z1*oj{31I(2Wq%~EkUwErc1mnnLAbJe;0-8ACY7zE^ouZE$yA3d&;{&y6jl@o-a@7g zNO9A&W^oX28CD`};&`U3e2pnGZCyobS!bPflc4?q!XkQcpq9v*k3!X}oSxa|m9SBy zBLDxKoO%w0WJcI@`P`hHf2t44z%nA1ZEre9Q`2>L(|=;MyDvs;ZC}Hhw+rIJL2{(} zzT%?eQDqpytUf&f4k*err?qLMkuyxyq~Yv#`mJik@q@E{4%MtIWr%0~yEg=q!rA=> zaXGR~n77M0^g0bM1qdG$2fU#ftYD<&!x7l4TSBMS)5zVv&&j&j)Skqst%&j>rE}pz hL4_pcau|GV0%E3Ogq#{tp%vU9^+DsLs{GR9^L1@G3Ag|N delta 543 zcmV+)0^t3&1hxc_B7bDxh1~!O2@pvM_)MrfxM!wb5B(ARo4tTiW=8P^ttPw+A=Y{3 zj~2L-Zt0Ia5Q{7Q9A51uSYK+2KJ^)Ks-sK#+ zFA+KZs(LD_1fT-oOFR+VERNG|yc{+^=}|#Mz!DroF>HS=t6*3J0|H{4F%JY~?#E~e zNjLNIrHu0)1Am}VI3foZoTi(!ro(9UhX3%?Eq=vwN6YM9&Dob+edCG*%D(WNNE7%RntaZt&JyZoYs5|CYcGg;@(U`!+{r>dM(bQm!7l)$Fd^(t8!#twP8d?1;7`hEe3hq+RHp6 hG_?qSgc#jgpg#TqEXuMaijbGz(q)sb7#y4zupnI`2VMXG diff --git a/signatures/cagebreak-socket.7.sig b/signatures/cagebreak-socket.7.sig index c2006c13f278568e1f3dcf9c7987f024611c72d6..e46522fc40240c6f9b09db2bf27cfdd64bf76e96 100644 GIT binary patch delta 543 zcmV+)0^t3&1hxc_B7bFVu;Ks;2@pvM_)MrfxM%5#5CF-V!k0qVjS%xt1huT9r$2|3 zT$OuJ5cNENS_}C*d%QA-RB)snkED!%WW&up)p^F4HAv@XGGT{qPFsNAOkaxAC8MHV z;}HhfrUw;N7}gg@R}aAiGAB4B~qjQqjZtHD2aj+DBFz zT*e1-{P2J6*MDn$O;sNot(7}%dvsB)o&2*_^PkwxXu0yB0uHGJaE?CU7L*hu3=LD^ z<(=;%>%*QKN($bD)Jrl$oZ=^iw<#gfIzK=`2Po7Sofu#vDDqcYUdxPi-44B%ZXFoK zN~`c^VRsrnJ1^5VJ2Mr#Vx!ew<6mX@GCkRzpsg-5nSY@Vv^6E$u=xb|YNZIX5ZuXZ zY?6uBJypXYor5KI29?U?pk>oIb(2T0QQA9?3u67W|3Pd}fK>dfuQ4h8{-iQGo*$t{ z0u0{UFgf%A4!l9rH>ARW27GtA3hL>D`AdT~eNf~Q+eU>-5Pp}@Z3~eMNv}-71@`j& hN+Kd&R~UgX)(X>?Jk`_L^D&m?5#cM!Y|GY}pE3?Y04o3h delta 543 zcmV+)0^t3&1hxc_B7bDxh1~!O2@pvM_)MrfxMxMA5CEnMm9*}IgEMUYu9EURvGef` zivJH3I(>K3rx*uf^=J}hFKf#sTRzq=CnI?V#Aa#ze?HFKf z1qNR0^k4T+xP@R%f(t$#u|?pS&y}!mcJKcka!XaDE?fsH4}Ym)&}dV){(T|WFk{Le zi#4mz5e({B!-&d8_3EwZh+YhAx>~IWI8lwn(zcIYPd$gxxw$G8^IFLE#oH#yVAv51 z-?w3C**$9w?-VVo*hhWqtOJV1vYj>_OC8R?6dL|4Y_cIA4m#moSEPR9#2r-w{jLu< z8T)ldc|N+8Eq{?(%sd$kI6B2lGdRxuJW<42h56!{Ru0D|6~@2L?wM@INMo)+ac5Tl z;Qv{)v#16i;uRKnI_gGa6s|JC*gxV0&$Kqwcv0__j)!R)R!uz-LsxNug{HfE1G<+# z2laUQ&0o{do+;>ItsAJ@p9MObx?L5%mm)Wc&H<&^j(-CVhN?t4s}T>e3mOIDU>T>L zC!DVU+Ui#>i8A1$#w3!`u0#r%c;oC~Eh}Y5t1J7s=?e<2{yaxg zO)t-w_0Fy9B2%x9x=Rh#YFZVD<7AoN_@0;vOGEK1#gotcETyjpIyp)bKrl1*pxP71 hME^Emz!(nJL|jQ?u@^`9d-wg1oiYFyKvq+&8$dKf0p$Py diff --git a/signatures/cagebreak.1.sig b/signatures/cagebreak.1.sig index cdbd7812f165dad1f19ea2b2b9181f53b4825f6f..36b2c99c6362034807b3beb0c00a4aa236f3e13e 100644 GIT binary patch delta 543 zcmV+)0^t3&1hxc_B7bFVu;Ks;2@pvM_)MrfxMy_!5CEu?Eyqc}+97z+9jwQ zG=?LB$)6xBq7;qYA0~VSn6jb_lUO(zai%}KYRCd%Xl}Berhmt=pR++@jmz%?k?{l+ zT*06xQw|*Ip89!#w5>}VDxd|u!7n2{C~*hHwg_$7a;EMr`WYcpT%iyr*qo=zKi#J;Q7C@!BwGfOK4j1rq`p#pN}{qk{EmxMlF=*dVeF{0D21#XMOOGOW~@cLINRpP7->NaYty+7Fv-uZ!+?oMe0=$Y8rBN zddQajRrfPRIIdYixy*N*BNSCMX6v3weE^7+81)$5WmP-AUe=ew?=SkKgY#54DXFsr9?geAE{Tr7h0)KRsgm=2G$gXhc&3wH+jmVOg zDTITrvk?Ecfs zA6(vaL^uk~@9cE}3Oq$N?|w?G(&4P|XOeXvyP|jATh#{}R&>UG_tyJI#aX~=5<8|E z0k1%gZtw&BrZ)m0rm`1KCf-5&1^5lmcqgGvS4H+!H}+-s8PKt`N=g!-ldNW_<(tl7qMG;f|5z* zWBgi8SkM0)Gk>f1WD70H7~DgH3AGz5dknk2DJZT?Wuq>}t}#mBw{0Z^S4mhgA|(Kq zBWgk!J)5Pb9_`OojcvU()J(%aR|PDRUTpMO*8(mS$}*ND9~?t_&a_J@hr_H>P~TZD zLSp0Uy}KoBKZYWGRK|!AzUO zXO6-GxLPb|bb>2aB?Z$n>OGI_-0wnx3=va{Ygfn7TLvTdMt|L`3F)$9xMtwVGVe58 zLXnuq@3qN;`^1S8nmLY+FB7K?nR|y>50A$t_?V_r2lbje>Bo)a3IwlF0YBAoc}(EZ zI@03L-%yr3hXZ0cSJoH>SuW05KtZ;vZ{q@-JOA@2cG+-+3P9#@ zkns_jd?UPV5Py%+%sj~Ha~N*-|GQeRyKgdU4LhShXpYzL*c(?P$nb-YKI-=-MPbP8 zUxKoXXL$$fi8xFog4m{Oq|)Dq6wGAcOx?SUeWCClm&gZfL2)W$byv2G9nf>`cMDiP zmmlCQ8McuVD4oO)7*bOAS7%@S?>fGNsTbkw?gGiZOMfy=m~h?Ol_pt6b!a08qW7{` z8oBb#l1cngsaRgFFXKY}2t@I4!@$_2uy#(&n#EOT2&33>w_GZ6K%ERqS;&h0pUp}C zMb21sc@@Z~-r|$cL+Exh he5i+X!5C#`Ms3!3%fN+%`%r9;(fyl8TXlczjIq?=4Q&7b delta 543 zcmV+)0^t3&1hxc_B7bDxh1~!O2@pvM_)MrfxMxDM5B?_x%`G}Ha!4I!oL^tb=Qq^@ zWQf(Fy*H-gQ&yaT?a4gMHK31Y`up;8e|r?K6|*7j9%?NHNY&|VCQ{@fgo|qsCD-T& zfBfRoN-NRO=j-`S__0x`0U^w}8&Sm1!dX6L1wKxFQWs-(qJKYTgR%v2K3Gs1>4+Mt6h9eA#^$*Z!97Z8KMLKY+lj82}8%m z+AB;?w<;UzrGM-b-^P)JVk>~l%mx4EnTKJ}m3ZwoagJ6m%2y7*oMZLnjsw55hx2Oy zoxbyEh9b;RB5sK*`L|mCa5=&*E=A2t>_e!K1Ema~vKnU{k%|V(@8JNt@>jR%a+N~4 zos&64$X7{5`ESavc}#U$vK3Pry=jBYEDWHGfFRo;~|=o%249x0{WCwq!-o z&*BYiqS-I #include #include -#include #include #include #include diff --git a/view.h b/view.h index a3b61ed..b9ec0a1 100644 --- a/view.h +++ b/view.h @@ -28,6 +28,10 @@ struct cg_view { struct cg_tile *tile; struct wlr_scene_tree *scene_tree; + struct wl_listener destroy; + struct wl_listener unmap; + struct wl_listener map; + /* The view has a position in output coordinates. */ int ox, oy; diff --git a/workspace.c b/workspace.c index 1dff244..3f84c6f 100644 --- a/workspace.c +++ b/workspace.c @@ -107,9 +107,6 @@ workspace_free_tiles(struct cg_workspace *workspace) { workspace->focused_tile) { workspace->output->server->seat->cursor_tile = NULL; } - if(workspace->focused_tile == workspace->server->seat->cursor_tile) { - workspace->server->seat->cursor_tile = NULL; - } struct cg_tile *next = workspace->focused_tile->next; free(workspace->focused_tile); workspace->focused_tile = next; diff --git a/xdg_shell.c b/xdg_shell.c index afa3352..79f322f 100644 --- a/xdg_shell.c +++ b/xdg_shell.c @@ -23,12 +23,14 @@ static struct cg_view * popup_get_view(struct wlr_xdg_popup *popup) { while(true) { - if(popup->parent == NULL || - !wlr_surface_is_xdg_surface(popup->parent)) { + if(popup->parent == NULL) { return NULL; } struct wlr_xdg_surface *xdg_surface = - wlr_xdg_surface_from_wlr_surface(popup->parent); + wlr_xdg_surface_try_from_wlr_surface(popup->parent); + if(xdg_surface == NULL) { + return NULL; + } switch(xdg_surface->role) { case WLR_XDG_SURFACE_ROLE_TOPLEVEL: return xdg_surface->data; @@ -244,9 +246,10 @@ handle_xdg_shell_surface_new(struct wl_listener *listener, void *data) { xdg_shell_view->xdg_surface = xdg_surface; xdg_shell_view->map.notify = handle_xdg_shell_surface_map; - wl_signal_add(&xdg_surface->events.map, &xdg_shell_view->map); + wl_signal_add(&xdg_surface->surface->events.map, &xdg_shell_view->map); xdg_shell_view->unmap.notify = handle_xdg_shell_surface_unmap; - wl_signal_add(&xdg_surface->events.unmap, &xdg_shell_view->unmap); + wl_signal_add(&xdg_surface->surface->events.unmap, + &xdg_shell_view->unmap); xdg_shell_view->destroy.notify = handle_xdg_shell_surface_destroy; wl_signal_add(&xdg_surface->events.destroy, &xdg_shell_view->destroy); xdg_shell_view->request_fullscreen.notify = @@ -265,7 +268,10 @@ handle_xdg_shell_surface_new(struct wl_listener *listener, void *data) { struct wlr_scene_tree *parent_scene_tree = NULL; struct wlr_xdg_surface *parent = - wlr_xdg_surface_from_wlr_surface(popup->parent); + wlr_xdg_surface_try_from_wlr_surface(popup->parent); + if(parent == NULL) { + return; + } switch(parent->role) { case WLR_XDG_SURFACE_ROLE_TOPLEVEL:; parent_scene_tree = view->scene_tree; diff --git a/xwayland.c b/xwayland.c index ece9e5a..21cc2ba 100644 --- a/xwayland.c +++ b/xwayland.c @@ -6,7 +6,6 @@ #include #include #include -#include #include #include #include @@ -42,8 +41,12 @@ xwayland_view_should_manage(const struct cg_view *view) { static pid_t get_pid(const struct cg_view *view) { struct wlr_xwayland_surface *surf = - wlr_xwayland_surface_from_wlr_surface(view->wlr_surface); - return surf->pid; + wlr_xwayland_surface_try_from_wlr_surface(view->wlr_surface); + if(surf == NULL) { + return -1; + } else { + return surf->pid; + } } static char * @@ -154,8 +157,6 @@ handle_xwayland_surface_destroy(struct wl_listener *listener, void *_data) { wl_container_of(listener, xwayland_view, destroy); struct cg_view *view = &xwayland_view->view; - wl_list_remove(&xwayland_view->map.link); - wl_list_remove(&xwayland_view->unmap.link); wl_list_remove(&xwayland_view->destroy.link); wl_list_remove(&xwayland_view->request_fullscreen.link); xwayland_view->xwayland_surface = NULL; @@ -173,6 +174,25 @@ static const struct cg_view_impl xwayland_view_impl = { .destroy = destroy, }; +static void +handle_xwayland_surface_associate(struct wl_listener *listener, void *data) { + struct cg_xwayland_view *xwayland_view = + wl_container_of(listener, xwayland_view, associate); + struct wlr_xwayland_surface *xsurface = xwayland_view->xwayland_surface; + wl_signal_add(&xsurface->surface->events.unmap, &xwayland_view->unmap); + xwayland_view->unmap.notify = handle_xwayland_surface_unmap; + wl_signal_add(&xsurface->surface->events.map, &xwayland_view->map); + xwayland_view->map.notify = handle_xwayland_surface_map; +} + +static void +handle_xwayland_surface_dissociate(struct wl_listener *listener, void *data) { + struct cg_xwayland_view *xwayland_view = + wl_container_of(listener, xwayland_view, dissociate); + wl_list_remove(&xwayland_view->map.link); + wl_list_remove(&xwayland_view->unmap.link); +} + void handle_xwayland_surface_new(struct wl_listener *listener, void *data) { struct cg_server *server = @@ -190,10 +210,12 @@ handle_xwayland_surface_new(struct wl_listener *listener, void *data) { server); xwayland_view->xwayland_surface = xwayland_surface; - xwayland_view->map.notify = handle_xwayland_surface_map; - wl_signal_add(&xwayland_surface->events.map, &xwayland_view->map); - xwayland_view->unmap.notify = handle_xwayland_surface_unmap; - wl_signal_add(&xwayland_surface->events.unmap, &xwayland_view->unmap); + xwayland_view->associate.notify = handle_xwayland_surface_associate; + wl_signal_add(&xwayland_surface->events.associate, + &xwayland_view->associate); + xwayland_view->dissociate.notify = handle_xwayland_surface_dissociate; + wl_signal_add(&xwayland_surface->events.dissociate, + &xwayland_view->dissociate); xwayland_view->destroy.notify = handle_xwayland_surface_destroy; wl_signal_add(&xwayland_surface->events.destroy, &xwayland_view->destroy); xwayland_view->request_fullscreen.notify = diff --git a/xwayland.h b/xwayland.h index 71a0b7a..79c265a 100644 --- a/xwayland.h +++ b/xwayland.h @@ -13,6 +13,8 @@ struct cg_xwayland_view { struct wl_listener destroy; struct wl_listener unmap; struct wl_listener map; + struct wl_listener associate; + struct wl_listener dissociate; struct wl_listener request_fullscreen; }; From 5dbefccb59d93d3b9683fb243458674a9267da56 Mon Sep 17 00:00:00 2001 From: project-repo Date: Tue, 5 Dec 2023 14:42:22 +0100 Subject: [PATCH 2/2] Release 2.2.3 - Fix positioning of outputs (#66) - Fix version specification of wlroots (#65) - Add version check to prevent #65 in the future --- Bugs.md | 17 +++++++++++++++ Hashes.md | 20 ++++++++++++++++++ README.md | 2 +- man/cagebreak-config.5.md | 2 +- man/cagebreak-socket.7.md | 2 +- man/cagebreak.1.md | 2 +- meson.build | 6 +++--- output.c | 11 +++++++--- release-non-auto-checks/Bugs.md | 4 ++-- release-non-auto-checks/FAQ.md | 4 ++-- release-non-auto-checks/SECURITY.md | 4 ++-- release-non-auto-checks/WLR_XDG_VERSION | 4 ++-- .../acknowledge-contributors | 4 ++-- release-non-auto-checks/changelog-major-minor | 4 ++-- release-non-auto-checks/internal-wiki | 4 ++-- release-non-auto-checks/release-note | 4 ++-- .../reproducibility-checked | 4 ++-- .../security-to-man-page-info-transfer | 4 ++-- release-non-auto-checks/version-restrictions | 2 ++ signatures/2.2.2-cagebreak-config.5.sig | Bin 0 -> 566 bytes signatures/2.2.2-cagebreak-socket.7.sig | Bin 0 -> 566 bytes signatures/2.2.2-cagebreak.1.sig | Bin 0 -> 566 bytes signatures/2.2.2-cagebreak.sig | Bin 0 -> 566 bytes signatures/cagebreak-config.5.sig | Bin 566 -> 566 bytes signatures/cagebreak-socket.7.sig | Bin 566 -> 566 bytes signatures/cagebreak.1.sig | Bin 566 -> 566 bytes signatures/cagebreak.sig | Bin 566 -> 566 bytes 27 files changed, 74 insertions(+), 30 deletions(-) create mode 100644 release-non-auto-checks/version-restrictions create mode 100644 signatures/2.2.2-cagebreak-config.5.sig create mode 100644 signatures/2.2.2-cagebreak-socket.7.sig create mode 100644 signatures/2.2.2-cagebreak.1.sig create mode 100644 signatures/2.2.2-cagebreak.sig diff --git a/Bugs.md b/Bugs.md index ee38c63..be04464 100644 --- a/Bugs.md +++ b/Bugs.md @@ -1235,3 +1235,20 @@ configuration was a NoOp. Starting with version 2.2.1, the calibration matrix can be set as documented. Thanks to Oliver Friedmann for providing a pull request. + +## Issue 66 + + * github issue number: #65 + * Fixed 2.2.3 + +In Cagebreak 2.2.2 the compatible wlroots versions were wrongly specified. +To stop this from reoccurring, we have added a check to our release checks. + +## Issue 67 + + * github issue number: #66 + * Fixed 2.2.3 + +In Cagebreak 2.2.2 dual monitors were mirrored instead of extended, changing +established behaviour. + diff --git a/Hashes.md b/Hashes.md index ace89e4..867692b 100644 --- a/Hashes.md +++ b/Hashes.md @@ -1,5 +1,25 @@ # Hashes +2.2.3 cagebreak + + * sha 256: 265a9d09622272ca6ea79ddcdbdc6003704106814eb05a2b7547a77a982263de + * sha 512: 757f837a7e6ddd71fed88c4e1aab5cab9d4d07e8b76f280eed9afa35a2eaee23c0553299fe49a0139c754179d0df68c1303725f1f909921d078516e14ba3f21f + +2.2.3 cagebreak.1 + + * sha 256: 275698641476efa40fc1b33a8025e6dbba3ec931fbaf0a627c0748dad987ed4d + * sha 512: 617891ded06657e31daefee84a03191ad6e03892118f1790a5ebaa6e847c4d18d4b6849edc00841bd68abc9e0e0a111153efe102db02ce3d408c903b0d045927 + +2.2.3 cagebreak-config.5 + + * sha 256: 5967e9131d1ee16ffa046a732911c902e41f2e18f3170d11a47b9be596b4978a + * sha 512: 6d3c5fbb2b95a75d7c5a8ed8b5922cfcc4135857b389652572c5d9c211c6da9cf8ef0b5dc0e8eaa540c6b1c2dd215f512df2ef49ce80c34e8e5ad170bfb7134e + +2.2.3 cagebreak-socket.7 + + * sha 256: cb1bde8a6fb2a1fa2b7b8db7fdef9b933cd471ca604e15d1dd9133859fa6eea3 + * sha 512: 1d99672cb7ac7323790d47986d206bf8c392698db0cd52978963deb6e85118c6822e2d45c7fa66e8636e95214f8893d963a3157ca24239d2fd2d78b1e26f11e7 + 2.2.2 cagebreak * sha 256: 98e0dfe870a7242fdf7c6fb1a5c520cfe7d1154b3f139560da6cb86b2430b2a0 diff --git a/README.md b/README.md index f2fd64d..1ca4ce5 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Cagebreak: A Wayland Tiling Compositor -[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/6532/badge)](https://bestpractices.coreinfrastructure.org/projects/6532) [![Packaging status](https://repology.org/badge/tiny-repos/cagebreak.svg)](https://repology.org/project/cagebreak/versions) [![AUR package](https://repology.org/badge/version-for-repo/aur/cagebreak.svg?minversion=2.2.2)](https://repology.org/project/cagebreak/versions) +[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/6532/badge)](https://bestpractices.coreinfrastructure.org/projects/6532) [![Packaging status](https://repology.org/badge/tiny-repos/cagebreak.svg)](https://repology.org/project/cagebreak/versions) [![AUR package](https://repology.org/badge/version-for-repo/aur/cagebreak.svg?minversion=2.2.3)](https://repology.org/project/cagebreak/versions) ## Quick Introduction diff --git a/man/cagebreak-config.5.md b/man/cagebreak-config.5.md index c04c757..d5b4969 100644 --- a/man/cagebreak-config.5.md +++ b/man/cagebreak-config.5.md @@ -1,4 +1,4 @@ -cagebreak-config(5) "Version 2.2.2" "Cagebreak Manual" +cagebreak-config(5) "Version 2.2.3" "Cagebreak Manual" # NAME diff --git a/man/cagebreak-socket.7.md b/man/cagebreak-socket.7.md index d61e498..19365d6 100644 --- a/man/cagebreak-socket.7.md +++ b/man/cagebreak-socket.7.md @@ -1,4 +1,4 @@ -cagebreak-socket(7) "Version 2.2.2" "Cagebreak Manual" +cagebreak-socket(7) "Version 2.2.3" "Cagebreak Manual" # NAME diff --git a/man/cagebreak.1.md b/man/cagebreak.1.md index 7e0c421..bdd469f 100644 --- a/man/cagebreak.1.md +++ b/man/cagebreak.1.md @@ -1,4 +1,4 @@ -cagebreak(1) "Version 2.2.2" "Cagebreak Manual" +cagebreak(1) "Version 2.2.3" "Cagebreak Manual" # NAME diff --git a/meson.build b/meson.build index e28557e..aeb3346 100644 --- a/meson.build +++ b/meson.build @@ -3,7 +3,7 @@ project( 'cagebreak', 'c', -version : '2.2.2', +version : '2.2.3', license : 'MIT', default_options : ['c_std=c11', 'warning_level=3'] ) @@ -55,7 +55,7 @@ if is_freebsd ) endif -wlroots = dependency('wlroots', version: ['>=0.16.1', '< 0.17.1']) +wlroots = dependency('wlroots', version: ['>=0.17.0', '< 0.18.0']) wayland_protos = dependency('wayland-protocols', version: '>=1.14') wayland_server = dependency('wayland-server') wayland_cursor = dependency('wayland-cursor') @@ -260,7 +260,7 @@ install_data('LICENSE', install_dir : '/usr/share/licenses/' + meson.project_nam if get_option('man-pages') scdoc = find_program('scdoc') - secssinceepoch = 1701680868 + secssinceepoch = 1701768836 shcommand = 'export SOURCE_DATE_EPOCH=' + secssinceepoch.to_string() + ' ; @0@ < @INPUT@'.format(scdoc.path()) sh = find_program('sh') mandir1 = join_paths(get_option('mandir'), 'man1') diff --git a/output.c b/output.c index d4fef70..0a482f0 100644 --- a/output.c +++ b/output.c @@ -282,15 +282,20 @@ output_apply_config(struct cg_server *server, struct cg_output *output, wlr_output_commit(wlr_output); return; } - wlr_output_layout_add(server->output_layout, wlr_output, config->pos.x, - config->pos.y); + struct wlr_output_layout_output *lo = wlr_output_layout_add( + server->output_layout, wlr_output, config->pos.x, config->pos.y); + wlr_scene_output_layout_add_output(server->scene_output_layout, lo, + output->scene_output); /* Since the size of the output may have changed, we * reinitialize all workspaces with a fullscreen layout */ for(unsigned int i = 0; i < output->server->nws; ++i) { output_make_workspace_fullscreen(output, i); } } else { - wlr_output_layout_add_auto(server->output_layout, wlr_output); + struct wlr_output_layout_output *lo = + wlr_output_layout_add_auto(server->output_layout, wlr_output); + wlr_scene_output_layout_add_output(server->scene_output_layout, lo, + output->scene_output); struct wlr_output_mode *preferred_mode = wlr_output_preferred_mode(wlr_output); diff --git a/release-non-auto-checks/Bugs.md b/release-non-auto-checks/Bugs.md index 9388d0a..16e03cd 100644 --- a/release-non-auto-checks/Bugs.md +++ b/release-non-auto-checks/Bugs.md @@ -1,2 +1,2 @@ -2.2.2 -2023-12-04 +2.2.3 +2023-12-05 diff --git a/release-non-auto-checks/FAQ.md b/release-non-auto-checks/FAQ.md index 9388d0a..16e03cd 100644 --- a/release-non-auto-checks/FAQ.md +++ b/release-non-auto-checks/FAQ.md @@ -1,2 +1,2 @@ -2.2.2 -2023-12-04 +2.2.3 +2023-12-05 diff --git a/release-non-auto-checks/SECURITY.md b/release-non-auto-checks/SECURITY.md index 9388d0a..16e03cd 100644 --- a/release-non-auto-checks/SECURITY.md +++ b/release-non-auto-checks/SECURITY.md @@ -1,2 +1,2 @@ -2.2.2 -2023-12-04 +2.2.3 +2023-12-05 diff --git a/release-non-auto-checks/WLR_XDG_VERSION b/release-non-auto-checks/WLR_XDG_VERSION index 9388d0a..16e03cd 100644 --- a/release-non-auto-checks/WLR_XDG_VERSION +++ b/release-non-auto-checks/WLR_XDG_VERSION @@ -1,2 +1,2 @@ -2.2.2 -2023-12-04 +2.2.3 +2023-12-05 diff --git a/release-non-auto-checks/acknowledge-contributors b/release-non-auto-checks/acknowledge-contributors index 9388d0a..16e03cd 100644 --- a/release-non-auto-checks/acknowledge-contributors +++ b/release-non-auto-checks/acknowledge-contributors @@ -1,2 +1,2 @@ -2.2.2 -2023-12-04 +2.2.3 +2023-12-05 diff --git a/release-non-auto-checks/changelog-major-minor b/release-non-auto-checks/changelog-major-minor index 9388d0a..16e03cd 100644 --- a/release-non-auto-checks/changelog-major-minor +++ b/release-non-auto-checks/changelog-major-minor @@ -1,2 +1,2 @@ -2.2.2 -2023-12-04 +2.2.3 +2023-12-05 diff --git a/release-non-auto-checks/internal-wiki b/release-non-auto-checks/internal-wiki index 9388d0a..16e03cd 100644 --- a/release-non-auto-checks/internal-wiki +++ b/release-non-auto-checks/internal-wiki @@ -1,2 +1,2 @@ -2.2.2 -2023-12-04 +2.2.3 +2023-12-05 diff --git a/release-non-auto-checks/release-note b/release-non-auto-checks/release-note index 9388d0a..16e03cd 100644 --- a/release-non-auto-checks/release-note +++ b/release-non-auto-checks/release-note @@ -1,2 +1,2 @@ -2.2.2 -2023-12-04 +2.2.3 +2023-12-05 diff --git a/release-non-auto-checks/reproducibility-checked b/release-non-auto-checks/reproducibility-checked index 9388d0a..16e03cd 100644 --- a/release-non-auto-checks/reproducibility-checked +++ b/release-non-auto-checks/reproducibility-checked @@ -1,2 +1,2 @@ -2.2.2 -2023-12-04 +2.2.3 +2023-12-05 diff --git a/release-non-auto-checks/security-to-man-page-info-transfer b/release-non-auto-checks/security-to-man-page-info-transfer index 9388d0a..16e03cd 100644 --- a/release-non-auto-checks/security-to-man-page-info-transfer +++ b/release-non-auto-checks/security-to-man-page-info-transfer @@ -1,2 +1,2 @@ -2.2.2 -2023-12-04 +2.2.3 +2023-12-05 diff --git a/release-non-auto-checks/version-restrictions b/release-non-auto-checks/version-restrictions new file mode 100644 index 0000000..16e03cd --- /dev/null +++ b/release-non-auto-checks/version-restrictions @@ -0,0 +1,2 @@ +2.2.3 +2023-12-05 diff --git a/signatures/2.2.2-cagebreak-config.5.sig b/signatures/2.2.2-cagebreak-config.5.sig new file mode 100644 index 0000000000000000000000000000000000000000..811fe372025fbcaaa8f497ef6bc25d9d37641be9 GIT binary patch literal 566 zcmV-60?GY}0y6{v0SEvc79j*qg2yatK3J!`Pxw_y3HVH?JGf^B0%dKm;s6Q>5J?I6 zOsG4!XJMfb0E>`au^^z8E*v#Fd9jxSr%FdRbeic+={rm$M))f-=$6&xrq{OVP9ncaEXyy zAm(BmYFS|7U3ot(_njmrb6^i@efjvv!bFfE-9V|jzLe+S=)^oS4@KmC#38hfayR0W z7!ulWP+;}9dcB4!eG$@c=vPpaGFbKUT$6hwnvgm$1X@PtW<=F$cV4`7SXig}9!kOl>)to8|D|3hUYuaG}sS$0ZnSwXn6d*BTy zNhX!8r1Xn0UCC63EYJn)c@$O@3Eo1c4M=g*v}SP-Zy8o1Y~pyPt9*?qGHqQ&YFTHU zb(5g}0m34BaiEsSnvX)&tDK(M=asNgq$2vc++CFyDvs;ZC}Hhw+rIJL2{(}zT%?eQDqpytUf&f4k*err?qLMkuyxyq~Yv# z`mJik@q@E{4%MtIWr%0~yEg=q!rA=>aXGR~n77M0^g0bM1qdG$2fU#ftYD<&!x7l4 zTSBMS)5zVv&&j&j)Skqst%&j>rE}pzL4_pca(rz9Vy0q*oElM~72F{8LF1&V{Li0{{R3 literal 0 HcmV?d00001 diff --git a/signatures/2.2.2-cagebreak-socket.7.sig b/signatures/2.2.2-cagebreak-socket.7.sig new file mode 100644 index 0000000000000000000000000000000000000000..e46522fc40240c6f9b09db2bf27cfdd64bf76e96 GIT binary patch literal 566 zcmV-60?GY}0y6{v0SEvc79j*qg2yatK3J!`Pxw_y3HVH?JGf^B0%dKm;s6Q>5J?I6 zOsG4!XX%O%0LhxdmqOQ#5c5z3wXCA2KZlfDm3vSS^*n!C3;8>HyfTMWaHJiNq>O-M z!_7U_dB&JENatoUVTW!`TY%q8Uy9QuqoQ8p5eC?%2NhHp))z-t55WX7Cr>E?I}sDZ zlY5I6_9_-Ev{PoIb(2T0QQA9? z3u67W|3Pd}fK>dfuQ4h8{-iQGo*$t{0u0{UFgf%A4!l9rH>ARW27GtA3hL>D`AdT~ zeNf~Q+eU>-5Pp}@Z3~eMNv}-71@`j&N+Kd&SAj6r3e%T7)zjJYF_z^K;Va5)%hs8n EGW&xDb^rhX literal 0 HcmV?d00001 diff --git a/signatures/2.2.2-cagebreak.1.sig b/signatures/2.2.2-cagebreak.1.sig new file mode 100644 index 0000000000000000000000000000000000000000..36b2c99c6362034807b3beb0c00a4aa236f3e13e GIT binary patch literal 566 zcmV-60?GY}0y6{v0SEvc79j*qg2yatK3J!`Pxw_y3HVH?JGf^B0%dKm;s6Q>5J?I6 zOsG4!XLSA$0H~8K$4S51D7#=L&$@HYeL^A-m#)@d(K;Fs##`LxdqzbB9uTZji zPb2qRTpo|xFBiRf@{*5~n_wlc^jwkJC8!)Uh9iQ>pCBxv6ph^agn)VAE>uBdeTNMl;?UQ-T-}k#R?8&lXydHg7WWoki+Z5NaB7b$ZB_{Z;ofML4cmLAlI#oFf!fG-m6bNqqo_ zl^FFH-epxgzFyXs!tXEo*?IS*Hgh&1Hi><4ys%p+`6EInLc%Wz*=!h!Q)fT0T5J?I6 zOsG4!X9fQd0J=kb54SFRiT$(tSOAYXE>H=2ikF(>)G421sRWpML`=yU9(L`jSXq;m zCDv57c`KO24HQJXhzxF<`#$z$DTV35Oq;`Jj=}=CS}bUEf-6@g1=BO?J&)|%??QnL z5mSq6SI5y?1|#=I-K+`evSYYr;K?%YG+aWFn8)w6$%FgEi4&SRj*c%Arwy5VhglDg z$0qogrcwv>nmg&ojpPahuTcR%)p2=D;L$qL;?LhumOO_8VmVjV7zJ4_&ROIFJbYMm z2nxv_y4xno_B!bwcYoyZOhZM|Y;7r}S zjeVi;AD74nY(a4w_GZ6K%ERqS;&h0pUp}CMb21sc@@Z~-r|$cL+Exhe5i+X!DVJfZPs|pz=eeSP;8IU{hLQyb${%P Ev8itpxBvhE literal 0 HcmV?d00001 diff --git a/signatures/cagebreak-config.5.sig b/signatures/cagebreak-config.5.sig index 811fe372025fbcaaa8f497ef6bc25d9d37641be9..6d7f6c16507165c9ac9b5646e45cb4cc3a89863b 100644 GIT binary patch delta 542 zcmV+(0^$9(1hxc_BY$rm&HxGt5J?I6OsG4!XG8W6|9R#;J{FE-UT8#I!Fi4#zi*ov z9Xy@$5_IOwHC)DCP)s(==UVe6N7@7-A^-dEBpXnVsr`4u3uKdL`06E&J>;c^ zGLT`#D);5PsU0#YBhuT9^r&UtpG(X0;-JsYjD3_^N;Ir-Z4`a^&NZPoP-LJkDQJ$o ztQ%ax0n<}on}0qm-E=?OPj+n3|IHg!ysgT4hzK_?Sq&d!Kgo1rnqfYJm8tUa_@E0X zGwBQWd8UZnmlLz7;_pf@-9yZ31Xv5g2Dp2_lGah%M#l3=wKveJy6lK`1$QE)a>i+V9|LMnm=&&EfQ)cl5iM@4?FK45J?I6OsG4!XJMfb0E>`au^^z8E*v#Fd9jxSr%FdR zbeic+={rm$M))f-=$6&xrq{OVP9ncaEXyyAm(BmYFS|7U3ot(_kW!vCUam9YJK_m$ihUB zA>BZ!y1ta>;ON9WG7m-MeZ(QOj&e8RlNb`(a8O|Nw|c#XDt!^sZ|GN0lQLNK@?4X9 zB$|*qFa%mg=Vm`nwe+}gk0H4{rLhRe-BTiy3SQgtk#b{)mgdq13J+k5(29AB1ds*= zsI2x0VE;p9B!91vKVeyRN^Ds{xUzfT4Jb(_m93=oi!fcuREI3k1?+hgRul=|LZ%H! zanrPBaS(4ARw8WTc&4j-jVUs1T}5hHXPtGEp#A~EB6@M4mdKiqLe;CBp4sP>uu-HU z|NoqvdJctTM%Z-u+?<_%st?M*G9s33Z#qX)({*^$Vt=)}FGg%_U&ETW3*y2-a-{mc z;-ceGWf;P&K0N^rD9SXawP~c0GfdT_;p}$$t!l;bgR^}O)vPRKh-d!0Hw2Qx+5HA_ zIkHTcx63*7It?!c2p<#&yrCJaV5H^45!kC+LZ{Z#$lbor$-3Cop2VoFi1H$(bKyck gg(T&2d>3s3Vy0q*oElM~72F{8LF1&V{L2q+@7Wxi}6Hz zo4QkhM=B3~=^{TsW09d;k=38L|LYbj1!=3-gW5sDChrA{ofASO33n6-ALc z``%qt;VT?b7m1kQtJ1;6F#huuPxn_#&+lo-{`EPe&XpXzX=C8`hoUcR6|+`!a|PN> zciV6IEV}yy0L@;GyI|86s8Dz`uciE$nd4J_no9tZ8B}nzsNyn-471wYEU68SG;1S3J5OeK%SL1K#C$M@LKZpTVt;c1ylX$o=)VKke_W<%YFJE| znZp2ZU7>pX<<~}N74ZYNtoct%N@|a#bq@LI-V}Ede@>@3<6^wVZZbir4 gMmn>Z>=$cw@HwBgkA;5J?I6OsG4!XX%O%0LhxdmqOQ#5c5z3wXCA2KZlfD zm3vSS^*n!C3;8>HyfTMWaHJiNq>O-M!_7U_dB&JENatoUVTW!`TY%q8Uy9QuqoQ8p z5eC?%2NhHp))z-t55WX7Cr>E?I}sDZlY5I6_9_-Ev{PX_4ygoijy~WPloTWk4O8Le zo$n*-!=4*T3f_d&OEN>8;wOc-DIw81KR`hTDAX987+@nP@>g13%Zzp14!xId9T>$* ztMF%GcN#uBFVi+VGZnjHqt#yHUuF3+J=vb1tu8Z}p??pwH6`1y`2_fCr3kYS+{tWg zl8M(nRl^~jgC%wbmCEIyWz#rylSi*n+B=U6V*RxLL2OWfRQ#;3F)982q%u05AE8GA z4Bp!?IrISzyg}19q{4v)e0RDE>gj{|OM^CjP~;NZMukccewWd03y};-uS~%O_VWEo gA|hT_ffq2=3e%T7)zjJYF_z^K;Va5)%hs8nGCKSJw*UYD diff --git a/signatures/cagebreak.1.sig b/signatures/cagebreak.1.sig index 36b2c99c6362034807b3beb0c00a4aa236f3e13e..14ac7ab7fd60b8337eaa18e060f7a24402925528 100644 GIT binary patch delta 542 zcmV+(0^$9(1hxc_BY$rm%>W7s5J?I6OsG4!XL#rj{T+Al-oPBN+x!MHM~QdkHzBr| zCl+us_ro^WM3!tDhfsBw7Pq%1Z{ zRD62N4N=i9+{y)3(Ru$V?xv1!7mfQcC$)a&YY~(X8+6uKa(^@a*FaJm=k2d5e#8K? zBk6`gZwAL|l3suRPlWha7l0#wTP{f8V%IzhA|Hj?QK3mn&r+$yiSr?mJIkC)*B8*l z^?kvE-xrH4amP7nO~E_Tu1Dh%2Xwp3baa*}C6f&Akz5Rxnu1dnOJ4}*c_2nu#Urv8 z0_Wt1JoS%$CVv2)?ob#t9F1I9CwmObFHhlK0B=@Gy2fFG=nutuJn!u0rEjd%hRr0L zDV&tKE^s7L=meU@45+$n^2=q2Z zKGSc-f6OXa(-RiFI5$3$B4FvEw0qnbznO;dx_atDeSg03=IHb!5N(c}OK?nzC0we5 ze-Mb7on$b#S2mp2$R?^F3`0olF1~xBqx2rE_C%c_i$VvgIG;0l7$1L9gu*LB)Yn5= zgL)0@BBh-*cY6YeN2O~J+*Fv<3Q0v*FLa<8B3v8CS{4i{UeNFo0`+wHghwX}jEorq g{nwU}ofqGe=tDjJ_J`^&YaK-^$7k{&2ct;QrwVKVasU7T delta 542 zcmV+(0^$9(1hxc_BY$nM;s6Q>5J?I6OsG4!XLSA$0H~8K$4S51D7#=L&$@HYeL^A- zm#)@d(K;Fs##`LxdqzbB9uTZjiPb2qRTpo|xFBiRf@{*5~n_wlc^jwkJC8!)U zh9iQ>pCBxv6ph^QxYG8gg}d z$d>(8_cKK}u3163%y*n46jd~4>z+w{0Em?s^%&k|RXe_3)|bNXFZ$Ve_oOy+HX$~N zeQ~_7TPXP>LMKAPFA3Rf7>ZM8Kd@Zx1!K1T8=51AF&=8-?(k8|=EJiVF?YLGRHU}Mc3##Z*-{!b*WBZ}?8(nZozCMtk6kL)X*~bp gq}hT_G#3N4Gj~13RXcEo3$FSz)?Jh1$@?FoWvD9$QUCw| diff --git a/signatures/cagebreak.sig b/signatures/cagebreak.sig index ca4ae146f6b80b7f5a7a9a0bf899cdcdbf702f21..b06130553f46759a6b0c15d2ec5e4a7f3fe3714d 100644 GIT binary patch delta 542 zcmV+(0^$9(1hxc_BY$rm%>W7s5J?I6OsG4!XRMG9{S^4?G%^Y3m5el0Q_7oaILK}l zji>EKqg2qNLmPHp`AzALIN3h@;a~B)ymaY@9KZ9Z?6L?yxsZ1pU=68cL;~wowNV!k z(}NRXx`~nO6O%vds-sG3-$iS`TqsdTy69<hg$9cnnvIX5buFPT?}bec==AAn%a)WHBcL;2;Q62OBxqO(ho2hv)@zL66N; zf(fQUFNaz;Kj!_GB!V1(u^jHTIy*BgL2T918hT0bUVf*l#8WDb5s0L1(=6n|n&9EXz2OXhW(;d5tfbi<^( z!ohzPb!2@G7VUn&`)d4m4?A&lzlu`&pJa~C+7%PdLU&*W1~(ns z?No(pk1)m;|NP?m;@)x*!ANT243?wj$lPbRVIgrP!IDVo?z54G1ivR!s delta 542 zcmV+(0^$9(1hxc_BY$nM;s6Q>5J?I6OsG4!X9fQd0J=kb54SFRiT$(tSOAYXE>H=2 zikF(>)G421sRWpML`=yU9(L`jSXq;mCDv57c`KO24HQJXhzxF<`#$z$DTV35Oq;`J zj=}=CS}bUEf-6@g1=BO?J&)|%??QnL5mSq6SI5y?1|#=I-G8hJ>9S+EX5h&(?=)OO zk(kHtwaJ6~#EBD{IgXAm6Q>QCdxu#MkH;qXn5I$(^_n~B$BpC)1g}v6Kh<%0OyJQv z(&EqGP?kK017bN>)))m@F3wrx0z7HslK<06f z@e!GPBfM=8kAKn3Jjm&D7;g9fyIQZiZ!&8QJEK2nj@R(m8&@O9@Pm&&>h~r^VaV-Y zg0hTfc?au>I7}ph*rscw(%**^%w*t9-Mfu_q3|D<$OmjeaVleVSGJ5D&~xs03s^pv zAK)z+wviJkox~3qQd0Lmp-2mk;8