diff --git a/Telegram/SourceFiles/platform/linux/main_window_linux.cpp b/Telegram/SourceFiles/platform/linux/main_window_linux.cpp index 28073de3b..3d8681a40 100644 --- a/Telegram/SourceFiles/platform/linux/main_window_linux.cpp +++ b/Telegram/SourceFiles/platform/linux/main_window_linux.cpp @@ -44,12 +44,6 @@ int32 _trayIconCount = 0; QImage _trayIconImageBack, _trayIconImage; QString _trayIconThemeName, _trayIconName; -#ifndef TDESKTOP_DISABLE_DBUS_INTEGRATION -bool UseUnityCount = false; -QString UnityCountDesktopFile; -QString UnityCountDBusPath = "/"; -#endif // !TDESKTOP_DISABLE_DBUS_INTEGRATION - QString GetTrayIconName() { const auto counter = Core::App().unreadBadge(); const auto muted = Core::App().unreadBadgeMuted(); @@ -222,6 +216,18 @@ bool IsSNIAvailable() { return SNIAvailable; } +bool UseUnityCounter() { +#ifdef TDESKTOP_DISABLE_DBUS_INTEGRATION + static const auto UnityCounter = false; +#else // TDESKTOP_DISABLE_DBUS_INTEGRATION + static const auto UnityCounter = QDBusInterface( + "com.canonical.Unity", + "/").isValid(); +#endif // !TDESKTOP_DISABLE_DBUS_INTEGRATION + + return UnityCounter; +} + quint32 djbStringHash(QString string) { quint32 hash = 5381; QByteArray chars = string.toLatin1(); @@ -375,8 +381,9 @@ void MainWindow::updateIconCounters() { updateWindowIcon(); #ifndef TDESKTOP_DISABLE_DBUS_INTEGRATION - if (UseUnityCount) { + if (UseUnityCounter()) { const auto counter = Core::App().unreadBadge(); + const auto launcherUrl = "application://" + GetLauncherFilename(); QVariantMap dbusUnityProperties; if (counter > 0) { // Gnome requires that count is a 64bit integer @@ -384,16 +391,17 @@ void MainWindow::updateIconCounters() { "count", (qint64) ((counter > 9999) ? 9999 - : (counter))); + : counter)); dbusUnityProperties.insert("count-visible", true); } else { dbusUnityProperties.insert("count-visible", false); } QDBusMessage signal = QDBusMessage::createSignal( - UnityCountDBusPath, + "/com/canonical/unity/launcherentry/" + + QString::number(djbStringHash(launcherUrl)), "com.canonical.Unity.LauncherEntry", "Update"); - signal << "application://" + UnityCountDesktopFile; + signal << launcherUrl; signal << dbusUnityProperties; QDBusConnection::sessionBus().send(signal); } @@ -432,34 +440,11 @@ void MainWindow::initTrayMenuHook() { LOG(("System tray available: %1").arg(Logs::b(trayAvailable))); cSetSupportTray(trayAvailable); -#ifndef TDESKTOP_DISABLE_DBUS_INTEGRATION - if (QDBusInterface("com.canonical.Unity", "/").isValid()) { - const std::vector possibleDesktopFiles = { - GetLauncherFilename(), - "Telegram.desktop" - }; - - for (auto it = possibleDesktopFiles.begin(); - it != possibleDesktopFiles.end(); it++) { - if (!QStandardPaths::locate( - QStandardPaths::ApplicationsLocation, *it).isEmpty()) { - UnityCountDesktopFile = *it; - LOG(("Found Unity Launcher entry %1!") - .arg(UnityCountDesktopFile)); - UseUnityCount = true; - break; - } - } - if (!UseUnityCount) { - LOG(("Could not get Unity Launcher entry!")); - } - UnityCountDBusPath = "/com/canonical/unity/launcherentry/" - + QString::number( - djbStringHash("application://" + UnityCountDesktopFile)); + if (UseUnityCounter()) { + LOG(("Using Unity launcher counter.")); } else { - LOG(("Not using Unity Launcher count.")); + LOG(("Not using Unity launcher counter.")); } -#endif // !TDESKTOP_DISABLE_DBUS_INTEGRATION } MainWindow::~MainWindow() { diff --git a/Telegram/SourceFiles/platform/linux/specific_linux.cpp b/Telegram/SourceFiles/platform/linux/specific_linux.cpp index 08c9ab45c..609c3d7e5 100644 --- a/Telegram/SourceFiles/platform/linux/specific_linux.cpp +++ b/Telegram/SourceFiles/platform/linux/specific_linux.cpp @@ -282,25 +282,34 @@ QString SingleInstanceLocalServerName(const QString &hash) { QString GetLauncherBasename() { static const auto LauncherBasename = [&] { - if (!InSnap()) { - return qsl(MACRO_TO_STRING(TDESKTOP_LAUNCHER_BASENAME)); + if (InSnap()) { + const auto snapNameKey = + qEnvironmentVariableIsSet("SNAP_INSTANCE_NAME") + ? "SNAP_INSTANCE_NAME" + : "SNAP_NAME"; + + return qsl("%1_%2") + .arg(QString::fromLatin1(qgetenv(snapNameKey))) + .arg(cExeName()); } - const auto snapNameKey = - qEnvironmentVariableIsSet("SNAP_INSTANCE_NAME") - ? "SNAP_INSTANCE_NAME" - : "SNAP_NAME"; + const auto possibleBasenames = std::vector{ + qsl(MACRO_TO_STRING(TDESKTOP_LAUNCHER_BASENAME)), + qsl("Telegram") + }; - const auto result = qsl("%1_%2") - .arg(QString::fromLatin1(qgetenv(snapNameKey))) - .arg(cExeName()); + for (const auto &it : possibleBasenames) { + if (!QStandardPaths::locate( + QStandardPaths::ApplicationsLocation, + it + qsl(".desktop")).isEmpty()) { + return it; + } + } - LOG(("SNAP Environment detected, launcher filename is %1.desktop") - .arg(result)); - - return result; + return possibleBasenames[0]; }(); + LOG(("Launcher filename is %1.desktop").arg(LauncherBasename)); return LauncherBasename; }