Open DBus settings interface

This commit is contained in:
reionwong 2021-09-03 23:41:29 +08:00
parent 68442e5280
commit d747ca3f56
6 changed files with 39 additions and 45 deletions

View file

@ -44,7 +44,6 @@ DockSettings::DockSettings(QObject *parent)
, m_direction(Left)
, m_visibility(AlwaysShow)
, m_settings(new QSettings(QSettings::UserScope, "cutefishos", "dock"))
, m_fileWatcher(new QFileSystemWatcher(this))
{
if (!m_settings->contains("IconSize"))
m_settings->setValue("IconSize", 54);
@ -61,9 +60,6 @@ DockSettings::DockSettings(QObject *parent)
m_direction = static_cast<Direction>(m_settings->value("Direction").toInt());
m_visibility = static_cast<Visibility>(m_settings->value("Visibility").toInt());
m_roundedWindowEnabled = m_settings->value("RoundedWindow").toBool();
m_fileWatcher->addPath(m_settings->fileName());
connect(m_fileWatcher, &QFileSystemWatcher::fileChanged, this, &DockSettings::onConfigFileChanged);
}
int DockSettings::iconSize() const
@ -73,8 +69,11 @@ int DockSettings::iconSize() const
void DockSettings::setIconSize(int iconSize)
{
m_iconSize = iconSize;
emit iconSizeChanged();
if (m_iconSize != iconSize) {
m_iconSize = iconSize;
m_settings->setValue("IconSize", iconSize);
emit iconSizeChanged();
}
}
DockSettings::Direction DockSettings::direction() const
@ -84,8 +83,11 @@ DockSettings::Direction DockSettings::direction() const
void DockSettings::setDirection(const Direction &direction)
{
m_direction = direction;
emit directionChanged();
if (m_direction != direction) {
m_direction = direction;
m_settings->setValue("Direction", direction);
emit directionChanged();
}
}
DockSettings::Visibility DockSettings::visibility() const
@ -97,6 +99,7 @@ void DockSettings::setVisibility(const DockSettings::Visibility &visibility)
{
if (m_visibility != visibility) {
m_visibility = visibility;
m_settings->setValue("Visibility", visibility);
emit visibilityChanged();
}
}
@ -123,30 +126,3 @@ void DockSettings::setRoundedWindowEnabled(bool enabled)
emit roundedWindowEnabledChanged();
}
}
void DockSettings::onConfigFileChanged()
{
if (!QFile(m_settings->fileName()).exists())
return;
m_settings->sync();
int iconSize = m_settings->value("IconSize").toInt();
Direction direction = static_cast<Direction>(m_settings->value("Direction").toInt());
Visibility visibility = static_cast<Visibility>(m_settings->value("Visibility").toInt());
bool roundedWindow = m_settings->value("RoundedWindow").toBool();
if (m_iconSize != iconSize)
setIconSize(iconSize);
if (m_direction != direction)
setDirection(direction);
if (m_visibility != visibility)
setVisibility(visibility);
if (m_roundedWindowEnabled != roundedWindow)
setRoundedWindowEnabled(roundedWindow);
m_fileWatcher->addPath(m_settings->fileName());
}

View file

@ -22,7 +22,6 @@
#include <QObject>
#include <QSettings>
#include <QFileSystemWatcher>
class DockSettings : public QObject
{
@ -65,9 +64,6 @@ public:
bool roundedWindowEnabled() const;
void setRoundedWindowEnabled(bool enabled);
private slots:
void onConfigFileChanged();
signals:
void iconSizeChanged();
void directionChanged();
@ -81,7 +77,6 @@ private:
Direction m_direction;
Visibility m_visibility;
QSettings *m_settings;
QFileSystemWatcher *m_fileWatcher;
};
#endif // DOCKSETTINGS_H

View file

@ -51,7 +51,7 @@ MainWindow::MainWindow(QQuickView *parent)
setColor(Qt::transparent);
setFlags(Qt::FramelessWindowHint | Qt::WindowDoesNotAcceptFocus);
KWindowSystem::setOnDesktop(winId(), NET::OnAllDesktops);
// KWindowSystem::setOnDesktop(winId(), NET::OnAllDesktops);
KWindowSystem::setType(winId(), NET::Dock);
engine()->rootContext()->setContextProperty("appModel", m_appModel);
@ -61,6 +61,7 @@ MainWindow::MainWindow(QQuickView *parent)
engine()->rootContext()->setContextProperty("trash", m_trashManager);
setSource(QUrl(QStringLiteral("qrc:/qml/main.qml")));
setScreen(qApp->primaryScreen());
setResizeMode(QQuickView::SizeRootObjectToView);
initScreens();
@ -109,6 +110,21 @@ bool MainWindow::pinned(const QString &desktop)
return m_appModel->isDesktopPinned(desktop);
}
void MainWindow::setDirection(int direction)
{
DockSettings::self()->setDirection(static_cast<DockSettings::Direction>(direction));
}
void MainWindow::setIconSize(int iconSize)
{
DockSettings::self()->setIconSize(iconSize);
}
void MainWindow::setVisibility(int visibility)
{
DockSettings::self()->setVisibility(static_cast<DockSettings::Visibility>(visibility));
}
void MainWindow::updateSize()
{
resizeWindow();

View file

@ -42,6 +42,10 @@ public:
void remove(const QString &desktop);
bool pinned(const QString &desktop);
void setDirection(int direction);
void setIconSize(int iconSize);
void setVisibility(int visibility);
Q_INVOKABLE void updateSize();
signals:

View file

@ -7,5 +7,9 @@
<arg name="desktopFile" type="s" direction="in"/>
<arg type="b" direction="out"/>
</method>
<method name="setDirection"><arg name="direction" type="i" direction="in"/></method>
<method name="setIconSize"><arg name="iconSize" type="i" direction="in"/></method>
<method name="setVisibility"><arg name="visibility" type="i" direction="in"/></method>
</interface>
</node>

View file

@ -162,15 +162,14 @@ void XWindowInterface::setViewStruts(QWindow *view, DockSettings::Direction dire
break;
}
case DockSettings::Bottom: {
const int bottomOffset { wholeScreen.bottom() - currentScreen.bottom() };
strut.bottom_width = rect.height() + bottomOffset + edgeMargins;
strut.bottom_width = rect.height() + edgeMargins;
strut.bottom_start = rect.x();
strut.bottom_end = rect.x() + rect.width();
break;
}
case DockSettings::Right: {
const int rightOffset = {wholeScreen.right() - currentScreen.right()};
strut.right_width = rect.width() + rightOffset + edgeMargins;
// const int rightOffset = {wholeScreen.right() - currentScreen.right()};
strut.right_width = rect.width() + edgeMargins;
strut.right_start = rect.y();
strut.right_end = rect.y() + rect.height() - 1;
break;