Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/keepassxreboot/keepassxc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan White <support@dmapps.us>2021-01-16 19:55:01 +0300
committerJonathan White <support@dmapps.us>2021-01-27 18:26:54 +0300
commit35d215aa708425aab61b6fcc0001c006c6a5d4fb (patch)
tree471c267d5e45dd3fa763b48b8905db59300ae80e
parenta3b9700f90f0ad4a1308f8a8ec033a7c36cf0ec4 (diff)
Correct issues with system tray icon
* Close #5780 - Show window title as system tray icon tooltip * Fix #5943 - Try to show system tray icon up to 5 times, waiting 5 seconds between attempts, if the system tray is not available. This works around observed startup issues on Linux. * Change function of "isTrayIconEnabled()" to return true if the tray icon is created and visible. This may correct some long standing bugs with the window hiding forever unexpectedly.
-rw-r--r--src/gui/MainWindow.cpp46
1 files changed, 25 insertions, 21 deletions
diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp
index 3def5988e..c4bee6b67 100644
--- a/src/gui/MainWindow.cpp
+++ b/src/gui/MainWindow.cpp
@@ -404,7 +404,6 @@ MainWindow::MainWindow()
connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), SLOT(updateWindowTitle()));
connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), SLOT(databaseTabChanged(int)));
connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), SLOT(setMenuActionState()));
- connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), SLOT(updateTrayIcon()));
connect(m_ui->tabWidget, SIGNAL(databaseLocked(DatabaseWidget*)), SLOT(databaseStatusChanged(DatabaseWidget*)));
connect(m_ui->tabWidget, SIGNAL(databaseUnlocked(DatabaseWidget*)), SLOT(databaseStatusChanged(DatabaseWidget*)));
connect(m_ui->tabWidget, SIGNAL(tabVisibilityChanged(bool)), SLOT(updateToolbarSeparatorVisibility()));
@@ -929,6 +928,8 @@ void MainWindow::updateWindowTitle()
setWindowTitle(windowTitle);
setWindowModified(isModified);
+
+ updateTrayIcon();
}
void MainWindow::showAboutDialog()
@@ -1169,8 +1170,7 @@ void MainWindow::closeEvent(QCloseEvent* event)
void MainWindow::changeEvent(QEvent* event)
{
if ((event->type() == QEvent::WindowStateChange) && isMinimized()) {
- if (isTrayIconEnabled() && m_trayIcon && m_trayIcon->isVisible()
- && config()->get(Config::GUI_MinimizeToTray).toBool()) {
+ if (isTrayIconEnabled() && config()->get(Config::GUI_MinimizeToTray).toBool()) {
event->ignore();
hide();
}
@@ -1270,9 +1270,7 @@ bool MainWindow::saveLastDatabases()
void MainWindow::updateTrayIcon()
{
- if (isTrayIconEnabled()) {
- QApplication::setQuitOnLastWindowClosed(false);
-
+ if (config()->get(Config::GUI_ShowTrayIcon).toBool()) {
if (!m_trayIcon) {
m_trayIcon = new QSystemTrayIcon(this);
auto* menu = new QMenu(this);
@@ -1284,40 +1282,46 @@ void MainWindow::updateTrayIcon()
menu->addAction(m_ui->actionLockDatabases);
#ifdef Q_OS_MACOS
- QAction* actionQuit = new QAction(tr("Quit KeePassXC"), menu);
- menu->addAction(actionQuit);
-
+ auto actionQuit = new QAction(tr("Quit KeePassXC"), menu);
connect(actionQuit, SIGNAL(triggered()), SLOT(appExit()));
+ menu->addAction(actionQuit);
#else
menu->addAction(m_ui->actionQuit);
-
#endif
+ m_trayIcon->setContextMenu(menu);
+
connect(m_trayIcon,
SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
SLOT(trayIconTriggered(QSystemTrayIcon::ActivationReason)));
connect(actionToggle, SIGNAL(triggered()), SLOT(toggleWindow()));
-
- m_trayIcon->setContextMenu(menu);
-
- m_trayIcon->setIcon(resources()->trayIcon());
- m_trayIcon->show();
}
- if (m_ui->tabWidget->count() == 0) {
- m_trayIcon->setIcon(resources()->trayIcon());
- } else if (m_ui->tabWidget->hasLockableDatabases()) {
+ if (m_ui->tabWidget->hasLockableDatabases()) {
m_trayIcon->setIcon(resources()->trayIconUnlocked());
} else {
m_trayIcon->setIcon(resources()->trayIconLocked());
}
- } else {
- QApplication::setQuitOnLastWindowClosed(true);
+ m_trayIcon->setToolTip(windowTitle().replace("[*]", isWindowModified() ? "*" : ""));
+ m_trayIcon->show();
+
+ if (!isTrayIconEnabled() || !QSystemTrayIcon::isSystemTrayAvailable()) {
+ // Try to show tray icon after 5 seconds, try 5 times
+ // This can happen if KeePassXC starts before the system tray is available
+ static int trayIconAttempts = 0;
+ if (trayIconAttempts < 5) {
+ QTimer::singleShot(5000, this, &MainWindow::updateTrayIcon);
+ ++trayIconAttempts;
+ }
+ }
+ } else {
if (m_trayIcon) {
m_trayIcon->hide();
delete m_trayIcon;
}
}
+
+ QApplication::setQuitOnLastWindowClosed(!isTrayIconEnabled());
}
void MainWindow::obtainContextFocusLock()
@@ -1559,7 +1563,7 @@ void MainWindow::forgetTouchIDAfterInactivity()
bool MainWindow::isTrayIconEnabled() const
{
- return config()->get(Config::GUI_ShowTrayIcon).toBool() && QSystemTrayIcon::isSystemTrayAvailable();
+ return m_trayIcon && m_trayIcon->isVisible();
}
void MainWindow::displayGlobalMessage(const QString& text,