1
0
mirror of https://github.com/KDE/latte-dock.git synced 2025-04-02 10:50:09 +03:00
latte-dock/app/universalsettings.cpp
Michail Vourlakos 5803366cb3 support no-unified global shortcuts
--v0.8 introduced unified global shortcuts for all
cases, that means that applets are also taken into
account for Latte activation/new instance global
shortcuts. A new parameter is introduced with
the patch at Latte global settings file called
"unifiedGlobalShortcuts", the user can set that
parameter to false before Latte startup in order
to use only global shortcuts relevant to the
Latte plasmoid.
2018-07-21 19:41:57 +03:00

419 lines
12 KiB
C++

/*
* Copyright 2017 Smith AR <audoban@openmailbox.org>
* Michail Vourlakos <mvourlakos@gmail.com>
*
* This file is part of Latte-Dock
*
* Latte-Dock is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* Latte-Dock is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "universalsettings.h"
#include "dockcorona.h"
#include "sortedactivitiesmodel.h"
#include <QDir>
#include <KActivities/Consumer>
namespace Latte {
UniversalSettings::UniversalSettings(KSharedConfig::Ptr config, QObject *parent)
: QObject(parent),
m_config(config),
m_universalGroup(KConfigGroup(config, QStringLiteral("UniversalSettings")))
{
connect(this, &UniversalSettings::canDisableBordersChanged, this, &UniversalSettings::saveConfig);
connect(this, &UniversalSettings::currentLayoutNameChanged, this, &UniversalSettings::saveConfig);
connect(this, &UniversalSettings::downloadWindowSizeChanged, this, &UniversalSettings::saveConfig);
connect(this, &UniversalSettings::lastNonAssignedLayoutNameChanged, this, &UniversalSettings::saveConfig);
connect(this, &UniversalSettings::launchersChanged, this, &UniversalSettings::saveConfig);
connect(this, &UniversalSettings::layoutsColumnWidthsChanged, this, &UniversalSettings::saveConfig);
connect(this, &UniversalSettings::layoutsMemoryUsageChanged, this, &UniversalSettings::saveConfig);
connect(this, &UniversalSettings::layoutsWindowSizeChanged, this, &UniversalSettings::saveConfig);
connect(this, &UniversalSettings::mouseSensitivityChanged, this, &UniversalSettings::saveConfig);
connect(this, &UniversalSettings::screenTrackerIntervalChanged, this, &UniversalSettings::saveConfig);
connect(this, &UniversalSettings::showInfoWindowChanged, this, &UniversalSettings::saveConfig);
connect(this, &UniversalSettings::unifiedGlobalShortcutsChanged, this, &UniversalSettings::saveConfig);
connect(this, &UniversalSettings::versionChanged, this, &UniversalSettings::saveConfig);
}
UniversalSettings::~UniversalSettings()
{
saveConfig();
cleanupSettings();
if (m_runningActivitiesModel) {
m_runningActivitiesModel->deleteLater();
}
}
void UniversalSettings::load()
{
//! check if user has set the autostart option
bool autostartUserSet = m_universalGroup.readEntry("userConfiguredAutostart", false);
if (!autostartUserSet && !autostart()) {
setAutostart(true);
}
//! load configuration
loadConfig();
}
bool UniversalSettings::showInfoWindow() const
{
return m_showInfoWindow;
}
void UniversalSettings::setShowInfoWindow(bool show)
{
if (m_showInfoWindow == show) {
return;
}
m_showInfoWindow = show;
emit showInfoWindowChanged();
}
bool UniversalSettings::unifiedGlobalShortcuts() const
{
return m_unifiedGlobalShortcuts;
}
void UniversalSettings::setUnifiedGlobalShortcuts(bool unified)
{
if (m_unifiedGlobalShortcuts == unified) {
return;
}
m_unifiedGlobalShortcuts = unified;
emit unifiedGlobalShortcutsChanged();
}
int UniversalSettings::version() const
{
return m_version;
}
void UniversalSettings::setVersion(int ver)
{
if (m_version == ver) {
return;
}
m_version = ver;
emit versionChanged();
}
int UniversalSettings::screenTrackerInterval() const
{
return m_screenTrackerInterval;
}
void UniversalSettings::setScreenTrackerInterval(int duration)
{
if (m_screenTrackerInterval == duration) {
return;
}
m_screenTrackerInterval = duration;
emit screenTrackerIntervalChanged();
}
QString UniversalSettings::currentLayoutName() const
{
return m_currentLayoutName;
}
void UniversalSettings::setCurrentLayoutName(QString layoutName)
{
if (m_currentLayoutName == layoutName) {
return;
}
m_currentLayoutName = layoutName;
emit currentLayoutNameChanged();
}
QString UniversalSettings::lastNonAssignedLayoutName() const
{
return m_lastNonAssignedLayoutName;
}
void UniversalSettings::setLastNonAssignedLayoutName(QString layoutName)
{
if (m_lastNonAssignedLayoutName == layoutName) {
return;
}
m_lastNonAssignedLayoutName = layoutName;
emit lastNonAssignedLayoutNameChanged();
}
QSize UniversalSettings::downloadWindowSize() const
{
return m_downloadWindowSize;
}
void UniversalSettings::setDownloadWindowSize(QSize size)
{
if (m_downloadWindowSize == size) {
return;
}
m_downloadWindowSize = size;
emit downloadWindowSizeChanged();
}
QSize UniversalSettings::layoutsWindowSize() const
{
return m_layoutsWindowSize;
}
void UniversalSettings::setLayoutsWindowSize(QSize size)
{
if (m_layoutsWindowSize == size) {
return;
}
m_layoutsWindowSize = size;
emit layoutsWindowSizeChanged();
}
QStringList UniversalSettings::layoutsColumnWidths() const
{
return m_layoutsColumnWidths;
}
void UniversalSettings::setLayoutsColumnWidths(QStringList widths)
{
if (m_layoutsColumnWidths == widths) {
return;
}
m_layoutsColumnWidths = widths;
emit layoutsColumnWidthsChanged();
}
QStringList UniversalSettings::launchers() const
{
return m_launchers;
}
void UniversalSettings::setLaunchers(QStringList launcherList)
{
if (m_launchers == launcherList) {
return;
}
m_launchers = launcherList;
emit launchersChanged();
}
bool UniversalSettings::autostart() const
{
QFile autostartFile(QDir::homePath() + "/.config/autostart/org.kde.latte-dock.desktop");
return autostartFile.exists();
}
void UniversalSettings::setAutostart(bool state)
{
//! remove old autostart file
QFile oldAutostartFile(QDir::homePath() + "/.config/autostart/latte-dock.desktop");
if (oldAutostartFile.exists()) {
oldAutostartFile.remove();
}
//! end of removal of old autostart file
QFile autostartFile(QDir::homePath() + "/.config/autostart/org.kde.latte-dock.desktop");
QFile metaFile("/usr/share/applications/org.kde.latte-dock.desktop");
if (!state && autostartFile.exists()) {
//! the first time that the user disables the autostart, this is recorded
//! and from now own it will not be recreated it in the beginning
if (!m_universalGroup.readEntry("userConfiguredAutostart", false)) {
m_universalGroup.writeEntry("userConfiguredAutostart", true);
}
autostartFile.remove();
emit autostartChanged();
} else if (state && metaFile.exists()) {
metaFile.copy(autostartFile.fileName());
//! I havent added the flag "OnlyShowIn=KDE;" into the autostart file
//! because I fall onto a Plasma 5.8 case that this flag
//! didnt let the plasma desktop to start
emit autostartChanged();
}
}
bool UniversalSettings::canDisableBorders() const
{
return m_canDisableBorders;
}
void UniversalSettings::setCanDisableBorders(bool enable)
{
if (m_canDisableBorders == enable) {
return;
}
m_canDisableBorders = enable;
emit canDisableBordersChanged();
}
Dock::LayoutsMemoryUsage UniversalSettings::layoutsMemoryUsage() const
{
return m_memoryUsage;
}
void UniversalSettings::setLayoutsMemoryUsage(Dock::LayoutsMemoryUsage layoutsMemoryUsage)
{
if (m_memoryUsage == layoutsMemoryUsage) {
return;
}
m_memoryUsage = layoutsMemoryUsage;
emit layoutsMemoryUsageChanged();
}
Dock::MouseSensitivity UniversalSettings::mouseSensitivity() const
{
return m_mouseSensitivity;
}
void UniversalSettings::setMouseSensitivity(Dock::MouseSensitivity sensitivity)
{
if (m_mouseSensitivity == sensitivity) {
return;
}
m_mouseSensitivity = sensitivity;
emit mouseSensitivityChanged();
}
void UniversalSettings::loadConfig()
{
m_version = m_universalGroup.readEntry("version", 1);
m_canDisableBorders = m_universalGroup.readEntry("canDisableBorders", false);
m_currentLayoutName = m_universalGroup.readEntry("currentLayout", QString());
m_downloadWindowSize = m_universalGroup.readEntry("downloadWindowSize", QSize(800, 550));
m_lastNonAssignedLayoutName = m_universalGroup.readEntry("lastNonAssignedLayout", QString());
m_layoutsWindowSize = m_universalGroup.readEntry("layoutsWindowSize", QSize(700, 450));
m_layoutsColumnWidths = m_universalGroup.readEntry("layoutsColumnWidths", QStringList());
m_launchers = m_universalGroup.readEntry("launchers", QStringList());
m_screenTrackerInterval = m_universalGroup.readEntry("screenTrackerInterval", 2500);
m_showInfoWindow = m_universalGroup.readEntry("showInfoWindow", true);
m_unifiedGlobalShortcuts = m_universalGroup.readEntry("unifiedGlobalShortcuts", true);
m_memoryUsage = static_cast<Dock::LayoutsMemoryUsage>(m_universalGroup.readEntry("memoryUsage", (int)Dock::SingleLayout));
m_mouseSensitivity = static_cast<Dock::MouseSensitivity>(m_universalGroup.readEntry("mouseSensitivity", (int)Dock::HighSensitivity));
}
void UniversalSettings::saveConfig()
{
m_universalGroup.writeEntry("version", m_version);
m_universalGroup.writeEntry("canDisableBorders", m_canDisableBorders);
m_universalGroup.writeEntry("currentLayout", m_currentLayoutName);
m_universalGroup.writeEntry("downloadWindowSize", m_downloadWindowSize);
m_universalGroup.writeEntry("lastNonAssignedLayout", m_lastNonAssignedLayoutName);
m_universalGroup.writeEntry("layoutsWindowSize", m_layoutsWindowSize);
m_universalGroup.writeEntry("layoutsColumnWidths", m_layoutsColumnWidths);
m_universalGroup.writeEntry("launchers", m_launchers);
m_universalGroup.writeEntry("screenTrackerInterval", m_screenTrackerInterval);
m_universalGroup.writeEntry("showInfoWindow", m_showInfoWindow);
m_universalGroup.writeEntry("unifiedGlobalShortcuts", m_unifiedGlobalShortcuts);
m_universalGroup.writeEntry("memoryUsage", (int)m_memoryUsage);
m_universalGroup.writeEntry("mouseSensitivity", (int)m_mouseSensitivity);
m_universalGroup.sync();
}
void UniversalSettings::cleanupSettings()
{
KConfigGroup containments = KConfigGroup(m_config, QStringLiteral("Containments"));
containments.deleteGroup();
containments.sync();
}
QString UniversalSettings::splitterIconPath()
{
auto *dockCorona = qobject_cast<DockCorona *>(parent());
if (dockCorona) {
return dockCorona->kPackage().filePath("splitter");
}
return "";
}
QString UniversalSettings::trademarkIconPath()
{
auto *dockCorona = qobject_cast<DockCorona *>(parent());
if (dockCorona) {
return dockCorona->kPackage().filePath("trademark");
}
return "";
}
QAbstractItemModel *UniversalSettings::runningActivitiesModel() const
{
return m_runningActivitiesModel;
}
void UniversalSettings::setRunningActivitiesModel(SortedActivitiesModel *model)
{
if (m_runningActivitiesModel == model) {
return;
}
if (m_runningActivitiesModel) {
m_runningActivitiesModel->deleteLater();
}
m_runningActivitiesModel = model;
emit runningActivitiesModelChanged();
}
void UniversalSettings::enableActivitiesModel()
{
if (!m_runningActivitiesModel) {
setRunningActivitiesModel(new SortedActivitiesModel({KActivities::Info::Running, KActivities::Info::Stopping}, this));
}
}
void UniversalSettings::disableActivitiesModel()
{
if (m_runningActivitiesModel) {
setRunningActivitiesModel(nullptr);
}
}
float UniversalSettings::luminasFromFile(QString imageFile, int edge)
{
enableActivitiesModel();
return m_runningActivitiesModel->luminasFromFile(imageFile, edge);
}
}