wayland: check screen isPlaceholder and if wl_output is null

Fixes crashes on disconnected monitors
This commit is contained in:
Bryan Paradis 2026-02-18 07:36:21 -08:00 committed by outfoxxed
parent e7cd1e9982
commit 158db16b93
No known key found for this signature in database
GPG key ID: 4C88A185FB89301E
3 changed files with 4 additions and 3 deletions

View file

@ -46,6 +46,7 @@ set shell id.
- Fixed asynchronous loaders not working before window creation.
- Fixed memory leak in IPC handlers.
- Fixed ClippingRectangle related crashes.
- Fixed crashes when monitors are unplugged.
## Packaging Changes

View file

@ -28,7 +28,7 @@ QSWaylandSessionLockSurface::QSWaylandSessionLockSurface(QtWaylandClient::QWayla
wl_output* output = nullptr; // NOLINT (include)
auto* waylandScreen = dynamic_cast<QtWaylandClient::QWaylandScreen*>(qwindow->screen()->handle());
if (waylandScreen != nullptr) {
if (waylandScreen != nullptr && !waylandScreen->isPlaceholder() && waylandScreen->output()) {
output = waylandScreen->output();
} else {
qFatal() << "Session lock screen does not corrospond to a real screen. Force closing window";

View file

@ -143,11 +143,11 @@ LayerSurface::LayerSurface(LayerShellIntegration* shell, QtWaylandClient::QWayla
auto* waylandScreen =
dynamic_cast<QtWaylandClient::QWaylandScreen*>(qwindow->screen()->handle());
if (waylandScreen != nullptr) {
if (waylandScreen != nullptr && !waylandScreen->isPlaceholder() && waylandScreen->output()) {
output = waylandScreen->output();
} else {
qWarning()
<< "Layershell screen does not corrospond to a real screen. Letting the compositor pick.";
<< "Layershell screen does not correspond to a real screen. Letting the compositor pick.";
}
}