You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kwin/guard-against-non-existing-...

37 lines
1.4 KiB

From da26deaa5c843ef303ef9f1b9f0cd3d341c5c5f5 Mon Sep 17 00:00:00 2001
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
Date: Wed, 22 Feb 2023 21:35:26 +0200
Subject: [PATCH] backends/libinput: Fix crash upon receiving motion absolute
events
The input events can be processed when the workspace is not available,
e.g. during startup or shutdown, so add a corresponding guard.
As a long term plan, we need to decouple Workspace from low-level input
backend parts, but it will be a too invasive change for now.
BUG: 449317
BUG: 465456
---
src/backends/libinput/connection.cpp | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/backends/libinput/connection.cpp b/src/backends/libinput/connection.cpp
index f99771d9b1..db1a19b687 100644
--- a/src/backends/libinput/connection.cpp
+++ b/src/backends/libinput/connection.cpp
@@ -373,7 +373,9 @@ void Connection::processEvents()
}
case LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE: {
PointerEvent *pe = static_cast<PointerEvent *>(event.get());
- Q_EMIT pe->device()->pointerMotionAbsolute(pe->absolutePos(workspace()->geometry().size()), pe->time(), pe->device());
+ if (workspace()) {
+ Q_EMIT pe->device()->pointerMotionAbsolute(pe->absolutePos(workspace()->geometry().size()), pe->time(), pe->device());
+ }
break;
}
case LIBINPUT_EVENT_TOUCH_DOWN: {
--
GitLab