loise / rpms / kwin

Forked from rpms/kwin 2 months ago
Clone
Blob Blame History Raw
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