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
This commit is contained in:
parent
e1afef3d45
commit
68a2ec5d63
4 changed files with 10 additions and 12 deletions
|
@ -34,6 +34,7 @@ add_library(kwincompositing MODULE ${kwincomposing_SRC})
|
||||||
|
|
||||||
target_link_libraries(kwincompositing
|
target_link_libraries(kwincompositing
|
||||||
Qt5::Quick
|
Qt5::Quick
|
||||||
|
Qt5::QuickWidgets
|
||||||
Qt5::DBus
|
Qt5::DBus
|
||||||
Qt5::Widgets
|
Qt5::Widgets
|
||||||
KF5::CoreAddons
|
KF5::CoreAddons
|
||||||
|
@ -64,6 +65,7 @@ ecm_mark_as_test(effectModelTest)
|
||||||
|
|
||||||
target_link_libraries(effectModelTest
|
target_link_libraries(effectModelTest
|
||||||
Qt5::Quick
|
Qt5::Quick
|
||||||
|
Qt5::QuickWidgets
|
||||||
Qt5::DBus
|
Qt5::DBus
|
||||||
Qt5::Test
|
Qt5::Test
|
||||||
Qt5::Widgets
|
Qt5::Widgets
|
||||||
|
|
|
@ -229,16 +229,12 @@ KWinCompositingKCM::KWinCompositingKCM(QWidget* parent, const QVariantList& args
|
||||||
{
|
{
|
||||||
QVBoxLayout *vl = new QVBoxLayout(this);
|
QVBoxLayout *vl = new QVBoxLayout(this);
|
||||||
|
|
||||||
QWidget *w = QWidget::createWindowContainer(m_view.data(), this);
|
vl->addWidget(m_view.data());
|
||||||
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);
|
|
||||||
setLayout(vl);
|
setLayout(vl);
|
||||||
connect(m_view.data(), &KWin::Compositing::EffectView::changed, [this]{
|
connect(m_view.data(), &KWin::Compositing::EffectView::changed, [this]{
|
||||||
emit changed(true);
|
emit changed(true);
|
||||||
});
|
});
|
||||||
w->setFocusPolicy(Qt::StrongFocus);
|
m_view->setFocusPolicy(Qt::StrongFocus);
|
||||||
}
|
}
|
||||||
|
|
||||||
KWinCompositingKCM::~KWinCompositingKCM()
|
KWinCompositingKCM::~KWinCompositingKCM()
|
||||||
|
|
|
@ -581,8 +581,8 @@ void EffectFilterModel::defaults()
|
||||||
m_effectModel->defaults();
|
m_effectModel->defaults();
|
||||||
}
|
}
|
||||||
|
|
||||||
EffectView::EffectView(ViewType type, QWindow *parent)
|
EffectView::EffectView(ViewType type, QWidget *parent)
|
||||||
: QQuickView(parent)
|
: QQuickWidget(parent)
|
||||||
{
|
{
|
||||||
qRegisterMetaType<OpenGLPlatformInterfaceModel*>();
|
qRegisterMetaType<OpenGLPlatformInterfaceModel*>();
|
||||||
qmlRegisterType<EffectConfig>("org.kde.kwin.kwincompositing", 1, 0, "EffectConfig");
|
qmlRegisterType<EffectConfig>("org.kde.kwin.kwincompositing", 1, 0, "EffectConfig");
|
||||||
|
@ -608,7 +608,7 @@ void EffectView::init(ViewType type)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
QString mainFile = QStandardPaths::locate(QStandardPaths::GenericDataLocation, path, QStandardPaths::LocateFile);
|
QString mainFile = QStandardPaths::locate(QStandardPaths::GenericDataLocation, path, QStandardPaths::LocateFile);
|
||||||
setResizeMode(QQuickView::SizeRootObjectToView);
|
setResizeMode(QQuickWidget::SizeRootObjectToView);
|
||||||
setSource(QUrl(mainFile));
|
setSource(QUrl(mainFile));
|
||||||
rootObject()->setProperty("color",
|
rootObject()->setProperty("color",
|
||||||
KColorScheme(QPalette::Active, KColorScheme::Window, KSharedConfigPtr(0)).background(KColorScheme::NormalBackground).color());
|
KColorScheme(QPalette::Active, KColorScheme::Window, KSharedConfigPtr(0)).background(KColorScheme::NormalBackground).color());
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
#include <QAbstractItemModel>
|
#include <QAbstractItemModel>
|
||||||
#include <QHash>
|
#include <QHash>
|
||||||
#include <QList>
|
#include <QList>
|
||||||
#include <QQuickView>
|
#include <QQuickWidget>
|
||||||
#include <QSortFilterProxyModel>
|
#include <QSortFilterProxyModel>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <KPluginInfo>
|
#include <KPluginInfo>
|
||||||
|
@ -114,7 +114,7 @@ private:
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class EffectView : public QQuickView
|
class EffectView : public QQuickWidget
|
||||||
{
|
{
|
||||||
|
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
@ -124,7 +124,7 @@ public:
|
||||||
DesktopEffectsView,
|
DesktopEffectsView,
|
||||||
CompositingSettingsView
|
CompositingSettingsView
|
||||||
};
|
};
|
||||||
EffectView(ViewType type, QWindow *parent = 0);
|
EffectView(ViewType type, QWidget *parent = 0);
|
||||||
|
|
||||||
void save();
|
void save();
|
||||||
void load();
|
void load();
|
||||||
|
|
Loading…
Reference in a new issue