From da4a5e1997ff1a69dc5f0293f09436e829958b00 Mon Sep 17 00:00:00 2001 From: reionwong Date: Tue, 7 Sep 2021 23:58:33 +0800 Subject: [PATCH] Improve margins --- qml/main.qml | 10 +++--- src/launcher.cpp | 81 ++++++++++++++++++++++++++++++++++++------------ src/launcher.h | 21 ++++++++++--- 3 files changed, 82 insertions(+), 30 deletions(-) diff --git a/qml/main.qml b/qml/main.qml index a142296..19245a2 100755 --- a/qml/main.qml +++ b/qml/main.qml @@ -139,12 +139,10 @@ Item { ColumnLayout { id: mainLayout anchors.fill: parent - anchors.leftMargin: launcher.screenAvailableRect ? launcher.screenAvailableRect.x : 0 - anchors.topMargin: launcher.screenAvailableRect.y ? launcher.screenAvailableRect.y : 28 - anchors.rightMargin: launcher.screenRect.width - (launcher.screenAvailableRect.x + launcher.screenAvailableRect.width) - anchors.bottomMargin: launcher.screenRect.height - (launcher.screenAvailableRect.y + launcher.screenAvailableRect.height - root.verticalSpacing) - - // spacing: root.verticalSpacing + anchors.topMargin: 28 + anchors.leftMargin: launcher.leftMargin + anchors.rightMargin: launcher.rightMargin + anchors.bottomMargin: launcher.bottomMargin + 28 spacing: 0 Item { diff --git a/src/launcher.cpp b/src/launcher.cpp index b7ae93e..1e49711 100644 --- a/src/launcher.cpp +++ b/src/launcher.cpp @@ -21,7 +21,9 @@ #include "launcheradaptor.h" #include "iconthemeimageprovider.h" +#include #include +#include #include #include #include @@ -29,12 +31,16 @@ #include Launcher::Launcher(QQuickView *w) - : QQuickView(w) - , m_hideTimer(new QTimer) - , m_showed(false) + : QQuickView(w) + , m_dockInterface("org.cutefish.Dock", + "/Dock", + "org.cutefish.Dock", QDBusConnection::sessionBus()) + , m_hideTimer(new QTimer) + , m_showed(false) + , m_leftMargin(0) + , m_rightMargin(0) + , m_bottomMargin(0) { - m_screenAvailableRect = qApp->primaryScreen()->availableGeometry(); - new LauncherAdaptor(this); engine()->rootContext()->setContextProperty("launcher", this); @@ -55,12 +61,44 @@ Launcher::Launcher(QQuickView *w) m_hideTimer->setSingleShot(true); connect(m_hideTimer, &QTimer::timeout, this, [=] { setVisible(false); }); + if (m_dockInterface.isValid()) { + updateMargins(); + connect(&m_dockInterface, SIGNAL(primaryGeometryChanged()), this, SLOT(updateMargins())); + connect(&m_dockInterface, SIGNAL(directionChanged()), this, SLOT(updateMargins())); + } else { + QDBusServiceWatcher *watcher = new QDBusServiceWatcher("org.cutefish.Dock", + QDBusConnection::sessionBus(), + QDBusServiceWatcher::WatchForUnregistration, + this); + connect(watcher, &QDBusServiceWatcher::serviceUnregistered, this, [=] { + updateMargins(); + connect(&m_dockInterface, SIGNAL(primaryGeometryChanged()), this, SLOT(updateMargins())); + connect(&m_dockInterface, SIGNAL(directionChanged()), this, SLOT(updateMargins())); + }); + } + + connect(qApp, &QApplication::primaryScreenChanged, this, [=] { onGeometryChanged(); }); + connect(qApp->primaryScreen(), &QScreen::virtualGeometryChanged, this, &Launcher::onGeometryChanged); connect(qApp->primaryScreen(), &QScreen::geometryChanged, this, &Launcher::onGeometryChanged); - connect(qApp->primaryScreen(), &QScreen::availableGeometryChanged, this, &Launcher::onAvailableGeometryChanged); connect(this, &QQuickView::activeChanged, this, &Launcher::onActiveChanged); } +int Launcher::leftMargin() const +{ + return m_leftMargin; +} + +int Launcher::rightMargin() const +{ + return m_rightMargin; +} + +int Launcher::bottomMargin() const +{ + return m_bottomMargin; +} + bool Launcher::showed() { return m_showed; @@ -89,11 +127,7 @@ void Launcher::toggle() bool Launcher::dockAvailable() { - QDBusInterface iface("org.cutefish.Dock", - "/Dock", - "org.cutefish.Dock", - QDBusConnection::sessionBus()); - return iface.isValid(); + return m_dockInterface.isValid(); } bool Launcher::isPinedDock(const QString &desktop) @@ -114,9 +148,24 @@ QRect Launcher::screenRect() return m_screenRect; } -QRect Launcher::screenAvailableRect() +void Launcher::updateMargins() { - return m_screenAvailableRect; + QRect dockGeometry = m_dockInterface.property("primaryGeometry").toRect(); + int dockDirection = m_dockInterface.property("direction").toInt(); + + m_leftMargin = 0; + m_rightMargin = 0; + m_bottomMargin = 0; + + if (dockDirection == 0) { + m_leftMargin = dockGeometry.width(); + } else if (dockDirection == 1) { + m_bottomMargin = dockGeometry.height(); + } else if (dockDirection == 2) { + m_rightMargin = dockGeometry.width(); + } + + emit marginsChanged(); } void Launcher::onGeometryChanged() @@ -128,12 +177,6 @@ void Launcher::onGeometryChanged() } } -void Launcher::onAvailableGeometryChanged(const QRect &geometry) -{ - m_screenAvailableRect = geometry; - emit screenAvailableGeometryChanged(); -} - void Launcher::showEvent(QShowEvent *e) { KWindowSystem::setState(winId(), NET::SkipTaskbar | NET::SkipPager); diff --git a/src/launcher.h b/src/launcher.h index 0351133..e1e5b63 100644 --- a/src/launcher.h +++ b/src/launcher.h @@ -24,16 +24,24 @@ #include #include +#include + class Launcher : public QQuickView { Q_OBJECT Q_PROPERTY(QRect screenRect READ screenRect NOTIFY screenRectChanged) - Q_PROPERTY(QRect screenAvailableRect READ screenAvailableRect NOTIFY screenAvailableGeometryChanged) Q_PROPERTY(bool showed READ showed NOTIFY showedChanged) + Q_PROPERTY(int leftMargin READ leftMargin NOTIFY marginsChanged) + Q_PROPERTY(int rightMargin READ rightMargin NOTIFY marginsChanged) + Q_PROPERTY(int bottomMargin READ bottomMargin NOTIFY marginsChanged) public: Launcher(QQuickView *w = nullptr); + int leftMargin() const; + int rightMargin() const; + int bottomMargin() const; + bool showed(); Q_INVOKABLE void showWindow(); @@ -44,16 +52,15 @@ public: Q_INVOKABLE bool isPinedDock(const QString &desktop); QRect screenRect(); - QRect screenAvailableRect(); signals: void screenRectChanged(); - void screenAvailableGeometryChanged(); void showedChanged(); + void marginsChanged(); private slots: + void updateMargins(); void onGeometryChanged(); - void onAvailableGeometryChanged(const QRect &geometry); protected: void showEvent(QShowEvent *e) override; @@ -63,10 +70,14 @@ private: void onActiveChanged(); private: + QDBusInterface m_dockInterface; QRect m_screenRect; - QRect m_screenAvailableRect; QTimer *m_hideTimer; bool m_showed; + + int m_leftMargin; + int m_rightMargin; + int m_bottomMargin; }; #endif // LAUNCHER_H