Browse Source

Let Qt handle system tray icon availability

PR #17519.
adaptive-webui-19844
Vladimir Golovnev 2 years ago committed by GitHub
parent
commit
646322b2a2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 54
      src/gui/desktopintegration.cpp
  2. 2
      src/gui/desktopintegration.h
  3. 11
      src/gui/mainwindow.cpp

54
src/gui/desktopintegration.cpp

@ -85,7 +85,7 @@ DesktopIntegration::DesktopIntegration(QObject *parent) @@ -85,7 +85,7 @@ DesktopIntegration::DesktopIntegration(QObject *parent)
MacUtils::overrideDockClickHandler(handleDockClicked);
#else
if (Preferences::instance()->systemTrayEnabled())
createTrayIcon(20);
createTrayIcon();
#ifdef QBT_USES_CUSTOMDBUSNOTIFICATIONS
if (isNotificationsEnabled())
@ -104,7 +104,7 @@ bool DesktopIntegration::isActive() const @@ -104,7 +104,7 @@ bool DesktopIntegration::isActive() const
#ifdef Q_OS_MACOS
return true;
#else
return (m_systrayIcon != nullptr);
return QSystemTrayIcon::isSystemTrayAvailable();
#endif
}
@ -118,9 +118,10 @@ void DesktopIntegration::setToolTip(const QString &toolTip) @@ -118,9 +118,10 @@ void DesktopIntegration::setToolTip(const QString &toolTip)
if (m_toolTip == toolTip)
return;
m_toolTip = toolTip;
#ifndef Q_OS_MACOS
if (m_systrayIcon)
m_systrayIcon->setToolTip(toolTip);
m_systrayIcon->setToolTip(m_toolTip);
#endif
}
@ -216,7 +217,7 @@ void DesktopIntegration::onPreferencesChanged() @@ -216,7 +217,7 @@ void DesktopIntegration::onPreferencesChanged()
}
else
{
createTrayIcon(20);
createTrayIcon();
}
}
else
@ -229,45 +230,28 @@ void DesktopIntegration::onPreferencesChanged() @@ -229,45 +230,28 @@ void DesktopIntegration::onPreferencesChanged()
}
#ifndef Q_OS_MACOS
void DesktopIntegration::createTrayIcon(const int retries)
void DesktopIntegration::createTrayIcon()
{
Q_ASSERT(!m_systrayIcon);
if (QSystemTrayIcon::isSystemTrayAvailable())
{
m_systrayIcon = new QSystemTrayIcon(UIThemeManager::instance()->getSystrayIcon(), this);
m_systrayIcon = new QSystemTrayIcon(UIThemeManager::instance()->getSystrayIcon(), this);
m_systrayIcon->setToolTip(m_toolTip);
m_systrayIcon->setToolTip(m_toolTip);
if (m_menu)
m_systrayIcon->setContextMenu(m_menu);
if (m_menu)
m_systrayIcon->setContextMenu(m_menu);
connect(m_systrayIcon, &QSystemTrayIcon::activated, this
, [this](const QSystemTrayIcon::ActivationReason reason)
{
if (reason == QSystemTrayIcon::Trigger)
emit activationRequested();
});
connect(m_systrayIcon, &QSystemTrayIcon::activated, this
, [this](const QSystemTrayIcon::ActivationReason reason)
{
if (reason == QSystemTrayIcon::Trigger)
emit activationRequested();
});
#ifndef QBT_USES_CUSTOMDBUSNOTIFICATIONS
connect(m_systrayIcon, &QSystemTrayIcon::messageClicked, this, &DesktopIntegration::notificationClicked);
connect(m_systrayIcon, &QSystemTrayIcon::messageClicked, this, &DesktopIntegration::notificationClicked);
#endif
m_systrayIcon->show();
emit stateChanged();
}
else if (retries > 0)
{
LogMsg(tr("System tray icon is not available, retrying..."), Log::WARNING);
QTimer::singleShot(2s, this, [this, retries]()
{
if (Preferences::instance()->systemTrayEnabled())
createTrayIcon(retries - 1);
});
}
else
{
LogMsg(tr("System tray icon is still not available after retries. Disabling it."), Log::WARNING);
Preferences::instance()->setSystemTrayEnabled(false);
}
m_systrayIcon->show();
emit stateChanged();
}
#endif // Q_OS_MACOS

2
src/gui/desktopintegration.h

@ -76,7 +76,7 @@ signals: @@ -76,7 +76,7 @@ signals:
private:
void onPreferencesChanged();
#ifndef Q_OS_MACOS
void createTrayIcon(int retries);
void createTrayIcon();
#endif // Q_OS_MACOS
CachedSettingValue<bool> m_storeNotificationEnabled;

11
src/gui/mainwindow.cpp

@ -1507,13 +1507,10 @@ void MainWindow::reloadSessionStats() @@ -1507,13 +1507,10 @@ void MainWindow::reloadSessionStats()
MacUtils::setBadgeLabelText({});
}
#else
if (app()->desktopIntegration()->isActive())
{
const auto toolTip = u"%1\n%2"_qs.arg(
tr("DL speed: %1", "e.g: Download speed: 10 KiB/s").arg(Utils::Misc::friendlyUnit(status.payloadDownloadRate, true))
, tr("UP speed: %1", "e.g: Upload speed: 10 KiB/s").arg(Utils::Misc::friendlyUnit(status.payloadUploadRate, true)));
app()->desktopIntegration()->setToolTip(toolTip); // tray icon
}
const auto toolTip = u"%1\n%2"_qs.arg(
tr("DL speed: %1", "e.g: Download speed: 10 KiB/s").arg(Utils::Misc::friendlyUnit(status.payloadDownloadRate, true))
, tr("UP speed: %1", "e.g: Upload speed: 10 KiB/s").arg(Utils::Misc::friendlyUnit(status.payloadUploadRate, true)));
app()->desktopIntegration()->setToolTip(toolTip); // tray icon
#endif // Q_OS_MACOS
if (m_displaySpeedInTitle)

Loading…
Cancel
Save