mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-04-29 15:03:09 +00:00
folio: Move settings to config group, and consolidate
Currently Folio's settings are being written to the main KConfigGroup of the containment, when can interfere with other generic containment settings. ShellCorona in plasma-workspace also expects the settings to be in sub-config group when it preserves them when changing containments. This commit moves all of the settings to its own config group, and also consolidates config read/write for favourites and pages into FolioSettings.
This commit is contained in:
parent
5139984e94
commit
7dc2d980aa
4 changed files with 127 additions and 29 deletions
|
|
@ -252,8 +252,7 @@ void FavouritesModel::save()
|
||||||
QJsonArray arr = exportToJson();
|
QJsonArray arr = exportToJson();
|
||||||
QByteArray data = QJsonDocument(arr).toJson(QJsonDocument::Compact);
|
QByteArray data = QJsonDocument(arr).toJson(QJsonDocument::Compact);
|
||||||
|
|
||||||
m_homeScreen->config().writeEntry("Favourites", QString::fromStdString(data.toStdString()));
|
m_homeScreen->folioSettings()->setFavorites(QString::fromStdString(data.toStdString()));
|
||||||
Q_EMIT m_homeScreen->configNeedsSaving();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FavouritesModel::load()
|
void FavouritesModel::load()
|
||||||
|
|
@ -262,7 +261,7 @@ void FavouritesModel::load()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QJsonDocument doc = QJsonDocument::fromJson(m_homeScreen->config().readEntry("Favourites", "{}").toUtf8());
|
QJsonDocument doc = QJsonDocument::fromJson(m_homeScreen->folioSettings()->favorites().toUtf8());
|
||||||
loadFromJson(doc.array());
|
loadFromJson(doc.array());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,14 @@
|
||||||
#include <QJsonDocument>
|
#include <QJsonDocument>
|
||||||
#include <QTextStream>
|
#include <QTextStream>
|
||||||
|
|
||||||
|
using namespace Qt::Literals::StringLiterals;
|
||||||
|
|
||||||
|
// The config group all of the settings are under
|
||||||
|
const QString CFG_GROUP_FOLIO = QStringLiteral("Folio");
|
||||||
|
|
||||||
|
const QString CFG_KEY_FAVORITES = QStringLiteral("favorites");
|
||||||
|
const QString CFG_KEY_PAGES = QStringLiteral("pages");
|
||||||
|
|
||||||
const QString CFG_KEY_HOMESCREEN_ROWS = QStringLiteral("homeScreenRows");
|
const QString CFG_KEY_HOMESCREEN_ROWS = QStringLiteral("homeScreenRows");
|
||||||
const QString CFG_KEY_HOMESCREEN_COLS = QStringLiteral("homeScreenColumns");
|
const QString CFG_KEY_HOMESCREEN_COLS = QStringLiteral("homeScreenColumns");
|
||||||
const QString CFG_KEY_SHOW_PAGES_APPLABELS = QStringLiteral("showPagesAppLabels");
|
const QString CFG_KEY_SHOW_PAGES_APPLABELS = QStringLiteral("showPagesAppLabels");
|
||||||
|
|
@ -27,6 +35,30 @@ FolioSettings::FolioSettings(HomeScreen *parent)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString FolioSettings::favorites() const
|
||||||
|
{
|
||||||
|
return generalConfigGroup().readEntry(CFG_KEY_FAVORITES, u"{}"_s);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FolioSettings::setFavorites(const QString &favoritesJson)
|
||||||
|
{
|
||||||
|
// Saved separately from other options, since it's changed from the homescreen (not settings window)
|
||||||
|
generalConfigGroup().writeEntry(CFG_KEY_FAVORITES, favoritesJson);
|
||||||
|
Q_EMIT m_homeScreen->configNeedsSaving();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString FolioSettings::pages() const
|
||||||
|
{
|
||||||
|
return generalConfigGroup().readEntry(CFG_KEY_PAGES, u"{}"_s);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FolioSettings::setPages(const QString &pagesJson)
|
||||||
|
{
|
||||||
|
// Saved separately from other options, since it's changed from the homescreen (not settings window)
|
||||||
|
generalConfigGroup().writeEntry(CFG_KEY_PAGES, pagesJson);
|
||||||
|
Q_EMIT m_homeScreen->configNeedsSaving();
|
||||||
|
}
|
||||||
|
|
||||||
int FolioSettings::homeScreenRows() const
|
int FolioSettings::homeScreenRows() const
|
||||||
{
|
{
|
||||||
// ensure that this is fetched fast and cached (it is called extremely often)
|
// ensure that this is fetched fast and cached (it is called extremely often)
|
||||||
|
|
@ -174,16 +206,18 @@ void FolioSettings::save()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_homeScreen->config().writeEntry(CFG_KEY_HOMESCREEN_ROWS, m_homeScreenRows);
|
auto generalGroup = generalConfigGroup();
|
||||||
m_homeScreen->config().writeEntry(CFG_KEY_HOMESCREEN_COLS, m_homeScreenColumns);
|
|
||||||
m_homeScreen->config().writeEntry(CFG_KEY_SHOW_PAGES_APPLABELS, m_showPagesAppLabels);
|
generalGroup.writeEntry(CFG_KEY_HOMESCREEN_ROWS, m_homeScreenRows);
|
||||||
m_homeScreen->config().writeEntry(CFG_KEY_SHOW_FAVORITES_APPLABELS, m_showFavouritesAppLabels);
|
generalGroup.writeEntry(CFG_KEY_HOMESCREEN_COLS, m_homeScreenColumns);
|
||||||
m_homeScreen->config().writeEntry(CFG_KEY_LOCK_LAYOUT, m_lockLayout);
|
generalGroup.writeEntry(CFG_KEY_SHOW_PAGES_APPLABELS, m_showPagesAppLabels);
|
||||||
m_homeScreen->config().writeEntry(CFG_KEY_DELEGATE_ICON_SIZE, m_delegateIconSize);
|
generalGroup.writeEntry(CFG_KEY_SHOW_FAVORITES_APPLABELS, m_showFavouritesAppLabels);
|
||||||
m_homeScreen->config().writeEntry(CFG_KEY_SHOW_FAVORITES_BAR_BACKGROUND, m_showFavouritesBarBackground);
|
generalGroup.writeEntry(CFG_KEY_LOCK_LAYOUT, m_lockLayout);
|
||||||
m_homeScreen->config().writeEntry(CFG_KEY_PAGE_TRANSITION_EFFECT, (int)m_pageTransitionEffect);
|
generalGroup.writeEntry(CFG_KEY_DELEGATE_ICON_SIZE, m_delegateIconSize);
|
||||||
m_homeScreen->config().writeEntry(CFG_KEY_SHOW_WALLPAPER_BLUR, (int)m_wallpaperBlurEffect);
|
generalGroup.writeEntry(CFG_KEY_SHOW_FAVORITES_BAR_BACKGROUND, m_showFavouritesBarBackground);
|
||||||
m_homeScreen->config().writeEntry(CFG_KEY_DOUBLE_TAP_TO_LOCK, m_doubleTapToLock);
|
generalGroup.writeEntry(CFG_KEY_PAGE_TRANSITION_EFFECT, (int)m_pageTransitionEffect);
|
||||||
|
generalGroup.writeEntry(CFG_KEY_SHOW_WALLPAPER_BLUR, (int)m_wallpaperBlurEffect);
|
||||||
|
generalGroup.writeEntry(CFG_KEY_DOUBLE_TAP_TO_LOCK, m_doubleTapToLock);
|
||||||
|
|
||||||
Q_EMIT m_homeScreen->configNeedsSaving();
|
Q_EMIT m_homeScreen->configNeedsSaving();
|
||||||
}
|
}
|
||||||
|
|
@ -194,16 +228,20 @@ void FolioSettings::load()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_homeScreenRows = m_homeScreen->config().readEntry(CFG_KEY_HOMESCREEN_ROWS, 5);
|
migrateConfigFromPlasma6_4();
|
||||||
m_homeScreenColumns = m_homeScreen->config().readEntry(CFG_KEY_HOMESCREEN_COLS, 4);
|
|
||||||
m_showPagesAppLabels = m_homeScreen->config().readEntry(CFG_KEY_SHOW_PAGES_APPLABELS, true);
|
auto generalGroup = generalConfigGroup();
|
||||||
m_showFavouritesAppLabels = m_homeScreen->config().readEntry(CFG_KEY_SHOW_FAVORITES_APPLABELS, false);
|
|
||||||
m_lockLayout = m_homeScreen->config().readEntry(CFG_KEY_LOCK_LAYOUT, false);
|
m_homeScreenRows = generalGroup.readEntry(CFG_KEY_HOMESCREEN_ROWS, 5);
|
||||||
m_delegateIconSize = m_homeScreen->config().readEntry(CFG_KEY_DELEGATE_ICON_SIZE, 48);
|
m_homeScreenColumns = generalGroup.readEntry(CFG_KEY_HOMESCREEN_COLS, 4);
|
||||||
m_showFavouritesBarBackground = m_homeScreen->config().readEntry(CFG_KEY_SHOW_FAVORITES_BAR_BACKGROUND, true);
|
m_showPagesAppLabels = generalGroup.readEntry(CFG_KEY_SHOW_PAGES_APPLABELS, true);
|
||||||
m_pageTransitionEffect = static_cast<PageTransitionEffect>(m_homeScreen->config().readEntry(CFG_KEY_PAGE_TRANSITION_EFFECT, (int)SlideTransition));
|
m_showFavouritesAppLabels = generalGroup.readEntry(CFG_KEY_SHOW_FAVORITES_APPLABELS, false);
|
||||||
m_wallpaperBlurEffect = static_cast<WallpaperBlurEffect>(m_homeScreen->config().readEntry(CFG_KEY_SHOW_WALLPAPER_BLUR, (int)Full));
|
m_lockLayout = generalGroup.readEntry(CFG_KEY_LOCK_LAYOUT, false);
|
||||||
m_doubleTapToLock = m_homeScreen->config().readEntry(CFG_KEY_DOUBLE_TAP_TO_LOCK, true);
|
m_delegateIconSize = generalGroup.readEntry(CFG_KEY_DELEGATE_ICON_SIZE, 48);
|
||||||
|
m_showFavouritesBarBackground = generalGroup.readEntry(CFG_KEY_SHOW_FAVORITES_BAR_BACKGROUND, true);
|
||||||
|
m_pageTransitionEffect = static_cast<PageTransitionEffect>(generalGroup.readEntry(CFG_KEY_PAGE_TRANSITION_EFFECT, (int)SlideTransition));
|
||||||
|
m_wallpaperBlurEffect = static_cast<WallpaperBlurEffect>(generalGroup.readEntry(CFG_KEY_SHOW_WALLPAPER_BLUR, (int)Full));
|
||||||
|
m_doubleTapToLock = generalGroup.readEntry(CFG_KEY_DOUBLE_TAP_TO_LOCK, true);
|
||||||
|
|
||||||
Q_EMIT homeScreenRowsChanged();
|
Q_EMIT homeScreenRowsChanged();
|
||||||
Q_EMIT homeScreenColumnsChanged();
|
Q_EMIT homeScreenColumnsChanged();
|
||||||
|
|
@ -211,6 +249,8 @@ void FolioSettings::load()
|
||||||
Q_EMIT showFavouritesAppLabelsChanged();
|
Q_EMIT showFavouritesAppLabelsChanged();
|
||||||
Q_EMIT lockLayoutChanged();
|
Q_EMIT lockLayoutChanged();
|
||||||
Q_EMIT delegateIconSizeChanged();
|
Q_EMIT delegateIconSizeChanged();
|
||||||
|
Q_EMIT showFavouritesBarBackgroundChanged();
|
||||||
|
Q_EMIT pageTransitionEffectChanged();
|
||||||
Q_EMIT wallpaperBlurEffectChanged();
|
Q_EMIT wallpaperBlurEffectChanged();
|
||||||
Q_EMIT doubleTapToLockChanged();
|
Q_EMIT doubleTapToLockChanged();
|
||||||
}
|
}
|
||||||
|
|
@ -229,7 +269,7 @@ bool FolioSettings::saveLayoutToFile(QString path)
|
||||||
QJsonArray pages = m_homeScreen->pageListModel()->exportToJson();
|
QJsonArray pages = m_homeScreen->pageListModel()->exportToJson();
|
||||||
|
|
||||||
QJsonObject obj;
|
QJsonObject obj;
|
||||||
obj[QStringLiteral("Favourites")] = favourites;
|
obj[QStringLiteral("Favorites")] = favourites;
|
||||||
obj[QStringLiteral("Pages")] = pages;
|
obj[QStringLiteral("Pages")] = pages;
|
||||||
|
|
||||||
QByteArray data = QJsonDocument(obj).toJson(QJsonDocument::Compact);
|
QByteArray data = QJsonDocument(obj).toJson(QJsonDocument::Compact);
|
||||||
|
|
@ -269,8 +309,15 @@ bool FolioSettings::loadLayoutFromFile(QString path)
|
||||||
QJsonDocument doc = QJsonDocument::fromJson(contents.toUtf8());
|
QJsonDocument doc = QJsonDocument::fromJson(contents.toUtf8());
|
||||||
QJsonObject obj = doc.object();
|
QJsonObject obj = doc.object();
|
||||||
|
|
||||||
// TODO error checking
|
// Parse JSON
|
||||||
|
// TODO: error checking
|
||||||
|
|
||||||
|
if (obj.find(QStringLiteral("Favorites")) != obj.end()) {
|
||||||
|
m_homeScreen->favouritesModel()->loadFromJson(obj[QStringLiteral("Favorites")].toArray());
|
||||||
|
} else {
|
||||||
|
// For legacy purposes, the key used to have a different spelling
|
||||||
m_homeScreen->favouritesModel()->loadFromJson(obj[QStringLiteral("Favourites")].toArray());
|
m_homeScreen->favouritesModel()->loadFromJson(obj[QStringLiteral("Favourites")].toArray());
|
||||||
|
}
|
||||||
m_homeScreen->pageListModel()->loadFromJson(obj[QStringLiteral("Pages")].toArray());
|
m_homeScreen->pageListModel()->loadFromJson(obj[QStringLiteral("Pages")].toArray());
|
||||||
|
|
||||||
m_homeScreen->favouritesModel()->save();
|
m_homeScreen->favouritesModel()->save();
|
||||||
|
|
@ -278,3 +325,44 @@ bool FolioSettings::loadLayoutFromFile(QString path)
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
KConfigGroup FolioSettings::generalConfigGroup() const
|
||||||
|
{
|
||||||
|
if (!m_homeScreen) {
|
||||||
|
return KConfigGroup{};
|
||||||
|
}
|
||||||
|
|
||||||
|
return m_homeScreen->config().group(CFG_GROUP_FOLIO);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FolioSettings::migrateConfigFromPlasma6_4()
|
||||||
|
{
|
||||||
|
// Migrate config options (from before Plasma 6.5) from the root config group to [General]
|
||||||
|
// When adding new config options, do not update this function!
|
||||||
|
|
||||||
|
auto oldConfigGroup = m_homeScreen->config();
|
||||||
|
auto generalGroup = generalConfigGroup();
|
||||||
|
|
||||||
|
// Function to migrate a single key
|
||||||
|
auto migrate = [&oldConfigGroup, &generalGroup]<typename T>(const QString &newKey, const QString &oldKey, const T &oldDefaultValue) {
|
||||||
|
if (!oldConfigGroup.hasKey(oldKey) || generalGroup.hasKey(newKey)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
generalGroup.writeEntry(newKey, oldConfigGroup.readEntry(oldKey, oldDefaultValue));
|
||||||
|
oldConfigGroup.deleteEntry(oldKey);
|
||||||
|
};
|
||||||
|
|
||||||
|
migrate(CFG_KEY_FAVORITES, u"Favourites"_s, u"{}"_s);
|
||||||
|
migrate(CFG_KEY_PAGES, u"Pages"_s, u"[[]]"_s);
|
||||||
|
migrate(CFG_KEY_HOMESCREEN_ROWS, u"homeScreenRows"_s, 5);
|
||||||
|
migrate(CFG_KEY_HOMESCREEN_COLS, u"homeScreenColumns"_s, 4);
|
||||||
|
migrate(CFG_KEY_SHOW_PAGES_APPLABELS, u"showPagesAppLabels"_s, true);
|
||||||
|
migrate(CFG_KEY_SHOW_FAVORITES_APPLABELS, u"showFavoritesAppLabels"_s, false);
|
||||||
|
migrate(CFG_KEY_LOCK_LAYOUT, u"lockLayout"_s, false);
|
||||||
|
migrate(CFG_KEY_DELEGATE_ICON_SIZE, u"delegateIconSize"_s, 48);
|
||||||
|
migrate(CFG_KEY_SHOW_FAVORITES_BAR_BACKGROUND, u"showFavoritesBarBackground"_s, true);
|
||||||
|
migrate(CFG_KEY_PAGE_TRANSITION_EFFECT, u"pageTransitionEffect"_s, (int)SlideTransition);
|
||||||
|
migrate(CFG_KEY_SHOW_WALLPAPER_BLUR, u"wallpaperBlurEffect"_s, (int)Full);
|
||||||
|
|
||||||
|
m_homeScreen->config().sync();
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,14 @@ public:
|
||||||
};
|
};
|
||||||
Q_ENUM(WallpaperBlurEffect)
|
Q_ENUM(WallpaperBlurEffect)
|
||||||
|
|
||||||
|
// JSON object
|
||||||
|
QString favorites() const;
|
||||||
|
void setFavorites(const QString &favoritesJson);
|
||||||
|
|
||||||
|
// JSON object
|
||||||
|
QString pages() const;
|
||||||
|
void setPages(const QString &pagesJson);
|
||||||
|
|
||||||
// number of rows and columns in the config for the homescreen
|
// number of rows and columns in the config for the homescreen
|
||||||
// NOTE: use HomeScreenState.pageRows() instead in UI logic since we may have the rows and
|
// NOTE: use HomeScreenState.pageRows() instead in UI logic since we may have the rows and
|
||||||
// columns swapped (in landscape layouts)
|
// columns swapped (in landscape layouts)
|
||||||
|
|
@ -98,6 +106,10 @@ Q_SIGNALS:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void save();
|
void save();
|
||||||
|
KConfigGroup generalConfigGroup() const;
|
||||||
|
|
||||||
|
// Legacy
|
||||||
|
void migrateConfigFromPlasma6_4();
|
||||||
|
|
||||||
HomeScreen *m_homeScreen{nullptr};
|
HomeScreen *m_homeScreen{nullptr};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -117,8 +117,7 @@ void PageListModel::save()
|
||||||
QJsonArray arr = exportToJson();
|
QJsonArray arr = exportToJson();
|
||||||
QByteArray data = QJsonDocument(arr).toJson(QJsonDocument::Compact);
|
QByteArray data = QJsonDocument(arr).toJson(QJsonDocument::Compact);
|
||||||
|
|
||||||
m_homeScreen->config().writeEntry("Pages", QString::fromStdString(data.toStdString()));
|
m_homeScreen->folioSettings()->setPages(QString::fromStdString(data.toStdString()));
|
||||||
Q_EMIT m_homeScreen->configNeedsSaving();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PageListModel::load()
|
void PageListModel::load()
|
||||||
|
|
@ -127,7 +126,7 @@ void PageListModel::load()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QJsonDocument doc = QJsonDocument::fromJson(m_homeScreen->config().readEntry("Pages", "{}").toUtf8());
|
QJsonDocument doc = QJsonDocument::fromJson(m_homeScreen->folioSettings()->pages().toUtf8());
|
||||||
loadFromJson(doc.array());
|
loadFromJson(doc.array());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue