summaryrefslogtreecommitdiffstats
path: root/src/client/qwaylanddisplay.cpp
diff options
context:
space:
mode:
authorJohan Klokkhammer Helsing <johan.helsing@qt.io>2016-08-24 16:08:56 +0200
committerJani Heikkinen <jani.heikkinen@qt.io>2016-08-26 05:51:29 +0000
commit93c09bcafbc6f2accd11d34433dc475822ba7712 (patch)
treea6ddc0b07213e641b4358722ce61f4ad71de021e /src/client/qwaylanddisplay.cpp
parent2cc758045e322873ad58f675a70c8d8366b5c318 (diff)
Client: Fix keyboard focus logic and crash
The previous solution did not check for nullptr before dereferencing, which caused a crash. Furthermore, it checked the new ShellSurface's shellManagesActiveState before deciding whether to unfocus the old one. Task-number: QTBUG-55526 Change-Id: I410b6200a5b7b86806f70970730045a4a25f21db Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
Diffstat (limited to 'src/client/qwaylanddisplay.cpp')
-rw-r--r--src/client/qwaylanddisplay.cpp17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp
index 7225d24af..ae28eb779 100644
--- a/src/client/qwaylanddisplay.cpp
+++ b/src/client/qwaylanddisplay.cpp
@@ -399,13 +399,16 @@ void QWaylandDisplay::handleKeyboardFocusChanged(QWaylandInputDevice *inputDevic
{
QWaylandWindow *keyboardFocus = inputDevice->keyboardFocus();
- if (!keyboardFocus->shellSurface()->shellManagesActiveState() && mLastKeyboardFocus != keyboardFocus) {
- if (keyboardFocus)
- handleWindowActivated(keyboardFocus);
- if (mLastKeyboardFocus)
- handleWindowDeactivated(mLastKeyboardFocus);
- }
- mLastKeyboardFocus = inputDevice->keyboardFocus();
+ if (mLastKeyboardFocus == keyboardFocus)
+ return;
+
+ if (keyboardFocus && !keyboardFocus->shellManagesActiveState())
+ handleWindowActivated(keyboardFocus);
+
+ if (mLastKeyboardFocus && !mLastKeyboardFocus->shellManagesActiveState())
+ handleWindowDeactivated(mLastKeyboardFocus);
+
+ mLastKeyboardFocus = keyboardFocus;
}
void QWaylandDisplay::handleWaylandSync()