diff --git a/clients/aurorae/src/CMakeLists.txt b/clients/aurorae/src/CMakeLists.txt index ea2ed64cca..7b1e48cb27 100644 --- a/clients/aurorae/src/CMakeLists.txt +++ b/clients/aurorae/src/CMakeLists.txt @@ -17,8 +17,8 @@ kde4_add_plugin(kwin3_aurorae ${kwin3_aurorae_PART_SRCS}) target_link_libraries(kwin3_aurorae KF5::KConfigCore KF5::KService - KF5::Plasma - Qt5::Declarative + Qt5::Quick + Qt5::Widgets kdecorations ) diff --git a/clients/aurorae/src/aurorae.cpp b/clients/aurorae/src/aurorae.cpp index 30be4441a1..24cb7714e7 100644 --- a/clients/aurorae/src/aurorae.cpp +++ b/clients/aurorae/src/aurorae.cpp @@ -21,18 +21,18 @@ along with this program. If not, see . #include #include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include #include +#include #include #include #include #include -#include namespace Aurorae { @@ -40,8 +40,8 @@ namespace Aurorae AuroraeFactory::AuroraeFactory(QObject *parent) : KDecorationFactory(parent) , m_theme(new AuroraeTheme(this)) - , m_engine(new QDeclarativeEngine(this)) - , m_component(new QDeclarativeComponent(m_engine, this)) + , m_engine(new QQmlEngine(this)) + , m_component(new QQmlComponent(m_engine, this)) , m_engineType(AuroraeEngine) { init(); @@ -217,11 +217,11 @@ QList< KDecorationDefines::BorderSize > AuroraeFactory::borderSizes() const BorderVeryHuge << BorderOversized; } -QDeclarativeItem *AuroraeFactory::createQmlDecoration(Aurorae::AuroraeClient *client) +QQuickItem *AuroraeFactory::createQmlDecoration(Aurorae::AuroraeClient *client) { - QDeclarativeContext *context = new QDeclarativeContext(m_engine->rootContext(), this); + QQmlContext *context = new QQmlContext(m_engine->rootContext(), this); context->setContextProperty(QStringLiteral("decoration"), client); - return qobject_cast< QDeclarativeItem* >(m_component->create(context)); + return qobject_cast< QQuickItem* >(m_component->create(context)); } AuroraeFactory *AuroraeFactory::s_instance = NULL; @@ -232,8 +232,8 @@ AuroraeFactory *AuroraeFactory::s_instance = NULL; AuroraeClient::AuroraeClient(KDecorationBridge *bridge, KDecorationFactory *factory) : KDecoration(bridge, factory) , m_view(NULL) - , m_scene(new QGraphicsScene(this)) , m_item(AuroraeFactory::instance()->createQmlDecoration(this)) + , m_container(nullptr) { connect(AuroraeFactory::instance(), SIGNAL(buttonsChanged()), SIGNAL(buttonsChanged())); connect(AuroraeFactory::instance(), SIGNAL(configChanged()), SIGNAL(configChanged())); @@ -245,19 +245,10 @@ AuroraeClient::AuroraeClient(KDecorationBridge *bridge, KDecorationFactory *fact AuroraeClient::~AuroraeClient() { - if (m_item) { - m_item->setParent(NULL); - m_item->deleteLater(); - } - m_scene->setParent(NULL); - m_scene->deleteLater(); - m_view->setParent(NULL); - m_view->deleteLater(); } void AuroraeClient::init() { - m_scene->setItemIndexMethod(QGraphicsScene::NoIndex); // HACK: we need to add the GraphicsView as a child widget to a normal widget // the GraphicsView eats the mouse release event and by that kwin core starts to move // the decoration each time the decoration is clicked @@ -267,22 +258,16 @@ void AuroraeClient::init() widget()->setAttribute(Qt::WA_TranslucentBackground); widget()->setAttribute(Qt::WA_NoSystemBackground); widget()->installEventFilter(this); - m_view = new QGraphicsView(m_scene, widget()); - m_view->setAttribute(Qt::WA_TranslucentBackground); - m_view->setWindowFlags(Qt::X11BypassWindowManagerHint); - m_view->setFrameShape(QFrame::NoFrame); - m_view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - m_view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - m_view->setOptimizationFlags(QGraphicsView::DontSavePainterState); - m_view->setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate); - QPalette pal = m_view->palette(); - pal.setColor(m_view->backgroundRole(), Qt::transparent); - m_view->setPalette(pal); - QPalette pal2 = widget()->palette(); - pal2.setColor(widget()->backgroundRole(), Qt::transparent); - widget()->setPalette(pal2); - if (m_item) - m_scene->addItem(m_item); + m_view = new QQuickWindow(); + m_view->setColor(Qt::transparent); + m_container = QWidget::createWindowContainer(m_view, widget(), Qt::X11BypassWindowManagerHint); + m_container->setAttribute(Qt::WA_TranslucentBackground); + m_container->setGeometry(0, 0, width(), height()); + if (m_item) { + m_item->setParentItem(m_view->contentItem()); + m_item->setWidth(width()); + m_item->setHeight(height()); + } slotAlphaChanged(); AuroraeFactory::instance()->theme()->setCompositingActive(compositingActive()); @@ -311,9 +296,8 @@ void AuroraeClient::resize(const QSize &s) m_item->setWidth(s.width()); m_item->setHeight(s.height()); } - m_scene->setSceneRect(QRectF(QPoint(0, 0), s)); - m_view->resize(s); widget()->resize(s); + m_container->setGeometry(0, 0, width(), height()); } void AuroraeClient::borders(int &left, int &right, int &top, int &bottom) const @@ -390,13 +374,13 @@ KDecorationDefines::Position AuroraeClient::mousePosition(const QPoint &point) c default: break; // nothing } - if (point.x() >= (m_view->width() - borderRight - paddingRight)) { + if (point.x() >= (m_container->width() - borderRight - paddingRight)) { pos |= PositionRight; } else if (point.x() <= borderLeft + paddingLeft) { pos |= PositionLeft; } - if (point.y() >= m_view->height() - borderBottom - paddingBottom) { + if (point.y() >= m_container->height() - borderBottom - paddingBottom) { pos |= PositionBottom; } else if (point.y() <= borderTop + paddingTop ) { pos |= PositionTop; @@ -477,15 +461,15 @@ void AuroraeClient::titleMouseMoved(Qt::MouseButton button, Qt::MouseButtons but void AuroraeClient::themeChanged() { - m_scene->clear(); + delete m_item; m_item = AuroraeFactory::instance()->createQmlDecoration(this); if (!m_item) { return; } - m_item->setWidth(m_scene->sceneRect().width()); - m_item->setHeight(m_scene->sceneRect().height()); - m_scene->addItem(m_item); + m_item->setWidth(width()); + m_item->setHeight(height()); + m_item->setParentItem(m_view->contentItem()); connect(m_item, SIGNAL(alphaChanged()), SLOT(slotAlphaChanged())); slotAlphaChanged(); } diff --git a/clients/aurorae/src/aurorae.h b/clients/aurorae/src/aurorae.h index 4bbefa313a..ca20a6dcf0 100644 --- a/clients/aurorae/src/aurorae.h +++ b/clients/aurorae/src/aurorae.h @@ -23,12 +23,10 @@ along with this program. If not, see . #include #include -class QDeclarativeComponent; -class QDeclarativeEngine; -class QDeclarativeItem; -class QGraphicsSceneMouseEvent; -class QGraphicsScene; -class QGraphicsView; +class QQmlComponent; +class QQmlEngine; +class QQuickItem; +class QQuickWindow; class KConfig; class KConfigGroup; @@ -51,7 +49,7 @@ public: AuroraeTheme *theme() const { return m_theme; } - QDeclarativeItem *createQmlDecoration(AuroraeClient *client); + QQuickItem *createQmlDecoration(AuroraeClient *client); const QString ¤tThemeName() const { return m_themeName; } @@ -78,8 +76,8 @@ private: static AuroraeFactory *s_instance; AuroraeTheme *m_theme; - QDeclarativeEngine *m_engine; - QDeclarativeComponent *m_component; + QQmlEngine *m_engine; + QQmlComponent *m_component; EngineType m_engineType; QString m_themeName; }; @@ -159,9 +157,9 @@ private Q_SLOTS: private: void sizesFromBorders(const QObject *borders, int &left, int &right, int &top, int &bottom) const; - QGraphicsView *m_view; - QGraphicsScene *m_scene; - QDeclarativeItem *m_item; + QQuickWindow *m_view; + QQuickItem *m_item; + QWidget *m_container; }; }