From 68a2ec5d63652ddb7afbc646270c73e25a4a70f9 Mon Sep 17 00:00:00 2001 From: Fabian Vogt Date: Mon, 5 Mar 2018 20:01:23 +0100 Subject: [PATCH] Convert EffectView to a QQuickWidget Summary: The Qt Wayland support for subsurfaces is broken in many ways, producing graphical glitches and crashes: https://bugreports.qt.io/browse/QTBUG-54888 for instance. Using a QQuickWidget instead of a QQuickView avoids those issues, with the additional benefit of a nicer API. Test Plan: Opened the KCM with kcmshell and systemsettings, no subsurfaces used anymore. Reviewers: #plasma, graesslin, davidedmundson Reviewed By: #plasma, graesslin, davidedmundson Subscribers: kwin, plasma-devel, #kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D11066 --- kcmkwin/kwincompositing/CMakeLists.txt | 2 ++ kcmkwin/kwincompositing/main.cpp | 8 ++------ kcmkwin/kwincompositing/model.cpp | 6 +++--- kcmkwin/kwincompositing/model.h | 6 +++--- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/kcmkwin/kwincompositing/CMakeLists.txt b/kcmkwin/kwincompositing/CMakeLists.txt index 350ef85ded..c036dc5622 100644 --- a/kcmkwin/kwincompositing/CMakeLists.txt +++ b/kcmkwin/kwincompositing/CMakeLists.txt @@ -34,6 +34,7 @@ add_library(kwincompositing MODULE ${kwincomposing_SRC}) target_link_libraries(kwincompositing Qt5::Quick + Qt5::QuickWidgets Qt5::DBus Qt5::Widgets KF5::CoreAddons @@ -64,6 +65,7 @@ ecm_mark_as_test(effectModelTest) target_link_libraries(effectModelTest Qt5::Quick + Qt5::QuickWidgets Qt5::DBus Qt5::Test Qt5::Widgets diff --git a/kcmkwin/kwincompositing/main.cpp b/kcmkwin/kwincompositing/main.cpp index 5f1b7d7443..a7a28fc127 100644 --- a/kcmkwin/kwincompositing/main.cpp +++ b/kcmkwin/kwincompositing/main.cpp @@ -229,16 +229,12 @@ KWinCompositingKCM::KWinCompositingKCM(QWidget* parent, const QVariantList& args { QVBoxLayout *vl = new QVBoxLayout(this); - QWidget *w = QWidget::createWindowContainer(m_view.data(), this); - connect(m_view.data(), &QWindow::minimumWidthChanged, w, &QWidget::setMinimumWidth); - connect(m_view.data(), &QWindow::minimumHeightChanged, w, &QWidget::setMinimumHeight); - w->setMinimumSize(m_view->initialSize()); - vl->addWidget(w); + vl->addWidget(m_view.data()); setLayout(vl); connect(m_view.data(), &KWin::Compositing::EffectView::changed, [this]{ emit changed(true); }); - w->setFocusPolicy(Qt::StrongFocus); + m_view->setFocusPolicy(Qt::StrongFocus); } KWinCompositingKCM::~KWinCompositingKCM() diff --git a/kcmkwin/kwincompositing/model.cpp b/kcmkwin/kwincompositing/model.cpp index 1caf693199..2152dd2523 100644 --- a/kcmkwin/kwincompositing/model.cpp +++ b/kcmkwin/kwincompositing/model.cpp @@ -581,8 +581,8 @@ void EffectFilterModel::defaults() m_effectModel->defaults(); } -EffectView::EffectView(ViewType type, QWindow *parent) - : QQuickView(parent) +EffectView::EffectView(ViewType type, QWidget *parent) + : QQuickWidget(parent) { qRegisterMetaType(); qmlRegisterType("org.kde.kwin.kwincompositing", 1, 0, "EffectConfig"); @@ -608,7 +608,7 @@ void EffectView::init(ViewType type) break; } QString mainFile = QStandardPaths::locate(QStandardPaths::GenericDataLocation, path, QStandardPaths::LocateFile); - setResizeMode(QQuickView::SizeRootObjectToView); + setResizeMode(QQuickWidget::SizeRootObjectToView); setSource(QUrl(mainFile)); rootObject()->setProperty("color", KColorScheme(QPalette::Active, KColorScheme::Window, KSharedConfigPtr(0)).background(KColorScheme::NormalBackground).color()); diff --git a/kcmkwin/kwincompositing/model.h b/kcmkwin/kwincompositing/model.h index 5db803195d..8adde91dca 100644 --- a/kcmkwin/kwincompositing/model.h +++ b/kcmkwin/kwincompositing/model.h @@ -27,7 +27,7 @@ #include #include #include -#include +#include #include #include #include @@ -114,7 +114,7 @@ private: }; -class EffectView : public QQuickView +class EffectView : public QQuickWidget { Q_OBJECT @@ -124,7 +124,7 @@ public: DesktopEffectsView, CompositingSettingsView }; - EffectView(ViewType type, QWindow *parent = 0); + EffectView(ViewType type, QWidget *parent = 0); void save(); void load();