From 4eac0b40c3b531cebbab5e91baa9b858208d4023 Mon Sep 17 00:00:00 2001 From: outfoxxed Date: Wed, 28 Feb 2024 21:11:28 -0800 Subject: [PATCH] fix(wayland): fix ext screens resetting and causing protocol error Could not reproduce this personally but I am told this fixes it. --- src/wayland/session_lock/session_lock.cpp | 3 +++ src/wayland/wlr_layershell/window.cpp | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/wayland/session_lock/session_lock.cpp b/src/wayland/session_lock/session_lock.cpp index 601795c..ef1e9b1 100644 --- a/src/wayland/session_lock/session_lock.cpp +++ b/src/wayland/session_lock/session_lock.cpp @@ -68,7 +68,10 @@ bool LockWindowExtension::attach(QWindow* window, SessionLockManager* manager) { if (current != nullptr) { current->surface->setExtension(this); } else { + // Qt appears to be resetting the window's screen on creation on some systems. This works around it. + auto* screen = window->screen(); window->create(); + window->setScreen(screen); waylandWindow = dynamic_cast(window->handle()); if (waylandWindow == nullptr) { diff --git a/src/wayland/wlr_layershell/window.cpp b/src/wayland/wlr_layershell/window.cpp index 7c51aa9..b48ecff 100644 --- a/src/wayland/wlr_layershell/window.cpp +++ b/src/wayland/wlr_layershell/window.cpp @@ -54,7 +54,10 @@ bool LayershellWindowExtension::attach(QWindow* window) { } if (!hasSurface) { + // Qt appears to be resetting the window's screen on creation on some systems. This works around it. + auto* screen = window->screen(); window->create(); + window->setScreen(screen); auto* waylandWindow = dynamic_cast(window->handle()); if (waylandWindow == nullptr) {