mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-04-26 14:23: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();
|
||||
QByteArray data = QJsonDocument(arr).toJson(QJsonDocument::Compact);
|
||||
|
||||
m_homeScreen->config().writeEntry("Favourites", QString::fromStdString(data.toStdString()));
|
||||
Q_EMIT m_homeScreen->configNeedsSaving();
|
||||
m_homeScreen->folioSettings()->setFavorites(QString::fromStdString(data.toStdString()));
|
||||
}
|
||||
|
||||
void FavouritesModel::load()
|
||||
|
|
@ -262,7 +261,7 @@ void FavouritesModel::load()
|
|||
return;
|
||||
}
|
||||
|
||||
QJsonDocument doc = QJsonDocument::fromJson(m_homeScreen->config().readEntry("Favourites", "{}").toUtf8());
|
||||
QJsonDocument doc = QJsonDocument::fromJson(m_homeScreen->folioSettings()->favorites().toUtf8());
|
||||
loadFromJson(doc.array());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -10,6 +10,14 @@
|
|||
#include <QJsonDocument>
|
||||
#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_COLS = QStringLiteral("homeScreenColumns");
|
||||
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
|
||||
{
|
||||
// ensure that this is fetched fast and cached (it is called extremely often)
|
||||
|
|
@ -174,16 +206,18 @@ void FolioSettings::save()
|
|||
return;
|
||||
}
|
||||
|
||||
m_homeScreen->config().writeEntry(CFG_KEY_HOMESCREEN_ROWS, m_homeScreenRows);
|
||||
m_homeScreen->config().writeEntry(CFG_KEY_HOMESCREEN_COLS, m_homeScreenColumns);
|
||||
m_homeScreen->config().writeEntry(CFG_KEY_SHOW_PAGES_APPLABELS, m_showPagesAppLabels);
|
||||
m_homeScreen->config().writeEntry(CFG_KEY_SHOW_FAVORITES_APPLABELS, m_showFavouritesAppLabels);
|
||||
m_homeScreen->config().writeEntry(CFG_KEY_LOCK_LAYOUT, m_lockLayout);
|
||||
m_homeScreen->config().writeEntry(CFG_KEY_DELEGATE_ICON_SIZE, m_delegateIconSize);
|
||||
m_homeScreen->config().writeEntry(CFG_KEY_SHOW_FAVORITES_BAR_BACKGROUND, m_showFavouritesBarBackground);
|
||||
m_homeScreen->config().writeEntry(CFG_KEY_PAGE_TRANSITION_EFFECT, (int)m_pageTransitionEffect);
|
||||
m_homeScreen->config().writeEntry(CFG_KEY_SHOW_WALLPAPER_BLUR, (int)m_wallpaperBlurEffect);
|
||||
m_homeScreen->config().writeEntry(CFG_KEY_DOUBLE_TAP_TO_LOCK, m_doubleTapToLock);
|
||||
auto generalGroup = generalConfigGroup();
|
||||
|
||||
generalGroup.writeEntry(CFG_KEY_HOMESCREEN_ROWS, m_homeScreenRows);
|
||||
generalGroup.writeEntry(CFG_KEY_HOMESCREEN_COLS, m_homeScreenColumns);
|
||||
generalGroup.writeEntry(CFG_KEY_SHOW_PAGES_APPLABELS, m_showPagesAppLabels);
|
||||
generalGroup.writeEntry(CFG_KEY_SHOW_FAVORITES_APPLABELS, m_showFavouritesAppLabels);
|
||||
generalGroup.writeEntry(CFG_KEY_LOCK_LAYOUT, m_lockLayout);
|
||||
generalGroup.writeEntry(CFG_KEY_DELEGATE_ICON_SIZE, m_delegateIconSize);
|
||||
generalGroup.writeEntry(CFG_KEY_SHOW_FAVORITES_BAR_BACKGROUND, m_showFavouritesBarBackground);
|
||||
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();
|
||||
}
|
||||
|
|
@ -194,16 +228,20 @@ void FolioSettings::load()
|
|||
return;
|
||||
}
|
||||
|
||||
m_homeScreenRows = m_homeScreen->config().readEntry(CFG_KEY_HOMESCREEN_ROWS, 5);
|
||||
m_homeScreenColumns = m_homeScreen->config().readEntry(CFG_KEY_HOMESCREEN_COLS, 4);
|
||||
m_showPagesAppLabels = m_homeScreen->config().readEntry(CFG_KEY_SHOW_PAGES_APPLABELS, true);
|
||||
m_showFavouritesAppLabels = m_homeScreen->config().readEntry(CFG_KEY_SHOW_FAVORITES_APPLABELS, false);
|
||||
m_lockLayout = m_homeScreen->config().readEntry(CFG_KEY_LOCK_LAYOUT, false);
|
||||
m_delegateIconSize = m_homeScreen->config().readEntry(CFG_KEY_DELEGATE_ICON_SIZE, 48);
|
||||
m_showFavouritesBarBackground = m_homeScreen->config().readEntry(CFG_KEY_SHOW_FAVORITES_BAR_BACKGROUND, true);
|
||||
m_pageTransitionEffect = static_cast<PageTransitionEffect>(m_homeScreen->config().readEntry(CFG_KEY_PAGE_TRANSITION_EFFECT, (int)SlideTransition));
|
||||
m_wallpaperBlurEffect = static_cast<WallpaperBlurEffect>(m_homeScreen->config().readEntry(CFG_KEY_SHOW_WALLPAPER_BLUR, (int)Full));
|
||||
m_doubleTapToLock = m_homeScreen->config().readEntry(CFG_KEY_DOUBLE_TAP_TO_LOCK, true);
|
||||
migrateConfigFromPlasma6_4();
|
||||
|
||||
auto generalGroup = generalConfigGroup();
|
||||
|
||||
m_homeScreenRows = generalGroup.readEntry(CFG_KEY_HOMESCREEN_ROWS, 5);
|
||||
m_homeScreenColumns = generalGroup.readEntry(CFG_KEY_HOMESCREEN_COLS, 4);
|
||||
m_showPagesAppLabels = generalGroup.readEntry(CFG_KEY_SHOW_PAGES_APPLABELS, true);
|
||||
m_showFavouritesAppLabels = generalGroup.readEntry(CFG_KEY_SHOW_FAVORITES_APPLABELS, false);
|
||||
m_lockLayout = generalGroup.readEntry(CFG_KEY_LOCK_LAYOUT, false);
|
||||
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 homeScreenColumnsChanged();
|
||||
|
|
@ -211,6 +249,8 @@ void FolioSettings::load()
|
|||
Q_EMIT showFavouritesAppLabelsChanged();
|
||||
Q_EMIT lockLayoutChanged();
|
||||
Q_EMIT delegateIconSizeChanged();
|
||||
Q_EMIT showFavouritesBarBackgroundChanged();
|
||||
Q_EMIT pageTransitionEffectChanged();
|
||||
Q_EMIT wallpaperBlurEffectChanged();
|
||||
Q_EMIT doubleTapToLockChanged();
|
||||
}
|
||||
|
|
@ -229,7 +269,7 @@ bool FolioSettings::saveLayoutToFile(QString path)
|
|||
QJsonArray pages = m_homeScreen->pageListModel()->exportToJson();
|
||||
|
||||
QJsonObject obj;
|
||||
obj[QStringLiteral("Favourites")] = favourites;
|
||||
obj[QStringLiteral("Favorites")] = favourites;
|
||||
obj[QStringLiteral("Pages")] = pages;
|
||||
|
||||
QByteArray data = QJsonDocument(obj).toJson(QJsonDocument::Compact);
|
||||
|
|
@ -269,8 +309,15 @@ bool FolioSettings::loadLayoutFromFile(QString path)
|
|||
QJsonDocument doc = QJsonDocument::fromJson(contents.toUtf8());
|
||||
QJsonObject obj = doc.object();
|
||||
|
||||
// TODO error checking
|
||||
m_homeScreen->favouritesModel()->loadFromJson(obj[QStringLiteral("Favourites")].toArray());
|
||||
// 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->pageListModel()->loadFromJson(obj[QStringLiteral("Pages")].toArray());
|
||||
|
||||
m_homeScreen->favouritesModel()->save();
|
||||
|
|
@ -278,3 +325,44 @@ bool FolioSettings::loadLayoutFromFile(QString path)
|
|||
|
||||
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)
|
||||
|
||||
// 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
|
||||
// NOTE: use HomeScreenState.pageRows() instead in UI logic since we may have the rows and
|
||||
// columns swapped (in landscape layouts)
|
||||
|
|
@ -98,6 +106,10 @@ Q_SIGNALS:
|
|||
|
||||
private:
|
||||
void save();
|
||||
KConfigGroup generalConfigGroup() const;
|
||||
|
||||
// Legacy
|
||||
void migrateConfigFromPlasma6_4();
|
||||
|
||||
HomeScreen *m_homeScreen{nullptr};
|
||||
|
||||
|
|
|
|||
|
|
@ -117,8 +117,7 @@ void PageListModel::save()
|
|||
QJsonArray arr = exportToJson();
|
||||
QByteArray data = QJsonDocument(arr).toJson(QJsonDocument::Compact);
|
||||
|
||||
m_homeScreen->config().writeEntry("Pages", QString::fromStdString(data.toStdString()));
|
||||
Q_EMIT m_homeScreen->configNeedsSaving();
|
||||
m_homeScreen->folioSettings()->setPages(QString::fromStdString(data.toStdString()));
|
||||
}
|
||||
|
||||
void PageListModel::load()
|
||||
|
|
@ -127,7 +126,7 @@ void PageListModel::load()
|
|||
return;
|
||||
}
|
||||
|
||||
QJsonDocument doc = QJsonDocument::fromJson(m_homeScreen->config().readEntry("Pages", "{}").toUtf8());
|
||||
QJsonDocument doc = QJsonDocument::fromJson(m_homeScreen->folioSettings()->pages().toUtf8());
|
||||
loadFromJson(doc.array());
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue