From ae59cddc1985a4c37cb4f3ccea5489c5da29b821 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Sun, 28 Jun 2020 10:01:24 -0400 Subject: [PATCH 1/2] Introduce View Menu * Move user interface settings from the settings widget into the view menu. * Add auto-restart prompt to make theme changes easy --- src/gui/Application.cpp | 12 ++ src/gui/Application.h | 4 + src/gui/ApplicationSettingsWidget.cpp | 25 ---- src/gui/ApplicationSettingsWidget.h | 1 - src/gui/ApplicationSettingsWidgetGeneral.ui | 148 ++++++-------------- src/gui/EntryPreviewWidget.cpp | 6 + src/gui/MainWindow.cpp | 60 +++++++- src/gui/MainWindow.h | 4 + src/gui/MainWindow.ui | 75 ++++++++++ src/main.cpp | 6 + 10 files changed, 205 insertions(+), 136 deletions(-) diff --git a/src/gui/Application.cpp b/src/gui/Application.cpp index 273ab8763d..31222401b9 100644 --- a/src/gui/Application.cpp +++ b/src/gui/Application.cpp @@ -315,3 +315,15 @@ bool Application::isDarkTheme() const { return m_darkTheme; } + +void Application::restart() +{ + // Disable single instance + m_lockServer.close(); + if (m_lockFile) { + m_lockFile->unlock(); + delete m_lockFile; + } + + exit(RESTART_EXITCODE); +} diff --git a/src/gui/Application.h b/src/gui/Application.h index 21dff6affc..9f694f8c3a 100644 --- a/src/gui/Application.h +++ b/src/gui/Application.h @@ -31,6 +31,8 @@ class OSEventFilter; class QLockFile; class QSocketNotifier; +constexpr int RESTART_EXITCODE = -1; + class Application : public QApplication { Q_OBJECT @@ -47,6 +49,8 @@ class Application : public QApplication bool sendFileNamesToRunningInstance(const QStringList& fileNames); + void restart(); + signals: void openFile(const QString& filename); void anotherInstanceStarted(); diff --git a/src/gui/ApplicationSettingsWidget.cpp b/src/gui/ApplicationSettingsWidget.cpp index d3fa1ea4f5..6911153680 100644 --- a/src/gui/ApplicationSettingsWidget.cpp +++ b/src/gui/ApplicationSettingsWidget.cpp @@ -106,7 +106,6 @@ ApplicationSettingsWidget::ApplicationSettingsWidget(QWidget* parent) connect(m_generalUi->autoSaveAfterEveryChangeCheckBox, SIGNAL(toggled(bool)), SLOT(autoSaveToggled(bool))); connect(m_generalUi->hideWindowOnCopyCheckBox, SIGNAL(toggled(bool)), SLOT(hideWindowOnCopyCheckBoxToggled(bool))); connect(m_generalUi->systrayShowCheckBox, SIGNAL(toggled(bool)), SLOT(systrayToggled(bool))); - connect(m_generalUi->toolbarHideCheckBox, SIGNAL(toggled(bool)), SLOT(toolbarSettingsToggled(bool))); connect(m_generalUi->rememberLastDatabasesCheckBox, SIGNAL(toggled(bool)), SLOT(rememberDatabasesToggled(bool))); connect(m_generalUi->resetSettingsButton, SIGNAL(clicked()), SLOT(resetSettings())); @@ -126,7 +125,6 @@ ApplicationSettingsWidget::ApplicationSettingsWidget(QWidget* parent) m_generalUi->faviconTimeoutSpinBox->installEventFilter(mouseWheelFilter); m_generalUi->toolButtonStyleComboBox->installEventFilter(mouseWheelFilter); m_generalUi->languageComboBox->installEventFilter(mouseWheelFilter); - m_generalUi->appThemeSelection->installEventFilter(mouseWheelFilter); #ifdef WITH_XC_UPDATECHECK connect(m_generalUi->checkForUpdatesOnStartupCheckBox, SIGNAL(toggled(bool)), SLOT(checkUpdatesToggled(bool))); @@ -210,20 +208,9 @@ void ApplicationSettingsWidget::loadSettings() m_generalUi->languageComboBox->setCurrentIndex(defaultIndex); } - m_generalUi->previewHideCheckBox->setChecked(config()->get(Config::GUI_HidePreviewPanel).toBool()); - m_generalUi->toolbarHideCheckBox->setChecked(config()->get(Config::GUI_HideToolbar).toBool()); - toolbarSettingsToggled(m_generalUi->toolbarHideCheckBox->isChecked()); m_generalUi->toolbarMovableCheckBox->setChecked(config()->get(Config::GUI_MovableToolbar).toBool()); m_generalUi->monospaceNotesCheckBox->setChecked(config()->get(Config::GUI_MonospaceNotes).toBool()); - m_generalUi->appThemeSelection->clear(); - m_generalUi->appThemeSelection->addItem(tr("Automatic"), "auto"); - m_generalUi->appThemeSelection->addItem(tr("Light"), "light"); - m_generalUi->appThemeSelection->addItem(tr("Dark"), "dark"); - m_generalUi->appThemeSelection->addItem(tr("Classic (Platform-native)"), "classic"); - m_generalUi->appThemeSelection->setCurrentIndex( - m_generalUi->appThemeSelection->findData(config()->get(Config::GUI_ApplicationTheme).toString())); - m_generalUi->toolButtonStyleComboBox->clear(); m_generalUi->toolButtonStyleComboBox->addItem(tr("Icon only"), Qt::ToolButtonIconOnly); m_generalUi->toolButtonStyleComboBox->addItem(tr("Text only"), Qt::ToolButtonTextOnly); @@ -338,14 +325,9 @@ void ApplicationSettingsWidget::saveSettings() config()->set(Config::FaviconDownloadTimeout, m_generalUi->faviconTimeoutSpinBox->value()); config()->set(Config::GUI_Language, m_generalUi->languageComboBox->currentData().toString()); - config()->set(Config::GUI_HidePreviewPanel, m_generalUi->previewHideCheckBox->isChecked()); - config()->set(Config::GUI_HideToolbar, m_generalUi->toolbarHideCheckBox->isChecked()); config()->set(Config::GUI_MovableToolbar, m_generalUi->toolbarMovableCheckBox->isChecked()); config()->set(Config::GUI_MonospaceNotes, m_generalUi->monospaceNotesCheckBox->isChecked()); - QString theme = m_generalUi->appThemeSelection->currentData().toString(); - config()->set(Config::GUI_ApplicationTheme, theme); - config()->set(Config::GUI_ToolButtonStyle, m_generalUi->toolButtonStyleComboBox->currentData().toString()); config()->set(Config::GUI_ShowTrayIcon, m_generalUi->systrayShowCheckBox->isChecked()); @@ -481,13 +463,6 @@ void ApplicationSettingsWidget::systrayToggled(bool checked) m_generalUi->systrayMinimizeToTrayCheckBox->setEnabled(checked); } -void ApplicationSettingsWidget::toolbarSettingsToggled(bool checked) -{ - m_generalUi->toolbarMovableCheckBox->setEnabled(!checked); - m_generalUi->toolButtonStyleComboBox->setEnabled(!checked); - m_generalUi->toolButtonStyleLabel->setEnabled(!checked); -} - void ApplicationSettingsWidget::rememberDatabasesToggled(bool checked) { if (!checked) { diff --git a/src/gui/ApplicationSettingsWidget.h b/src/gui/ApplicationSettingsWidget.h index 63487e1b5c..f36e5ef124 100644 --- a/src/gui/ApplicationSettingsWidget.h +++ b/src/gui/ApplicationSettingsWidget.h @@ -60,7 +60,6 @@ private slots: void autoSaveToggled(bool checked); void hideWindowOnCopyCheckBoxToggled(bool checked); void systrayToggled(bool checked); - void toolbarSettingsToggled(bool checked); void rememberDatabasesToggled(bool checked); void checkUpdatesToggled(bool checked); diff --git a/src/gui/ApplicationSettingsWidgetGeneral.ui b/src/gui/ApplicationSettingsWidgetGeneral.ui index fea7481aa6..7324c5ab7a 100644 --- a/src/gui/ApplicationSettingsWidgetGeneral.ui +++ b/src/gui/ApplicationSettingsWidgetGeneral.ui @@ -307,13 +307,6 @@ - - - - Hide the entry preview panel - - - @@ -460,8 +453,8 @@ 10 - - + + 0 @@ -472,51 +465,30 @@ Qt::StrongFocus - Application Theme Selection - - - - - - - Qt::Horizontal - - - - 40 - 20 - + Toolbar button style - - - - - - (restart program to activate) + + QComboBox::AdjustToContents - - - (restart program to activate) - - - - - - - Application theme: + + + true - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + 0 + - - appThemeSelection + + Movable toolbar - + @@ -532,7 +504,7 @@ - + @@ -551,7 +523,27 @@ - + + + + (restart program to activate) + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + true @@ -576,66 +568,8 @@ - - - - - 0 - 0 - - - - Qt::StrongFocus - - - Toolbar button style - - - QComboBox::AdjustToContents - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 10 - - - - - - - - Hide toolbar - - - - - - - true - - - - 0 - 0 - - - - Movable toolbar - - - @@ -1102,20 +1036,18 @@ autoReloadOnChangeCheckBox useAtomicSavesCheckBox useGroupIconOnEntryCreationCheckBox - previewHideCheckBox minimizeOnOpenUrlCheckBox hideWindowOnCopyCheckBox minimizeOnCopyRadioButton dropToBackgroundOnCopyRadioButton faviconTimeoutSpinBox - appThemeSelection languageComboBox toolButtonStyleComboBox - toolbarHideCheckBox - toolbarMovableCheckBox monospaceNotesCheckBox + toolbarMovableCheckBox minimizeOnCloseCheckBox systrayShowCheckBox + trayIconAppearance systrayMinimizeToTrayCheckBox resetSettingsButton autoTypeEntryTitleMatchCheckBox diff --git a/src/gui/EntryPreviewWidget.cpp b/src/gui/EntryPreviewWidget.cpp index eee1dd00da..b873800a8a 100644 --- a/src/gui/EntryPreviewWidget.cpp +++ b/src/gui/EntryPreviewWidget.cpp @@ -77,6 +77,12 @@ EntryPreviewWidget::EntryPreviewWidget(QWidget* parent) connect(m_ui->entryTabWidget, SIGNAL(tabBarClicked(int)), SLOT(updateTabIndexes()), Qt::QueuedConnection); connect(&m_totpTimer, SIGNAL(timeout()), SLOT(updateTotpLabel())); + connect(config(), &Config::changed, this, [this](Config::ConfigKey key) { + if (key == Config::GUI_HidePreviewPanel) { + setVisible(!config()->get(Config::GUI_HidePreviewPanel).toBool()); + } + }); + // Group m_ui->groupCloseButton->setIcon(resources()->icon("dialog-close")); connect(m_ui->groupCloseButton, SIGNAL(clicked()), SLOT(hide())); diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 3f85390f88..c0d6397c35 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -37,6 +37,7 @@ #include "core/Tools.h" #include "gui/AboutDialog.h" #include "gui/DatabaseWidget.h" +#include "gui/MessageBox.h" #include "gui/SearchWidget.h" #include "keys/CompositeKey.h" #include "keys/FileKey.h" @@ -50,7 +51,6 @@ #endif #ifdef WITH_XC_UPDATECHECK -#include "gui/MessageBox.h" #include "gui/UpdateCheckDialog.h" #include "updatecheck/UpdateChecker.h" #endif @@ -167,6 +167,8 @@ MainWindow::MainWindow() m_ui->actionEntryAddToAgent->setVisible(false); m_ui->actionEntryRemoveFromAgent->setVisible(false); + initViewMenu(); + #if defined(WITH_XC_KEESHARE) KeeShare::init(this); m_ui->settingsWidget->addSettingsPage(new SettingsPageKeeShare(m_ui->tabWidget)); @@ -1132,11 +1134,12 @@ void MainWindow::closeEvent(QCloseEvent* event) if (m_appExiting) { saveWindowInformation(); event->accept(); - QApplication::quit(); + m_restartRequested ? kpxcApp->restart() : QApplication::quit(); return; } m_appExitCalled = false; + m_restartRequested = false; event->ignore(); } @@ -1639,3 +1642,56 @@ void MainWindow::displayDesktopNotification(const QString& msg, QString title, i m_trayIcon->showMessage(title, msg, QSystemTrayIcon::Information, msTimeoutHint); #endif } + +void MainWindow::restartApp(const QString& message) +{ + auto ans = MessageBox::question( + this, tr("Restart Application?"), message, MessageBox::Yes | MessageBox::No, MessageBox::Yes); + if (ans == MessageBox::Yes) { + m_appExitCalled = true; + m_restartRequested = true; + close(); + } else { + m_restartRequested = false; + } +} + +void MainWindow::initViewMenu() +{ + m_ui->actionThemeAuto->setData("auto"); + m_ui->actionThemeLight->setData("light"); + m_ui->actionThemeDark->setData("dark"); + m_ui->actionThemeClassic->setData("classic"); + + auto themeActions = new QActionGroup(this); + themeActions->addAction(m_ui->actionThemeAuto); + themeActions->addAction(m_ui->actionThemeLight); + themeActions->addAction(m_ui->actionThemeDark); + themeActions->addAction(m_ui->actionThemeClassic); + + auto theme = config()->get(Config::GUI_ApplicationTheme).toString(); + for (auto action : themeActions->actions()) { + if (action->data() == theme) { + action->setChecked(true); + break; + } + } + + connect(themeActions, &QActionGroup::triggered, this, [this](QAction* action) { + if (action->data() != config()->get(Config::GUI_ApplicationTheme)) { + config()->set(Config::GUI_ApplicationTheme, action->data()); + restartApp(tr("You must restart the application to apply this setting. Would you like to restart now?")); + } + }); + + m_ui->actionShowToolbar->setChecked(!config()->get(Config::GUI_HideToolbar).toBool()); + connect(m_ui->actionShowToolbar, &QAction::toggled, this, [this](bool checked) { + config()->set(Config::GUI_HideToolbar, !checked); + applySettingsChanges(); + }); + + m_ui->actionShowPreviewPanel->setChecked(!config()->get(Config::GUI_HidePreviewPanel).toBool()); + connect(m_ui->actionShowPreviewPanel, &QAction::toggled, this, [](bool checked) { + config()->set(Config::GUI_HidePreviewPanel, !checked); + }); +} diff --git a/src/gui/MainWindow.h b/src/gui/MainWindow.h index 230e6256ed..95e8e5a8b4 100644 --- a/src/gui/MainWindow.h +++ b/src/gui/MainWindow.h @@ -81,6 +81,7 @@ public slots: void closeAllDatabases(); void lockAllDatabases(); void displayDesktopNotification(const QString& msg, QString title = "", int msTimeoutHint = 10000); + void restartApp(const QString& message); protected: void closeEvent(QCloseEvent* event) override; @@ -152,6 +153,8 @@ private slots: void dragEnterEvent(QDragEnterEvent* event) override; void dropEvent(QDropEvent* event) override; + void initViewMenu(); + const QScopedPointer m_ui; SignalMultiplexer m_actionMultiplexer; QPointer m_clearHistoryAction; @@ -171,6 +174,7 @@ private slots: bool m_appExitCalled = false; bool m_appExiting = false; + bool m_restartRequested = false; bool m_contextMenuFocusLock = false; bool m_showToolbarSeparator = false; qint64 m_lastFocusOutTime = 0; diff --git a/src/gui/MainWindow.ui b/src/gui/MainWindow.ui index c31275f5a0..71efe1e6e7 100644 --- a/src/gui/MainWindow.ui +++ b/src/gui/MainWindow.ui @@ -353,10 +353,28 @@ + + + View + + + + Theme + + + + + + + + + + + @@ -843,6 +861,63 @@ Remove key from SSH Agent + + + true + + + true + + + Automatic + + + + + true + + + Light + + + + + true + + + Dark + + + + + true + + + Classic (Platform-native) + + + + + true + + + true + + + Show Toolbar + + + + + true + + + true + + + Show Preview Panel + + diff --git a/src/main.cpp b/src/main.cpp index 9a0ba41725..ee8582b1bb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -155,6 +155,12 @@ int main(int argc, char** argv) int exitCode = Application::exec(); + // Check if restart was requested + if (exitCode == RESTART_EXITCODE) { + QProcess* proc = new QProcess(); + proc->start(QCoreApplication::applicationFilePath()); + } + #if defined(WITH_ASAN) && defined(WITH_LSAN) // do leak check here to prevent massive tail of end-of-process leak errors from third-party libraries __lsan_do_leak_check(); From f2f5ca02f045fcc35d5b23283288a83544962f7e Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Sun, 28 Jun 2020 08:26:02 -0400 Subject: [PATCH 2/2] Introduce Compact Mode * Added to the new view menu, show entry/group icons at 16px and reduce toolbar icons to 22px. * Fix search widget being too large vertically (removed padding) --- src/core/Config.cpp | 1 + src/core/Config.h | 1 + src/core/DatabaseIcons.cpp | 27 ++++++++++++++++++++++----- src/core/DatabaseIcons.h | 3 +++ src/core/Global.h | 6 +++--- src/core/Metadata.cpp | 9 +++++---- src/gui/MainWindow.cpp | 10 ++++++++++ src/gui/MainWindow.ui | 9 +++++++++ src/gui/SearchWidget.ui | 17 ++++------------- 9 files changed, 58 insertions(+), 25 deletions(-) diff --git a/src/core/Config.cpp b/src/core/Config.cpp index 75cb383b15..6d55df8c73 100644 --- a/src/core/Config.cpp +++ b/src/core/Config.cpp @@ -101,6 +101,7 @@ static const QHash configStrings = { {Config::GUI_AdvancedSettings, {QS("GUI/AdvancedSettings"), Roaming, false}}, {Config::GUI_MonospaceNotes, {QS("GUI/MonospaceNotes"), Roaming, false}}, {Config::GUI_ApplicationTheme, {QS("GUI/ApplicationTheme"), Roaming, QS("auto")}}, + {Config::GUI_CompactMode, {QS("GUI/CompactMode"), Roaming, false}}, {Config::GUI_CheckForUpdates, {QS("GUI/CheckForUpdates"), Roaming, true}}, {Config::GUI_CheckForUpdatesNextCheck, {QS("GUI/CheckForUpdatesNextCheck"), Local, 0}}, {Config::GUI_CheckForUpdatesIncludeBetas, {QS("GUI/CheckForUpdatesIncludeBetas"), Roaming, false}}, diff --git a/src/core/Config.h b/src/core/Config.h index b3dc0fb85f..9363873c91 100644 --- a/src/core/Config.h +++ b/src/core/Config.h @@ -84,6 +84,7 @@ class Config : public QObject GUI_AdvancedSettings, GUI_MonospaceNotes, GUI_ApplicationTheme, + GUI_CompactMode, GUI_CheckForUpdates, GUI_CheckForUpdatesIncludeBetas, diff --git a/src/core/DatabaseIcons.cpp b/src/core/DatabaseIcons.cpp index 2935d98ff1..7b4499026e 100644 --- a/src/core/DatabaseIcons.cpp +++ b/src/core/DatabaseIcons.cpp @@ -17,6 +17,7 @@ #include "DatabaseIcons.h" +#include "core/Config.h" #include "core/Global.h" #include "core/Resources.h" #include "gui/MainWindow.h" @@ -44,6 +45,9 @@ DatabaseIcons::DatabaseIcons() iconList = QDir(iconDir).entryList(QDir::NoFilter, QDir::Name); badgeList = QDir(badgeDir).entryList(QDir::NoFilter, QDir::Name); + + // Set this early and once to ensure consistent icon size until app restart + m_compactMode = config()->get(Config::GUI_CompactMode).toBool(); } DatabaseIcons* DatabaseIcons::instance() @@ -66,13 +70,13 @@ QPixmap DatabaseIcons::icon(int index, IconSize size) auto icon = m_iconCache.value(cacheKey); if (icon.isNull()) { icon.addFile(iconDir + iconList[index]); - icon.addPixmap(icon.pixmap(IconSize::Default)); - icon.addPixmap(icon.pixmap(IconSize::Medium)); - icon.addPixmap(icon.pixmap(IconSize::Large)); + icon.addPixmap(icon.pixmap(iconSize(IconSize::Default))); + icon.addPixmap(icon.pixmap(iconSize(IconSize::Medium))); + icon.addPixmap(icon.pixmap(iconSize(IconSize::Large))); m_iconCache.insert(cacheKey, icon); } - return icon.pixmap(size); + return icon.pixmap(iconSize(size)); } QPixmap DatabaseIcons::applyBadge(const QPixmap& basePixmap, Badges badgeIndex) @@ -83,7 +87,8 @@ QPixmap DatabaseIcons::applyBadge(const QPixmap& basePixmap, Badges badgeIndex) qWarning("DatabaseIcons: Out-of-range badge index given to applyBadge: %d", badgeIndex); } else if (!QPixmapCache::find(cacheKey, &pixmap)) { int baseSize = basePixmap.width(); - int badgeSize = baseSize <= IconSize::Default * basePixmap.devicePixelRatio() ? baseSize * 0.6 : baseSize * 0.5; + int badgeSize = + baseSize <= iconSize(IconSize::Default) * basePixmap.devicePixelRatio() ? baseSize * 0.6 : baseSize * 0.5; QPoint badgePos(baseSize - badgeSize, baseSize - badgeSize); badgePos /= basePixmap.devicePixelRatio(); @@ -106,3 +111,15 @@ int DatabaseIcons::count() { return iconList.size(); } + +int DatabaseIcons::iconSize(IconSize size) +{ + switch (size) { + case Medium: + return m_compactMode ? 26 : 30; + case Large: + return m_compactMode ? 30 : 36; + default: + return m_compactMode ? 16 : 22; + } +} diff --git a/src/core/DatabaseIcons.h b/src/core/DatabaseIcons.h index 9f33644ee6..2abb8a485e 100644 --- a/src/core/DatabaseIcons.h +++ b/src/core/DatabaseIcons.h @@ -39,11 +39,14 @@ class DatabaseIcons QPixmap applyBadge(const QPixmap& basePixmap, Badges badgeIndex); int count(); + int iconSize(IconSize size); + private: DatabaseIcons(); static DatabaseIcons* m_instance; QHash m_iconCache; + bool m_compactMode; Q_DISABLE_COPY(DatabaseIcons) }; diff --git a/src/core/Global.h b/src/core/Global.h index ad6cc1f084..aebdb4559f 100644 --- a/src/core/Global.h +++ b/src/core/Global.h @@ -48,9 +48,9 @@ static const auto FALSE_STR = QStringLiteral("false"); enum IconSize { - Default = 22, - Medium = 30, - Large = 36 + Default, + Medium, + Large }; template struct AddConst diff --git a/src/core/Metadata.cpp b/src/core/Metadata.cpp index 67a58b0686..8192bbb714 100644 --- a/src/core/Metadata.cpp +++ b/src/core/Metadata.cpp @@ -20,6 +20,7 @@ #include #include "core/Clock.h" +#include "core/DatabaseIcons.h" #include "core/Entry.h" #include "core/Group.h" #include "core/Tools.h" @@ -186,7 +187,7 @@ QPixmap Metadata::customIconPixmap(const QUuid& uuid, IconSize size) const if (!hasCustomIcon(uuid)) { return {}; } - return m_customIcons.value(uuid).pixmap(size); + return m_customIcons.value(uuid).pixmap(databaseIcons()->iconSize(size)); } QHash Metadata::customIconsPixmaps(IconSize size) const @@ -380,9 +381,9 @@ void Metadata::addCustomIcon(const QUuid& uuid, const QImage& image) // Generate QIcon with pre-baked resolutions auto basePixmap = QPixmap::fromImage(image).scaled(128, 128, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); QIcon icon(basePixmap); - icon.addPixmap(icon.pixmap(IconSize::Default)); - icon.addPixmap(icon.pixmap(IconSize::Medium)); - icon.addPixmap(icon.pixmap(IconSize::Large)); + icon.addPixmap(icon.pixmap(databaseIcons()->iconSize(IconSize::Default))); + icon.addPixmap(icon.pixmap(databaseIcons()->iconSize(IconSize::Medium))); + icon.addPixmap(icon.pixmap(databaseIcons()->iconSize(IconSize::Large))); m_customIcons.insert(uuid, icon); } else { m_customIcons.insert(uuid, QIcon()); diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index c0d6397c35..88965fe2c3 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -107,6 +107,10 @@ MainWindow::MainWindow() setAcceptDrops(true); + if (config()->get(Config::GUI_CompactMode).toBool()) { + m_ui->toolBar->setIconSize({20, 20}); + } + // Setup the search widget in the toolbar m_searchWidget = new SearchWidget(); m_searchWidget->connectSignals(m_actionMultiplexer); @@ -1684,6 +1688,12 @@ void MainWindow::initViewMenu() } }); + m_ui->actionCompactMode->setChecked(config()->get(Config::GUI_CompactMode).toBool()); + connect(m_ui->actionCompactMode, &QAction::toggled, this, [this](bool checked) { + config()->set(Config::GUI_CompactMode, checked); + restartApp(tr("You must restart the application to apply this setting. Would you like to restart now?")); + }); + m_ui->actionShowToolbar->setChecked(!config()->get(Config::GUI_HideToolbar).toBool()); connect(m_ui->actionShowToolbar, &QAction::toggled, this, [this](bool checked) { config()->set(Config::GUI_HideToolbar, !checked); diff --git a/src/gui/MainWindow.ui b/src/gui/MainWindow.ui index 71efe1e6e7..052a5da319 100644 --- a/src/gui/MainWindow.ui +++ b/src/gui/MainWindow.ui @@ -367,6 +367,7 @@ + @@ -861,6 +862,14 @@ Remove key from SSH Agent + + + true + + + Compact Mode + + true diff --git a/src/gui/SearchWidget.ui b/src/gui/SearchWidget.ui index b98f4aea78..74cc468cfd 100644 --- a/src/gui/SearchWidget.ui +++ b/src/gui/SearchWidget.ui @@ -6,17 +6,11 @@ 0 0 - 630 + 465 34 - - - 0 - 0 - - - + 3 @@ -32,20 +26,17 @@ - + 0 0 - 0 + 150 0 - - padding:3px -