Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
178 changes: 102 additions & 76 deletions src/service/impl/appearancemanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,6 @@

DCORE_USE_NAMESPACE

const QString wallpaperJsonPath = QString("%1/dde-appearance/").arg(utils::GetUserConfigDir());

AppearanceManager::AppearanceManager(AppearanceProperty *prop, QObject *parent)
: QObject(parent)
, m_property(prop)
Expand All @@ -53,6 +51,7 @@ AppearanceManager::AppearanceManager(AppearanceProperty *prop, QObject *parent)
, m_themeAutoTimer(this)
, m_customTheme(new CustomTheme())
, m_globalThemeUpdating(false)
, m_wallpaperConfig({})
{
if (QGSettings::isSchemaInstalled(XSETTINGSSCHEMA)) {
m_xSetting = QSharedPointer<QGSettings>(new QGSettings(XSETTINGSSCHEMA));
Expand Down Expand Up @@ -295,85 +294,106 @@ void AppearanceManager::handleXsettingDConfigChange(QString key)
}
}

// NOTE: it here is value change, then do change value, and emit signal
// else, just emit the signal
// All the signal will be sended on dconfig changed
void AppearanceManager::handleSettingDConfigChange(QString key)
{
QString type;
QString value;
bool bSuccess = true;
if (key == GSKEYGLOBALTHEME) {
type = TYPEGLOBALTHEME;
value = m_settingDconfig.value(key).toString();
bSuccess = doSetGlobalTheme(value);
if (bSuccess) {
setGlobalTheme(value);
}
} else if (key == GSKEYGTKTHEME) {
type = TYPEGTK;
value = m_settingDconfig.value(key).toString();
bSuccess = doSetGtkTheme(value);
} else if (key == GSKEYICONTHEM) {
type = TYPEICON;
value = m_settingDconfig.value(key).toString();
bSuccess = doSetIconTheme(value);
} else if (key == GSKEYCURSORTHEME) {
type = TYPECURSOR;
value = m_settingDconfig.value(key).toString();
bSuccess = doSetCursorTheme(value);
} else if (key == GSKEYFONTSTANDARD) {
type = TYPESTANDARDFONT;
value = m_settingDconfig.value(key).toString();
bSuccess = doSetStandardFont(value);
} else if (key == GSKEYFONTMONOSPACE) {
type = TYPEMONOSPACEFONT;
value = m_settingDconfig.value(key).toString();
bSuccess = doSetMonospaceFont(value);
} else if (key == GSKEYFONTSIZE) {
type = TYPEFONTSIZE;
double size = m_settingDconfig.value(key).toDouble();
bSuccess = doSetFonts(size);
value = QString::number(size);
} else if (key == GSKEYBACKGROUNDURIS) {
type = TYPEBACKGROUND;
m_desktopBgs = m_settingDconfig.value(key).toStringList();
m_dbusProxy->SetDesktopBackgrounds(m_desktopBgs);
value = m_desktopBgs.join(";");
} else if (key == GSKEYWALLPAPERSLIDESHOW) {
type = TYPEWALLPAPERSLIDESHOW;
value = m_settingDconfig.value(key).toString();
updateWSPolicy(value);
} else if (key == GSKEYOPACITY) {
type = TYPEWINDOWOPACITY;
bool ok = false;
double opacity = m_settingDconfig.value(key).toDouble(&ok);
if (ok) {
setOpacity(opacity);
value = QString::number(opacity);
}
} else if (key == DCKEYALLWALLPAPER) {
type = TYPEALLWALLPAPER;
QVariant wallpaper = m_settingDconfig.value(key);
value = QJsonDocument::fromVariant(wallpaper).toJson();
QDir dir;
if (!dir.exists(wallpaperJsonPath)) {
bool res = dir.mkpath(wallpaperJsonPath);
if (!res) {
qWarning() << QString("mkdir %1 failed.").arg(wallpaperJsonPath);
return;
}
}

QFile file(wallpaperJsonPath + "config.json");
if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
QTextStream textStream(&file);
textStream << value;
textStream.flush();
file.close();
do {
if (key == GSKEYGLOBALTHEME) {
type = TYPEGLOBALTHEME;
value = m_settingDconfig.value(key).toString();
if (value == m_property->globalTheme) {
break;
}
bSuccess = doSetGlobalTheme(value);
if (bSuccess) {
setGlobalTheme(value);
}
} else if (key == GSKEYGTKTHEME) {
type = TYPEGTK;
value = m_settingDconfig.value(key).toString();
if (value == m_property->gtkTheme) {
break;
}
bSuccess = doSetGtkTheme(value);
} else if (key == GSKEYICONTHEM) {
type = TYPEICON;
value = m_settingDconfig.value(key).toString();
if (value == m_property->iconTheme) {
break;
}
bSuccess = doSetIconTheme(value);
} else if (key == GSKEYCURSORTHEME) {
type = TYPECURSOR;
value = m_settingDconfig.value(key).toString();
if (value == m_property->cursorTheme) {
break;
}
bSuccess = doSetCursorTheme(value);
} else if (key == GSKEYFONTSTANDARD) {
type = TYPESTANDARDFONT;
value = m_settingDconfig.value(key).toString();
if (value == m_property->standardFont) {
break;
}
bSuccess = doSetStandardFont(value);
} else if (key == GSKEYFONTMONOSPACE) {
type = TYPEMONOSPACEFONT;
value = m_settingDconfig.value(key).toString();
if (value == m_property->monospaceFont) {
break;
}
bSuccess = doSetMonospaceFont(value);
} else if (key == GSKEYFONTSIZE) {
type = TYPEFONTSIZE;
double size = m_settingDconfig.value(key).toDouble();
if (size == m_property->fontSize) {
break;
}
bSuccess = doSetFonts(size);
value = QString::number(size);
} else if (key == GSKEYBACKGROUNDURIS) {
type = TYPEBACKGROUND;
m_desktopBgs = m_settingDconfig.value(key).toStringList();
if (m_settingDconfig.value(key).toString() == this->m_property->background) {
break;
}
m_dbusProxy->SetDesktopBackgrounds(m_desktopBgs);
value = m_desktopBgs.join(";");
} else if (key == GSKEYWALLPAPERSLIDESHOW) {
type = TYPEWALLPAPERSLIDESHOW;
value = m_settingDconfig.value(key).toString();
if (value == m_property->wallpaperSlideShow) {
break;
}
updateWSPolicy(value);
} else if (key == GSKEYOPACITY) {
type = TYPEWINDOWOPACITY;
bool ok = false;
double opacity = m_settingDconfig.value(key).toDouble(&ok);
if (opacity == m_property->opacity) {
break;
}
if (ok) {
setOpacity(opacity);
value = QString::number(opacity);
}
} else if (key == DCKEYALLWALLPAPER) {
type = TYPEALLWALLPAPER;
QVariant wallpaper = m_settingDconfig.value(key);
if (wallpaper.toJsonArray() == m_wallpaperConfig) {
break;
}
utils::writeWallpaperConfig(wallpaper);
} else {
qWarning() << QString("%1 error.").arg(wallpaperJsonPath);
return;
}
} else {
return;
}
} while (false);

if (!bSuccess) {
qDebug() << "set " << key << "fail";
Expand Down Expand Up @@ -1690,7 +1710,9 @@ QString AppearanceManager::getWallpaperUri(const QString &index, const QString &
wallpaper = "file:///usr/share/wallpapers/deepin/desktop.jpg";
}

PhaseWallPaper::setWallpaperUri(index, monitorName, wallpaper);
if (auto value = PhaseWallPaper::setWallpaperUri(index, monitorName, wallpaper); value.has_value()) {
m_wallpaperConfig = value.value();
}
}
return wallpaper;
}
Expand Down Expand Up @@ -1753,7 +1775,9 @@ void AppearanceManager::doSetCurrentWorkspaceBackgroundForMonitor(const QString
return;
}

