diff --git a/src/controllers/DropIndicatorOverlay.h b/src/controllers/DropIndicatorOverlay.h index 786c90af..20905a31 100644 --- a/src/controllers/DropIndicatorOverlay.h +++ b/src/controllers/DropIndicatorOverlay.h @@ -26,8 +26,6 @@ class DropArea; class DOCKS_EXPORT DropIndicatorOverlay : public Controller { Q_OBJECT - Q_PROPERTY(QRect hoveredFrameRect READ hoveredFrameRect NOTIFY hoveredFrameRectChanged) - Q_PROPERTY(KDDockWidgets::DropLocation currentDropLocation READ currentDropLocation NOTIFY currentDropLocationChanged) public: explicit DropIndicatorOverlay(Controllers::DropArea *dropArea); void setHoveredFrame(Controllers::Frame *); diff --git a/src/controllers/indicators/ClassicIndicators.cpp b/src/controllers/indicators/ClassicIndicators.cpp index 02dc691e..3fbcfbaf 100644 --- a/src/controllers/indicators/ClassicIndicators.cpp +++ b/src/controllers/indicators/ClassicIndicators.cpp @@ -57,51 +57,6 @@ QPoint ClassicIndicators::posForIndicator(DropLocation loc) const return m_indicatorWindow->posForIndicator(loc); } -bool ClassicIndicators::innerLeftIndicatorVisible() const -{ - return dropIndicatorVisible(DropLocation_Left); -} - -bool ClassicIndicators::innerRightIndicatorVisible() const -{ - return dropIndicatorVisible(DropLocation_Right); -} - -bool ClassicIndicators::innerTopIndicatorVisible() const -{ - return dropIndicatorVisible(DropLocation_Top); -} - -bool ClassicIndicators::innerBottomIndicatorVisible() const -{ - return dropIndicatorVisible(DropLocation_Bottom); -} - -bool ClassicIndicators::outterLeftIndicatorVisible() const -{ - return dropIndicatorVisible(DropLocation_OutterLeft); -} - -bool ClassicIndicators::outterRightIndicatorVisible() const -{ - return dropIndicatorVisible(DropLocation_OutterRight); -} - -bool ClassicIndicators::outterTopIndicatorVisible() const -{ - return dropIndicatorVisible(DropLocation_OutterTop); -} - -bool ClassicIndicators::outterBottomIndicatorVisible() const -{ - return dropIndicatorVisible(DropLocation_OutterBottom); -} - -bool ClassicIndicators::tabIndicatorVisible() const -{ - return dropIndicatorVisible(DropLocation_Center); -} - bool ClassicIndicators::onResize(QSize) { m_indicatorWindow->resize(window()->size()); diff --git a/src/controllers/indicators/ClassicIndicators.h b/src/controllers/indicators/ClassicIndicators.h index cc70dfa4..438e76cb 100644 --- a/src/controllers/indicators/ClassicIndicators.h +++ b/src/controllers/indicators/ClassicIndicators.h @@ -27,37 +27,12 @@ namespace Controllers { class DOCKS_EXPORT ClassicIndicators : public DropIndicatorOverlay { Q_OBJECT - - // Properties for QML - Q_PROPERTY(bool innerLeftIndicatorVisible READ innerLeftIndicatorVisible NOTIFY indicatorsVisibleChanged) - Q_PROPERTY(bool innerRightIndicatorVisible READ innerRightIndicatorVisible NOTIFY indicatorsVisibleChanged) - Q_PROPERTY(bool innerTopIndicatorVisible READ innerTopIndicatorVisible NOTIFY indicatorsVisibleChanged) - Q_PROPERTY(bool innerBottomIndicatorVisible READ innerBottomIndicatorVisible NOTIFY indicatorsVisibleChanged) - - Q_PROPERTY(bool outterLeftIndicatorVisible READ outterLeftIndicatorVisible NOTIFY indicatorsVisibleChanged) - Q_PROPERTY(bool outterRightIndicatorVisible READ outterRightIndicatorVisible NOTIFY indicatorsVisibleChanged) - Q_PROPERTY(bool outterTopIndicatorVisible READ outterTopIndicatorVisible NOTIFY indicatorsVisibleChanged) - Q_PROPERTY(bool outterBottomIndicatorVisible READ outterBottomIndicatorVisible NOTIFY indicatorsVisibleChanged) - - Q_PROPERTY(bool tabIndicatorVisible READ tabIndicatorVisible NOTIFY indicatorsVisibleChanged) - public: explicit ClassicIndicators(Controllers::DropArea *dropArea); ~ClassicIndicators() override; DropLocation hover_impl(QPoint globalPos) override; QPoint posForIndicator(DropLocation) const override; - // Lots of getters needed because of QML: - bool innerLeftIndicatorVisible() const; - bool innerRightIndicatorVisible() const; - bool innerTopIndicatorVisible() const; - bool innerBottomIndicatorVisible() const; - bool outterLeftIndicatorVisible() const; - bool outterRightIndicatorVisible() const; - bool outterTopIndicatorVisible() const; - bool outterBottomIndicatorVisible() const; - bool tabIndicatorVisible() const; - bool onResize(QSize newSize); void setDropLocation(DropLocation); void updateVisibility() override; diff --git a/src/qtquick/views/ClassicIndicatorsWindow_qtquick.cpp b/src/qtquick/views/ClassicIndicatorsWindow_qtquick.cpp index a6e0318b..51266d9c 100644 --- a/src/qtquick/views/ClassicIndicatorsWindow_qtquick.cpp +++ b/src/qtquick/views/ClassicIndicatorsWindow_qtquick.cpp @@ -76,6 +76,14 @@ IndicatorWindow_qtquick::IndicatorWindow_qtquick(Controllers::ClassicIndicators rootContext()->setContextProperty(QStringLiteral("_window"), QVariant::fromValue(this)); setSource(QUrl(QStringLiteral("qrc:/kddockwidgets/qtquick/views/qml/ClassicIndicatorsOverlay.qml"))); + connect(classicIndicators, &ClassicIndicators::indicatorsVisibleChanged, + this, &IndicatorWindow_qtquick::indicatorsVisibleChanged); + + connect(classicIndicators, &ClassicIndicators::hoveredFrameRectChanged, + this, &IndicatorWindow_qtquick::hoveredFrameRectChanged); + + connect(classicIndicators, &ClassicIndicators::currentDropLocationChanged, + this, &IndicatorWindow_qtquick::currentDropLocationChanged); // Two workarounds for two unrelated bugs: if (KDDockWidgets::isOffscreen()) { @@ -215,3 +223,58 @@ bool IndicatorWindow_qtquick::isWindow() const { return true; } + +bool IndicatorWindow_qtquick::innerLeftIndicatorVisible() const +{ + return m_classicIndicators->dropIndicatorVisible(DropLocation_Left); +} + +bool IndicatorWindow_qtquick::innerRightIndicatorVisible() const +{ + return m_classicIndicators->dropIndicatorVisible(DropLocation_Right); +} + +bool IndicatorWindow_qtquick::innerTopIndicatorVisible() const +{ + return m_classicIndicators->dropIndicatorVisible(DropLocation_Top); +} + +bool IndicatorWindow_qtquick::innerBottomIndicatorVisible() const +{ + return m_classicIndicators->dropIndicatorVisible(DropLocation_Bottom); +} + +bool IndicatorWindow_qtquick::outterLeftIndicatorVisible() const +{ + return m_classicIndicators->dropIndicatorVisible(DropLocation_OutterLeft); +} + +bool IndicatorWindow_qtquick::outterRightIndicatorVisible() const +{ + return m_classicIndicators->dropIndicatorVisible(DropLocation_OutterRight); +} + +bool IndicatorWindow_qtquick::outterTopIndicatorVisible() const +{ + return m_classicIndicators->dropIndicatorVisible(DropLocation_OutterTop); +} + +bool IndicatorWindow_qtquick::outterBottomIndicatorVisible() const +{ + return m_classicIndicators->dropIndicatorVisible(DropLocation_OutterBottom); +} + +bool IndicatorWindow_qtquick::tabIndicatorVisible() const +{ + return m_classicIndicators->dropIndicatorVisible(DropLocation_Center); +} + +QRect IndicatorWindow_qtquick::hoveredFrameRect() const +{ + return m_classicIndicators->hoveredFrameRect(); +} + +DropLocation IndicatorWindow_qtquick::currentDropLocation() const +{ + return m_classicIndicators->currentDropLocation(); +} diff --git a/src/qtquick/views/ClassicIndicatorsWindow_qtquick.h b/src/qtquick/views/ClassicIndicatorsWindow_qtquick.h index a49194c4..c0c5f56f 100644 --- a/src/qtquick/views/ClassicIndicatorsWindow_qtquick.h +++ b/src/qtquick/views/ClassicIndicatorsWindow_qtquick.h @@ -28,7 +28,17 @@ class ClassicIndicators; class IndicatorWindow_qtquick : public QQuickView, public Views::ClassicIndicatorWindow { Q_OBJECT - Q_PROPERTY(KDDockWidgets::Controllers::ClassicIndicators *classicIndicators READ classicIndicators CONSTANT) + Q_PROPERTY(bool innerLeftIndicatorVisible READ innerLeftIndicatorVisible NOTIFY indicatorsVisibleChanged) + Q_PROPERTY(bool innerRightIndicatorVisible READ innerRightIndicatorVisible NOTIFY indicatorsVisibleChanged) + Q_PROPERTY(bool innerTopIndicatorVisible READ innerTopIndicatorVisible NOTIFY indicatorsVisibleChanged) + Q_PROPERTY(bool innerBottomIndicatorVisible READ innerBottomIndicatorVisible NOTIFY indicatorsVisibleChanged) + Q_PROPERTY(bool outterLeftIndicatorVisible READ outterLeftIndicatorVisible NOTIFY indicatorsVisibleChanged) + Q_PROPERTY(bool outterRightIndicatorVisible READ outterRightIndicatorVisible NOTIFY indicatorsVisibleChanged) + Q_PROPERTY(bool outterTopIndicatorVisible READ outterTopIndicatorVisible NOTIFY indicatorsVisibleChanged) + Q_PROPERTY(bool outterBottomIndicatorVisible READ outterBottomIndicatorVisible NOTIFY indicatorsVisibleChanged) + Q_PROPERTY(bool tabIndicatorVisible READ tabIndicatorVisible NOTIFY indicatorsVisibleChanged) + Q_PROPERTY(QRect hoveredFrameRect READ hoveredFrameRect NOTIFY hoveredFrameRectChanged) + Q_PROPERTY(KDDockWidgets::DropLocation currentDropLocation READ currentDropLocation NOTIFY currentDropLocationChanged) public: explicit IndicatorWindow_qtquick(Controllers::ClassicIndicators *); @@ -46,6 +56,24 @@ public: void resize(QSize) override; void setObjectName(const QString &) override; + // Property getters for QML: + bool innerLeftIndicatorVisible() const; + bool innerRightIndicatorVisible() const; + bool innerTopIndicatorVisible() const; + bool innerBottomIndicatorVisible() const; + bool outterLeftIndicatorVisible() const; + bool outterRightIndicatorVisible() const; + bool outterTopIndicatorVisible() const; + bool outterBottomIndicatorVisible() const; + bool tabIndicatorVisible() const; + QRect hoveredFrameRect() const; + DropLocation currentDropLocation() const; + +Q_SIGNALS: + void indicatorsVisibleChanged(); + void hoveredFrameRectChanged(); + void currentDropLocationChanged(); + private: DropLocation locationForIndicator(const QQuickItem *) const; QQuickItem *indicatorForPos(QPoint) const; diff --git a/src/qtquick/views/qml/ClassicIndicator.qml b/src/qtquick/views/qml/ClassicIndicator.qml index 794f77c8..214483f7 100644 --- a/src/qtquick/views/qml/ClassicIndicator.qml +++ b/src/qtquick/views/qml/ClassicIndicator.qml @@ -16,7 +16,7 @@ Image { id: root property int indicatorType: KDDockWidgets.DropLocation_None - readonly property bool isHovered: _window.classicIndicators.currentDropLocation === indicatorType + readonly property bool isHovered: _window.currentDropLocation === indicatorType source: "qrc:/img/classic_indicators/" + _window.iconName(indicatorType, isHovered) + ".png"; width: 64 diff --git a/src/qtquick/views/qml/ClassicIndicatorsOverlay.qml b/src/qtquick/views/qml/ClassicIndicatorsOverlay.qml index ca3103d5..f0653ee1 100644 --- a/src/qtquick/views/qml/ClassicIndicatorsOverlay.qml +++ b/src/qtquick/views/qml/ClassicIndicatorsOverlay.qml @@ -21,7 +21,7 @@ Item { visible: width > 50 && height > 50 // don't show if window is too small' ClassicIndicator { - visible: _window.classicIndicators.outterLeftIndicatorVisible + visible: _window.outterLeftIndicatorVisible indicatorType: KDDockWidgets.DropLocation_OutterLeft anchors { left: parent.left @@ -31,7 +31,7 @@ Item { } ClassicIndicator { - visible: _window.classicIndicators.outterRightIndicatorVisible + visible: _window.outterRightIndicatorVisible indicatorType: KDDockWidgets.DropLocation_OutterRight anchors { right: parent.right @@ -41,7 +41,7 @@ Item { } ClassicIndicator { - visible: _window.classicIndicators.outterTopIndicatorVisible + visible: _window.outterTopIndicatorVisible indicatorType: KDDockWidgets.DropLocation_OutterTop anchors { top: parent.top @@ -51,7 +51,7 @@ Item { } ClassicIndicator { - visible: _window.classicIndicators.outterBottomIndicatorVisible + visible: _window.outterBottomIndicatorVisible indicatorType: KDDockWidgets.DropLocation_OutterBottom anchors { bottom: parent.bottom @@ -64,17 +64,17 @@ Item { id: innerIndicators objectName: "innerIndicators" - x: _window.classicIndicators.hoveredFrameRect.x + (_window.classicIndicators.hoveredFrameRect.width / 2) - y: _window.classicIndicators.hoveredFrameRect.y + (_window.classicIndicators.hoveredFrameRect.height / 2) + x: _window.hoveredFrameRect.x + (_window.hoveredFrameRect.width / 2) + y: _window.hoveredFrameRect.y + (_window.hoveredFrameRect.height / 2) width: (centerIndicator * 3) + (2 * innerMargin) height: width - visible: _window.classicIndicators.innerLeftIndicatorVisible || _window.classicIndicators.innerRightIndicatorVisible || - _window.classicIndicators.innerTopIndicatorVisible || _window.classicIndicators.innerBottomIndicatorVisible || _window.classicIndicators.tabIndicatorVisible + visible: _window.innerLeftIndicatorVisible || _window.innerRightIndicatorVisible || + _window.innerTopIndicatorVisible || _window.innerBottomIndicatorVisible || _window.tabIndicatorVisible ClassicIndicator { id: innerLeft - visible: _window.classicIndicators.innerLeftIndicatorVisible + visible: _window.innerLeftIndicatorVisible indicatorType: KDDockWidgets.DropLocation_Left anchors { right: centerIndicator.left @@ -85,14 +85,14 @@ Item { ClassicIndicator { id: centerIndicator - visible: _window.classicIndicators.tabIndicatorVisible + visible: _window.tabIndicatorVisible indicatorType: KDDockWidgets.DropLocation_Center anchors.centerIn: parent } ClassicIndicator { id: innerRight - visible: _window.classicIndicators.innerRightIndicatorVisible + visible: _window.innerRightIndicatorVisible indicatorType: KDDockWidgets.DropLocation_Right anchors { left: centerIndicator.right @@ -103,7 +103,7 @@ Item { ClassicIndicator { id: innerTop - visible: _window.classicIndicators.innerTopIndicatorVisible + visible: _window.innerTopIndicatorVisible indicatorType: KDDockWidgets.DropLocation_Top anchors { bottom: centerIndicator.top @@ -114,7 +114,7 @@ Item { ClassicIndicator { id: innerBottom - visible: _window.classicIndicators.innerBottomIndicatorVisible + visible: _window.innerBottomIndicatorVisible indicatorType: KDDockWidgets.DropLocation_Bottom anchors { top: centerIndicator.bottom diff --git a/tests/tst_docks.cpp b/tests/tst_docks.cpp index 9a1d5b98..9df6ef4b 100644 --- a/tests/tst_docks.cpp +++ b/tests/tst_docks.cpp @@ -6273,7 +6273,7 @@ int main(int argc, char *argv[]) { for (FrontendType type : Platform::frontendTypes()) { - if (type != KDDockWidgets::FrontendType::QtWidgets) + if (type != KDDockWidgets::FrontendType::QtQuick) continue; // QtQuick not passing yet qDebug() << "\nTesting platform" << type << ":\n";