From f24dd6acc28393ba6f731be1360731c01a9a1ef0 Mon Sep 17 00:00:00 2001 From: Ahmad Samir Date: Fri, 16 Jul 2021 21:37:51 +0200 Subject: [PATCH] Fix crash when setting blur effect Basically to use QWidget::windowHandle() to get a QWindow*, we need to first set the Qt::WA_NativeWindow attribute on the QWidget. See: https://phabricator.kde.org/D23108 BUG: 439871 FIXED-IN: 21.12 (cherry picked from commit a6b2bd539162b39191e827566b656bd97266ffad) --- src/MainWindow.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index ed5d8cc3d..c67acf8b9 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -56,6 +56,8 @@ #include "terminalDisplay/TerminalDisplay.h" #include "widgets/ViewContainer.h" +#include + using namespace Konsole; MainWindow::MainWindow() : @@ -889,7 +891,15 @@ void MainWindow::setBlur(bool blur) #if KWINDOWSYSTEM_VERSION < QT_VERSION_CHECK(5,82,0) KWindowEffects::enableBlurBehind(winId(), blur); #else - KWindowEffects::enableBlurBehind(windowHandle(), blur); + // Set the WA_NativeWindow attribute to force the creation of the QWindow. + // Without this QWidget::windowHandle() returns 0. + // See https://phabricator.kde.org/D23108 + setAttribute(Qt::WA_NativeWindow); + if (QWindow *window = windowHandle()) { + KWindowEffects::enableBlurBehind(window, blur); + } else { + qCWarning(KonsoleDebug) << "Blur effect couldn't be enabled."; + } #endif } } -- GitLab