mirror of
https://invent.kde.org/system/dolphin
synced 2024-10-28 03:21:56 +00:00
Add an option to show tabs from last time when Dolphin starts
Summary: All modern web browsers offer a function to show tabs from last time when a browser starts, and many apps today restore their prior state when they're launched. This patch implements thatfunctionality as an option and turns it on by default. The settings window is accordingly adjusted to be clear about what applies when: {F7681752} FEATURE: 413564 FIXED-IN: 20.08.0 Depends on D25106 Depends on D25219 Test Plan: With the new setting turned off: - No behavioral changes at all With the new setting turned on: - When launched from the GUI or CLI without any URLs, dolphin restores session - When rebooting with Dolphin open, it restores session normally after the system comes back (i.e. no behavioral change here) - When launched with URLs, Dolphin window is opened showing those URLs instead of restoring session - When Dolphin is already running and a new window is opened, that new window shows a single tab with the same URL as was visible in the previously-open Dolphin instance (i.e. no behavioral change here) - "Open Containing folder" functionality in other apps works regardless of whether or not Dolphin is running Reviewers: #dolphin, #vdg, feverfew, meven, elvisangelaccio, ndavis Reviewed By: #dolphin, #vdg, feverfew, elvisangelaccio, ndavis Subscribers: davidedmundson, ndavis, intika, feverfew, kfm-devel, ngraham, broulik, #dolphin Tags: #dolphin Differential Revision: https://phabricator.kde.org/D11382
This commit is contained in:
parent
b0ad83eeee
commit
caf2fe1c43
|
@ -50,6 +50,7 @@
|
||||||
#include <KActionMenu>
|
#include <KActionMenu>
|
||||||
#include <KAuthorized>
|
#include <KAuthorized>
|
||||||
#include <KConfig>
|
#include <KConfig>
|
||||||
|
#include <KConfigGui>
|
||||||
#include <KDualAction>
|
#include <KDualAction>
|
||||||
#include <KFileItemListProperties>
|
#include <KFileItemListProperties>
|
||||||
#include <KHelpMenu>
|
#include <KHelpMenu>
|
||||||
|
@ -580,6 +581,14 @@ void DolphinMainWindow::closeEvent(QCloseEvent* event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (GeneralSettings::rememberOpenedTabs()) {
|
||||||
|
KConfigGui::setSessionConfig(QStringLiteral("dolphin"), QStringLiteral("dolphin"));
|
||||||
|
KConfig *config = KConfigGui::sessionConfig();
|
||||||
|
saveGlobalProperties(config);
|
||||||
|
savePropertiesInternal(config, 1);
|
||||||
|
config->sync();
|
||||||
|
}
|
||||||
|
|
||||||
GeneralSettings::setVersion(CurrentDolphinVersion);
|
GeneralSettings::setVersion(CurrentDolphinVersion);
|
||||||
GeneralSettings::self()->save();
|
GeneralSettings::self()->save();
|
||||||
|
|
||||||
|
|
|
@ -78,36 +78,7 @@ bool Dolphin::attachToExistingInstance(const QList<QUrl>& inputUrls, bool openFi
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
QVector<QPair<QSharedPointer<OrgKdeDolphinMainWindowInterface>, QStringList>> dolphinInterfaces;
|
auto dolphinInterfaces = dolphinGuiInstances(preferredService);
|
||||||
if (!preferredService.isEmpty()) {
|
|
||||||
QSharedPointer<OrgKdeDolphinMainWindowInterface> preferredInterface(
|
|
||||||
new OrgKdeDolphinMainWindowInterface(preferredService,
|
|
||||||
QStringLiteral("/dolphin/Dolphin_1"),
|
|
||||||
QDBusConnection::sessionBus()));
|
|
||||||
if (preferredInterface->isValid() && !preferredInterface->lastError().isValid()) {
|
|
||||||
dolphinInterfaces.append(qMakePair(preferredInterface, QStringList()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Look for dolphin instances among all available dbus services.
|
|
||||||
const QStringList dbusServices = QDBusConnection::sessionBus().interface()->registeredServiceNames().value();
|
|
||||||
// Don't match the service without trailing "-" (unique instance)
|
|
||||||
const QString pattern = QStringLiteral("org.kde.dolphin-");
|
|
||||||
// Don't match the pid without leading "-"
|
|
||||||
const QString myPid = QLatin1Char('-') + QString::number(QCoreApplication::applicationPid());
|
|
||||||
for (const QString& service : dbusServices) {
|
|
||||||
if (service.startsWith(pattern) && !service.endsWith(myPid)) {
|
|
||||||
// Check if instance can handle our URLs
|
|
||||||
QSharedPointer<OrgKdeDolphinMainWindowInterface> interface(
|
|
||||||
new OrgKdeDolphinMainWindowInterface(service,
|
|
||||||
QStringLiteral("/dolphin/Dolphin_1"),
|
|
||||||
QDBusConnection::sessionBus()));
|
|
||||||
if (interface->isValid() && !interface->lastError().isValid()) {
|
|
||||||
dolphinInterfaces.append(qMakePair(interface, QStringList()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dolphinInterfaces.isEmpty()) {
|
if (dolphinInterfaces.isEmpty()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -145,3 +116,38 @@ bool Dolphin::attachToExistingInstance(const QList<QUrl>& inputUrls, bool openFi
|
||||||
}
|
}
|
||||||
return attached;
|
return attached;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QVector<QPair<QSharedPointer<OrgKdeDolphinMainWindowInterface>, QStringList>> Dolphin::dolphinGuiInstances(const QString& preferredService)
|
||||||
|
{
|
||||||
|
QVector<QPair<QSharedPointer<OrgKdeDolphinMainWindowInterface>, QStringList>> dolphinInterfaces;
|
||||||
|
if (!preferredService.isEmpty()) {
|
||||||
|
QSharedPointer<OrgKdeDolphinMainWindowInterface> preferredInterface(
|
||||||
|
new OrgKdeDolphinMainWindowInterface(preferredService,
|
||||||
|
QStringLiteral("/dolphin/Dolphin_1"),
|
||||||
|
QDBusConnection::sessionBus()));
|
||||||
|
if (preferredInterface->isValid() && !preferredInterface->lastError().isValid()) {
|
||||||
|
dolphinInterfaces.append(qMakePair(preferredInterface, QStringList()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Look for dolphin instances among all available dbus services.
|
||||||
|
const QStringList dbusServices = QDBusConnection::sessionBus().interface()->registeredServiceNames().value();
|
||||||
|
// Don't match the service without trailing "-" (unique instance)
|
||||||
|
const QString pattern = QStringLiteral("org.kde.dolphin-");
|
||||||
|
// Don't match the pid without leading "-"
|
||||||
|
const QString myPid = QLatin1Char('-') + QString::number(QCoreApplication::applicationPid());
|
||||||
|
for (const QString& service : dbusServices) {
|
||||||
|
if (service.startsWith(pattern) && !service.endsWith(myPid)) {
|
||||||
|
// Check if instance can handle our URLs
|
||||||
|
QSharedPointer<OrgKdeDolphinMainWindowInterface> interface(
|
||||||
|
new OrgKdeDolphinMainWindowInterface(service,
|
||||||
|
QStringLiteral("/dolphin/Dolphin_1"),
|
||||||
|
QDBusConnection::sessionBus()));
|
||||||
|
if (interface->isValid() && !interface->lastError().isValid()) {
|
||||||
|
dolphinInterfaces.append(qMakePair(interface, QStringList()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return dolphinInterfaces;
|
||||||
|
}
|
||||||
|
|
|
@ -24,6 +24,8 @@
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
|
||||||
|
class OrgKdeDolphinMainWindowInterface;
|
||||||
|
|
||||||
namespace Dolphin {
|
namespace Dolphin {
|
||||||
QList<QUrl> validateUris(const QStringList& uriList);
|
QList<QUrl> validateUris(const QStringList& uriList);
|
||||||
|
|
||||||
|
@ -51,6 +53,11 @@ namespace Dolphin {
|
||||||
*/
|
*/
|
||||||
bool attachToExistingInstance(const QList<QUrl>& inputUrls, bool openFiles, bool splitView, const QString& preferredService = QString());
|
bool attachToExistingInstance(const QList<QUrl>& inputUrls, bool openFiles, bool splitView, const QString& preferredService = QString());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a QVector with all GUI-capable Dolphin instances
|
||||||
|
*/
|
||||||
|
QVector<QPair<QSharedPointer<OrgKdeDolphinMainWindowInterface>, QStringList>> dolphinGuiInstances(const QString& preferredService);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: Move this somewhere global to all KDE apps, not just Dolphin
|
* TODO: Move this somewhere global to all KDE apps, not just Dolphin
|
||||||
*/
|
*/
|
||||||
|
|
31
src/main.cpp
31
src/main.cpp
|
@ -31,6 +31,7 @@
|
||||||
#include <KDBusService>
|
#include <KDBusService>
|
||||||
#include <KLocalizedString>
|
#include <KLocalizedString>
|
||||||
#include <Kdelibs4ConfigMigrator>
|
#include <Kdelibs4ConfigMigrator>
|
||||||
|
#include <KConfigGui>
|
||||||
|
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QCommandLineParser>
|
#include <QCommandLineParser>
|
||||||
|
@ -139,6 +140,9 @@ extern "C" Q_DECL_EXPORT int kdemain(int argc, char **argv)
|
||||||
const bool openFiles = parser.isSet(QStringLiteral("select"));
|
const bool openFiles = parser.isSet(QStringLiteral("select"));
|
||||||
const QStringList args = parser.positionalArguments();
|
const QStringList args = parser.positionalArguments();
|
||||||
QList<QUrl> urls = Dolphin::validateUris(args);
|
QList<QUrl> urls = Dolphin::validateUris(args);
|
||||||
|
// We later mutate urls, so we need to store if it was empty originally
|
||||||
|
const bool startedWithURLs = !urls.isEmpty();
|
||||||
|
|
||||||
|
|
||||||
if (parser.isSet(QStringLiteral("daemon"))) {
|
if (parser.isSet(QStringLiteral("daemon"))) {
|
||||||
KDBusService dolphinDBusService;
|
KDBusService dolphinDBusService;
|
||||||
|
@ -154,7 +158,7 @@ extern "C" Q_DECL_EXPORT int kdemain(int argc, char **argv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (urls.isEmpty()) {
|
if (!startedWithURLs) {
|
||||||
// We need at least one URL to open Dolphin
|
// We need at least one URL to open Dolphin
|
||||||
urls.append(Dolphin::homeUrl());
|
urls.append(Dolphin::homeUrl());
|
||||||
}
|
}
|
||||||
|
@ -174,12 +178,25 @@ extern "C" Q_DECL_EXPORT int kdemain(int argc, char **argv)
|
||||||
|
|
||||||
mainWindow->show();
|
mainWindow->show();
|
||||||
|
|
||||||
if (app.isSessionRestored()) {
|
if (!app.isSessionRestored()) {
|
||||||
const QString className = KXmlGuiWindow::classNameOfToplevel(1);
|
KConfigGui::setSessionConfig(QStringLiteral("dolphin"), QStringLiteral("dolphin"));
|
||||||
if (className == QLatin1String("DolphinMainWindow")) {
|
}
|
||||||
mainWindow->restore(1);
|
|
||||||
} else {
|
// Only restore session if:
|
||||||
qCWarning(DolphinDebug) << "Unknown class " << className << " in session saved data!";
|
// 1. Dolphin was not started with command line args
|
||||||
|
// 2. The "remember state" setting is enabled or session restoration after
|
||||||
|
// reboot is in use
|
||||||
|
// 3. There is a session available to restore
|
||||||
|
if (!startedWithURLs && (app.isSessionRestored() || GeneralSettings::rememberOpenedTabs()) ) {
|
||||||
|
// Get saved state data for the last-closed Dolphin instance
|
||||||
|
const QString serviceName = QStringLiteral("org.kde.dolphin-%1").arg(QCoreApplication::applicationPid());
|
||||||
|
if (Dolphin::dolphinGuiInstances(serviceName).size() > 0) {
|
||||||
|
const QString className = KXmlGuiWindow::classNameOfToplevel(1);
|
||||||
|
if (className == QLatin1String("DolphinMainWindow")) {
|
||||||
|
mainWindow->restore(1);
|
||||||
|
} else {
|
||||||
|
qCWarning(DolphinDebug) << "Unknown class " << className << " in session saved data!";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,6 +42,10 @@
|
||||||
<label>Home URL</label>
|
<label>Home URL</label>
|
||||||
<default code="true">QUrl::fromLocalFile(QDir::homePath()).toDisplayString(QUrl::PreferLocalFile)</default>
|
<default code="true">QUrl::fromLocalFile(QDir::homePath()).toDisplayString(QUrl::PreferLocalFile)</default>
|
||||||
</entry>
|
</entry>
|
||||||
|
<entry name="RememberOpenedTabs" type="Bool">
|
||||||
|
<label>Remember open folders and tabs</label>
|
||||||
|
<default>true</default>
|
||||||
|
</entry>
|
||||||
<entry name="SplitView" type="Bool">
|
<entry name="SplitView" type="Bool">
|
||||||
<label>Split the view into two panes</label>
|
<label>Split the view into two panes</label>
|
||||||
<default>false</default>
|
<default>false</default>
|
||||||
|
|
|
@ -27,18 +27,24 @@
|
||||||
#include <KLocalizedString>
|
#include <KLocalizedString>
|
||||||
#include <KMessageBox>
|
#include <KMessageBox>
|
||||||
|
|
||||||
|
#include <QButtonGroup>
|
||||||
#include <QCheckBox>
|
#include <QCheckBox>
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
#include <QLineEdit>
|
#include <QLineEdit>
|
||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
|
#include <QRadioButton>
|
||||||
#include <QFormLayout>
|
#include <QFormLayout>
|
||||||
|
#include <QGridLayout>
|
||||||
#include <QHBoxLayout>
|
#include <QHBoxLayout>
|
||||||
#include <QVBoxLayout>
|
|
||||||
|
|
||||||
StartupSettingsPage::StartupSettingsPage(const QUrl& url, QWidget* parent) :
|
StartupSettingsPage::StartupSettingsPage(const QUrl& url, QWidget* parent) :
|
||||||
SettingsPageBase(parent),
|
SettingsPageBase(parent),
|
||||||
m_url(url),
|
m_url(url),
|
||||||
m_homeUrl(nullptr),
|
m_homeUrl(nullptr),
|
||||||
|
m_homeUrlBoxLayoutContainer(nullptr),
|
||||||
|
m_buttonBoxLayoutContainer(nullptr),
|
||||||
|
m_rememberOpenedTabsRadioButton(nullptr),
|
||||||
|
m_homeUrlRadioButton(nullptr),
|
||||||
m_splitView(nullptr),
|
m_splitView(nullptr),
|
||||||
m_editableUrl(nullptr),
|
m_editableUrl(nullptr),
|
||||||
m_showFullPath(nullptr),
|
m_showFullPath(nullptr),
|
||||||
|
@ -48,9 +54,19 @@ StartupSettingsPage::StartupSettingsPage(const QUrl& url, QWidget* parent) :
|
||||||
{
|
{
|
||||||
QFormLayout* topLayout = new QFormLayout(this);
|
QFormLayout* topLayout = new QFormLayout(this);
|
||||||
|
|
||||||
|
m_rememberOpenedTabsRadioButton = new QRadioButton(i18nc("@option:radio Startup Settings", "Folders, tabs, and window state from last time"));
|
||||||
|
m_homeUrlRadioButton = new QRadioButton();
|
||||||
|
// HACK: otherwise the radio button has too much spacing in a grid layout
|
||||||
|
m_homeUrlRadioButton->setMaximumWidth(24);
|
||||||
|
|
||||||
|
QButtonGroup* initialViewGroup = new QButtonGroup(this);
|
||||||
|
initialViewGroup->addButton(m_rememberOpenedTabsRadioButton);
|
||||||
|
initialViewGroup->addButton(m_homeUrlRadioButton);
|
||||||
|
|
||||||
|
|
||||||
// create 'Home URL' editor
|
// create 'Home URL' editor
|
||||||
QHBoxLayout* homeUrlBoxLayout = new QHBoxLayout();
|
m_homeUrlBoxLayoutContainer = new QWidget(this);
|
||||||
|
QHBoxLayout* homeUrlBoxLayout = new QHBoxLayout(m_homeUrlBoxLayoutContainer);
|
||||||
homeUrlBoxLayout->setContentsMargins(0, 0, 0, 0);
|
homeUrlBoxLayout->setContentsMargins(0, 0, 0, 0);
|
||||||
|
|
||||||
m_homeUrl = new QLineEdit();
|
m_homeUrl = new QLineEdit();
|
||||||
|
@ -67,7 +83,8 @@ StartupSettingsPage::StartupSettingsPage(const QUrl& url, QWidget* parent) :
|
||||||
connect(selectHomeUrlButton, &QPushButton::clicked,
|
connect(selectHomeUrlButton, &QPushButton::clicked,
|
||||||
this, &StartupSettingsPage::selectHomeUrl);
|
this, &StartupSettingsPage::selectHomeUrl);
|
||||||
|
|
||||||
QHBoxLayout* buttonBoxLayout = new QHBoxLayout();
|
m_buttonBoxLayoutContainer = new QWidget(this);
|
||||||
|
QHBoxLayout* buttonBoxLayout = new QHBoxLayout(m_buttonBoxLayoutContainer);
|
||||||
buttonBoxLayout->setContentsMargins(0, 0, 0, 0);
|
buttonBoxLayout->setContentsMargins(0, 0, 0, 0);
|
||||||
|
|
||||||
QPushButton* useCurrentButton = new QPushButton(i18nc("@action:button", "Use Current Location"));
|
QPushButton* useCurrentButton = new QPushButton(i18nc("@action:button", "Use Current Location"));
|
||||||
|
@ -79,41 +96,50 @@ StartupSettingsPage::StartupSettingsPage(const QUrl& url, QWidget* parent) :
|
||||||
connect(useDefaultButton, &QPushButton::clicked,
|
connect(useDefaultButton, &QPushButton::clicked,
|
||||||
this, &StartupSettingsPage::useDefaultLocation);
|
this, &StartupSettingsPage::useDefaultLocation);
|
||||||
|
|
||||||
QVBoxLayout* homeBoxLayout = new QVBoxLayout();
|
QGridLayout* startInLocationLayout = new QGridLayout();
|
||||||
homeBoxLayout->setContentsMargins(0, 0, 0, 0);
|
startInLocationLayout->setHorizontalSpacing(0);
|
||||||
homeBoxLayout->addLayout(homeUrlBoxLayout);
|
startInLocationLayout->setContentsMargins(0, 0, 0, 0);
|
||||||
homeBoxLayout->addLayout(buttonBoxLayout);
|
startInLocationLayout->addWidget(m_homeUrlRadioButton, 0, 0);
|
||||||
|
startInLocationLayout->addWidget(m_homeUrlBoxLayoutContainer, 0, 1);
|
||||||
|
startInLocationLayout->addWidget(m_buttonBoxLayoutContainer, 1, 1);
|
||||||
|
|
||||||
topLayout->addRow(i18nc("@label:textbox", "Start in:"), homeBoxLayout);
|
topLayout->addRow(i18nc("@label:textbox", "Show on startup:"), m_rememberOpenedTabsRadioButton);
|
||||||
|
topLayout->addRow(QString(), startInLocationLayout);
|
||||||
|
|
||||||
|
|
||||||
topLayout->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT, QSizePolicy::Fixed, QSizePolicy::Fixed));
|
topLayout->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT, QSizePolicy::Fixed, QSizePolicy::Fixed));
|
||||||
|
|
||||||
|
m_splitView = new QCheckBox(i18nc("@option:check Startup Settings", "Begin in split view mode"));
|
||||||
// create 'Split view', 'Show full path', 'Editable location' and 'Filter bar' checkboxes
|
topLayout->addRow(i18n("New windows:"), m_splitView);
|
||||||
m_splitView = new QCheckBox(i18nc("@option:check Startup Settings", "Split view mode"));
|
|
||||||
topLayout->addRow(i18nc("@label:checkbox", "Window options:"), m_splitView);
|
|
||||||
m_editableUrl = new QCheckBox(i18nc("@option:check Startup Settings", "Editable location bar"));
|
|
||||||
topLayout->addRow(QString(), m_editableUrl);
|
|
||||||
m_showFullPath = new QCheckBox(i18nc("@option:check Startup Settings", "Show full path inside location bar"));
|
|
||||||
topLayout->addRow(QString(), m_showFullPath);
|
|
||||||
m_filterBar = new QCheckBox(i18nc("@option:check Startup Settings", "Show filter bar"));
|
m_filterBar = new QCheckBox(i18nc("@option:check Startup Settings", "Show filter bar"));
|
||||||
topLayout->addRow(QString(), m_filterBar);
|
topLayout->addRow(QString(), m_filterBar);
|
||||||
|
m_editableUrl = new QCheckBox(i18nc("@option:check Startup Settings", "Make location bar editable"));
|
||||||
|
topLayout->addRow(QString(), m_editableUrl);
|
||||||
|
|
||||||
|
topLayout->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT, QSizePolicy::Fixed, QSizePolicy::Fixed));
|
||||||
|
|
||||||
|
m_openExternallyCalledFolderInNewTab = new QCheckBox(i18nc("@option:check Startup Settings", "Open new folders in tabs"));
|
||||||
|
topLayout->addRow(i18nc("@label:checkbox", "General:"), m_openExternallyCalledFolderInNewTab);
|
||||||
|
m_showFullPath = new QCheckBox(i18nc("@option:check Startup Settings", "Show full path inside location bar"));
|
||||||
|
topLayout->addRow(QString(), m_showFullPath);
|
||||||
m_showFullPathInTitlebar = new QCheckBox(i18nc("@option:check Startup Settings", "Show full path in title bar"));
|
m_showFullPathInTitlebar = new QCheckBox(i18nc("@option:check Startup Settings", "Show full path in title bar"));
|
||||||
topLayout->addRow(QString(), m_showFullPathInTitlebar);
|
topLayout->addRow(QString(), m_showFullPathInTitlebar);
|
||||||
m_openExternallyCalledFolderInNewTab = new QCheckBox(i18nc("@option:check Startup Settings", "Open new folders in tabs"));
|
|
||||||
topLayout->addRow(QString(), m_openExternallyCalledFolderInNewTab);
|
|
||||||
|
|
||||||
|
|
||||||
loadSettings();
|
loadSettings();
|
||||||
|
|
||||||
|
updateInitialViewOptions();
|
||||||
|
|
||||||
connect(m_homeUrl, &QLineEdit::textChanged, this, &StartupSettingsPage::slotSettingsChanged);
|
connect(m_homeUrl, &QLineEdit::textChanged, this, &StartupSettingsPage::slotSettingsChanged);
|
||||||
|
connect(m_rememberOpenedTabsRadioButton, &QRadioButton::toggled, this, &StartupSettingsPage::slotSettingsChanged);
|
||||||
|
connect(m_homeUrlRadioButton, &QRadioButton::toggled, this, &StartupSettingsPage::slotSettingsChanged);
|
||||||
|
|
||||||
connect(m_splitView, &QCheckBox::toggled, this, &StartupSettingsPage::slotSettingsChanged);
|
connect(m_splitView, &QCheckBox::toggled, this, &StartupSettingsPage::slotSettingsChanged);
|
||||||
connect(m_editableUrl, &QCheckBox::toggled, this, &StartupSettingsPage::slotSettingsChanged);
|
connect(m_editableUrl, &QCheckBox::toggled, this, &StartupSettingsPage::slotSettingsChanged);
|
||||||
connect(m_showFullPath, &QCheckBox::toggled, this, &StartupSettingsPage::slotSettingsChanged);
|
|
||||||
connect(m_filterBar, &QCheckBox::toggled, this, &StartupSettingsPage::slotSettingsChanged);
|
connect(m_filterBar, &QCheckBox::toggled, this, &StartupSettingsPage::slotSettingsChanged);
|
||||||
connect(m_showFullPathInTitlebar, &QCheckBox::toggled, this, &StartupSettingsPage::slotSettingsChanged);
|
|
||||||
connect(m_openExternallyCalledFolderInNewTab, &QCheckBox::toggled, this, &StartupSettingsPage::slotSettingsChanged);
|
connect(m_openExternallyCalledFolderInNewTab, &QCheckBox::toggled, this, &StartupSettingsPage::slotSettingsChanged);
|
||||||
|
connect(m_showFullPath, &QCheckBox::toggled, this, &StartupSettingsPage::slotSettingsChanged);
|
||||||
|
connect(m_showFullPathInTitlebar, &QCheckBox::toggled, this, &StartupSettingsPage::slotSettingsChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
StartupSettingsPage::~StartupSettingsPage()
|
StartupSettingsPage::~StartupSettingsPage()
|
||||||
|
@ -132,12 +158,21 @@ void StartupSettingsPage::applySettings()
|
||||||
KMessageBox::error(this, i18nc("@info", "The location for the home folder is invalid or does not exist, it will not be applied."));
|
KMessageBox::error(this, i18nc("@info", "The location for the home folder is invalid or does not exist, it will not be applied."));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Remove saved state if "remember open tabs" has been turned off
|
||||||
|
if (!m_rememberOpenedTabsRadioButton->isChecked()) {
|
||||||
|
KConfigGroup windowState{KSharedConfig::openConfig(QStringLiteral("dolphinrc")), "WindowState"};
|
||||||
|
if (windowState.exists()) {
|
||||||
|
windowState.deleteGroup();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
settings->setRememberOpenedTabs(m_rememberOpenedTabsRadioButton->isChecked());
|
||||||
settings->setSplitView(m_splitView->isChecked());
|
settings->setSplitView(m_splitView->isChecked());
|
||||||
settings->setEditableUrl(m_editableUrl->isChecked());
|
settings->setEditableUrl(m_editableUrl->isChecked());
|
||||||
settings->setShowFullPath(m_showFullPath->isChecked());
|
|
||||||
settings->setFilterBar(m_filterBar->isChecked());
|
settings->setFilterBar(m_filterBar->isChecked());
|
||||||
settings->setShowFullPathInTitlebar(m_showFullPathInTitlebar->isChecked());
|
|
||||||
settings->setOpenExternallyCalledFolderInNewTab(m_openExternallyCalledFolderInNewTab->isChecked());
|
settings->setOpenExternallyCalledFolderInNewTab(m_openExternallyCalledFolderInNewTab->isChecked());
|
||||||
|
settings->setShowFullPath(m_showFullPath->isChecked());
|
||||||
|
settings->setShowFullPathInTitlebar(m_showFullPathInTitlebar->isChecked());
|
||||||
settings->save();
|
settings->save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,9 +190,18 @@ void StartupSettingsPage::slotSettingsChanged()
|
||||||
// to apply the startup settings only if they have been explicitly changed by the user
|
// to apply the startup settings only if they have been explicitly changed by the user
|
||||||
// (see bug #254947).
|
// (see bug #254947).
|
||||||
GeneralSettings::setModifiedStartupSettings(true);
|
GeneralSettings::setModifiedStartupSettings(true);
|
||||||
|
|
||||||
|
// Enable and disable home URL controls appropriately
|
||||||
|
updateInitialViewOptions();
|
||||||
emit changed();
|
emit changed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void StartupSettingsPage::updateInitialViewOptions()
|
||||||
|
{
|
||||||
|
m_homeUrlBoxLayoutContainer->setEnabled(m_homeUrlRadioButton->isChecked());
|
||||||
|
m_buttonBoxLayoutContainer->setEnabled(m_homeUrlRadioButton->isChecked());
|
||||||
|
}
|
||||||
|
|
||||||
void StartupSettingsPage::selectHomeUrl()
|
void StartupSettingsPage::selectHomeUrl()
|
||||||
{
|
{
|
||||||
const QUrl homeUrl(QUrl::fromUserInput(m_homeUrl->text(), QString(), QUrl::AssumeLocalFile));
|
const QUrl homeUrl(QUrl::fromUserInput(m_homeUrl->text(), QString(), QUrl::AssumeLocalFile));
|
||||||
|
@ -182,6 +226,8 @@ void StartupSettingsPage::loadSettings()
|
||||||
{
|
{
|
||||||
const QUrl url(Dolphin::homeUrl());
|
const QUrl url(Dolphin::homeUrl());
|
||||||
m_homeUrl->setText(url.toDisplayString(QUrl::PreferLocalFile));
|
m_homeUrl->setText(url.toDisplayString(QUrl::PreferLocalFile));
|
||||||
|
m_rememberOpenedTabsRadioButton->setChecked(GeneralSettings::rememberOpenedTabs());
|
||||||
|
m_homeUrlRadioButton->setChecked(!GeneralSettings::rememberOpenedTabs());
|
||||||
m_splitView->setChecked(GeneralSettings::splitView());
|
m_splitView->setChecked(GeneralSettings::splitView());
|
||||||
m_editableUrl->setChecked(GeneralSettings::editableUrl());
|
m_editableUrl->setChecked(GeneralSettings::editableUrl());
|
||||||
m_showFullPath->setChecked(GeneralSettings::showFullPath());
|
m_showFullPath->setChecked(GeneralSettings::showFullPath());
|
||||||
|
|
|
@ -23,8 +23,9 @@
|
||||||
|
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
|
|
||||||
class QLineEdit;
|
|
||||||
class QCheckBox;
|
class QCheckBox;
|
||||||
|
class QLineEdit;
|
||||||
|
class QRadioButton;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Page for the 'Startup' settings of the Dolphin settings dialog.
|
* @brief Page for the 'Startup' settings of the Dolphin settings dialog.
|
||||||
|
@ -48,6 +49,7 @@ public:
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void slotSettingsChanged();
|
void slotSettingsChanged();
|
||||||
|
void updateInitialViewOptions();
|
||||||
void selectHomeUrl();
|
void selectHomeUrl();
|
||||||
void useCurrentLocation();
|
void useCurrentLocation();
|
||||||
void useDefaultLocation();
|
void useDefaultLocation();
|
||||||
|
@ -58,6 +60,10 @@ private:
|
||||||
private:
|
private:
|
||||||
QUrl m_url;
|
QUrl m_url;
|
||||||
QLineEdit* m_homeUrl;
|
QLineEdit* m_homeUrl;
|
||||||
|
QWidget* m_homeUrlBoxLayoutContainer;
|
||||||
|
QWidget* m_buttonBoxLayoutContainer;
|
||||||
|
QRadioButton* m_rememberOpenedTabsRadioButton;
|
||||||
|
QRadioButton* m_homeUrlRadioButton;
|
||||||
|
|
||||||
QCheckBox* m_splitView;
|
QCheckBox* m_splitView;
|
||||||
QCheckBox* m_editableUrl;
|
QCheckBox* m_editableUrl;
|
||||||
|
|
Loading…
Reference in a new issue