PhaseWallPaper::setWallpaperUri(strIndex, strMonitorName, uri);
if (auto value = PhaseWallPaper::setWallpaperUri(strIndex, strMonitorName, uri); value.has_value()) {
m_wallpaperConfig = value.value();
}
doUpdateWallpaperURIs();
return;
}
Expand All @@ -1771,7 +1795,9 @@ QString AppearanceManager::doGetCurrentWorkspaceBackgroundForMonitor(const QStri

void AppearanceManager::doSetWorkspaceBackgroundForMonitor(const int &index, const QString &strMonitorName, const QString &uri)
{
PhaseWallPaper::setWallpaperUri(QString::number(index), strMonitorName, uri);
if (auto value = PhaseWallPaper::setWallpaperUri(QString::number(index), strMonitorName, uri); value.has_value()) {
m_wallpaperConfig = value.value();
}
doUpdateWallpaperURIs();
}

Expand Down
2 changes: 2 additions & 0 deletions src/service/impl/appearancemanager.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include <QTimerEvent>
#include <QTimer>
#include <QGSettings>
#include <QJsonArray>

#include <dbus/appearanceproperty.h>

Expand Down Expand Up @@ -205,6 +206,7 @@ public Q_SLOTS:
CustomTheme *m_customTheme;
bool m_globalThemeUpdating;
QString m_currentGlobalTheme; // 当前主题,globalTheme+.light/.dark
QJsonArray m_wallpaperConfig; // store the config
};

#endif // APPEARANCEMANAGER_H
27 changes: 27 additions & 0 deletions src/service/modules/api/utils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,41 @@
#include <QDir>
#include <QUrl>
#include <QStandardPaths>
#include <QDebug>
#include <QJsonDocument>

#include <pwd.h>
#include <unistd.h>

const static QString wallpaperJsonPath = QString("%1/dde-appearance/").arg(utils::GetUserConfigDir());

utils::utils()
{
}

void utils::writeWallpaperConfig(const QVariant &wallpaper)
{
QString value = QJsonDocument::fromVariant(wallpaper).toJson();
QDir dir;
if (!dir.exists(wallpaperJsonPath)) {
bool res = dir.mkpath(wallpaperJsonPath);
if (!res) {
qWarning() << QString("mkdir %1 failed.").arg(wallpaperJsonPath);
return;
}
}

QFile file(wallpaperJsonPath + "config.json");
if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
QTextStream textStream(&file);
textStream << value;
textStream.flush();
file.close();
} else {
qWarning() << QString("%1 error.").arg(wallpaperJsonPath);
}
}

bool utils::WriteStringToFile(QString filename, QString content)
{
if (filename.length() == 0) {
Expand Down
2 changes: 2 additions & 0 deletions src/service/modules/api/utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#define UTILS_H
#include <QString>
#include <QVector>
#include <QVariant>

class utils
{
Expand All @@ -23,6 +24,7 @@ class utils
static QString GetUserConfigDir();
static QString GetUserCacheDir();
static QString GetUserRuntimeDir();
static void writeWallpaperConfig(const QVariant &wallpaper);
};

#endif // UTILS_H
Loading