Improve margins

pull/9/head
reionwong 4 years ago
parent 5692e039ee
commit da4a5e1997

@ -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 {

@ -21,7 +21,9 @@
#include "launcheradaptor.h"
#include "iconthemeimageprovider.h"
#include <QApplication>
#include <QDBusConnection>
#include <QDBusServiceWatcher>
#include <QQmlContext>
#include <QScreen>
#include <QTimer>
@ -29,12 +31,16 @@
#include <KWindowSystem>
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);

@ -24,16 +24,24 @@
#include <QQuickView>
#include <QTimer>
#include <QDBusInterface>
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

Loading…
Cancel
Save