From 57f769f3586011ad24cc0b6aa7cf9cad47fcc4e7 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Thu, 23 Jun 2022 08:29:11 +0300 Subject: [PATCH] Returned lost method that checks tray existence. --- .../SourceFiles/platform/linux/tray_linux.cpp | 4 ++++ .../SourceFiles/platform/linux/tray_linux.h | 2 ++ Telegram/SourceFiles/platform/mac/tray_mac.h | 2 ++ Telegram/SourceFiles/platform/mac/tray_mac.mm | 4 ++++ .../SourceFiles/platform/win/tray_win.cpp | 4 ++++ Telegram/SourceFiles/platform/win/tray_win.h | 2 ++ Telegram/SourceFiles/tray.cpp | 20 +++++++++++++------ Telegram/SourceFiles/tray.h | 2 ++ Telegram/SourceFiles/window/main_window.cpp | 2 +- 9 files changed, 35 insertions(+), 7 deletions(-) diff --git a/Telegram/SourceFiles/platform/linux/tray_linux.cpp b/Telegram/SourceFiles/platform/linux/tray_linux.cpp index 050c87245e..80108b11f4 100644 --- a/Telegram/SourceFiles/platform/linux/tray_linux.cpp +++ b/Telegram/SourceFiles/platform/linux/tray_linux.cpp @@ -419,6 +419,10 @@ rpl::producer<> Tray::iconClicks() const { return _iconClicks.events(); } +bool Tray::hasIcon() const { + return _icon; +} + rpl::lifetime &Tray::lifetime() { return _lifetime; } diff --git a/Telegram/SourceFiles/platform/linux/tray_linux.h b/Telegram/SourceFiles/platform/linux/tray_linux.h index fcd7306783..dd0175a2c5 100644 --- a/Telegram/SourceFiles/platform/linux/tray_linux.h +++ b/Telegram/SourceFiles/platform/linux/tray_linux.h @@ -33,6 +33,8 @@ public: [[nodiscard]] rpl::producer<> hideToTrayRequests() const; [[nodiscard]] rpl::producer<> iconClicks() const; + [[nodiscard]] bool hasIcon() const; + void createIcon(); void destroyIcon(); diff --git a/Telegram/SourceFiles/platform/mac/tray_mac.h b/Telegram/SourceFiles/platform/mac/tray_mac.h index 228a2abc79..50014bea23 100644 --- a/Telegram/SourceFiles/platform/mac/tray_mac.h +++ b/Telegram/SourceFiles/platform/mac/tray_mac.h @@ -27,6 +27,8 @@ public: [[nodiscard]] rpl::producer<> hideToTrayRequests() const; [[nodiscard]] rpl::producer<> iconClicks() const; + [[nodiscard]] bool hasIcon() const; + void createIcon(); void destroyIcon(); diff --git a/Telegram/SourceFiles/platform/mac/tray_mac.mm b/Telegram/SourceFiles/platform/mac/tray_mac.mm index 04679795a4..81668aa0cb 100644 --- a/Telegram/SourceFiles/platform/mac/tray_mac.mm +++ b/Telegram/SourceFiles/platform/mac/tray_mac.mm @@ -413,6 +413,10 @@ rpl::producer<> Tray::iconClicks() const { return rpl::never<>(); } +bool Tray::hasIcon() const { + return _nativeIcon != nullptr; +} + rpl::lifetime &Tray::lifetime() { return _lifetime; } diff --git a/Telegram/SourceFiles/platform/win/tray_win.cpp b/Telegram/SourceFiles/platform/win/tray_win.cpp index 527126df29..c43ed54090 100644 --- a/Telegram/SourceFiles/platform/win/tray_win.cpp +++ b/Telegram/SourceFiles/platform/win/tray_win.cpp @@ -231,6 +231,10 @@ rpl::producer<> Tray::iconClicks() const { return _iconClicks.events(); } +bool Tray::hasIcon() const { + return _icon; +} + rpl::lifetime &Tray::lifetime() { return _lifetime; } diff --git a/Telegram/SourceFiles/platform/win/tray_win.h b/Telegram/SourceFiles/platform/win/tray_win.h index 31ea88880c..b71785b179 100644 --- a/Telegram/SourceFiles/platform/win/tray_win.h +++ b/Telegram/SourceFiles/platform/win/tray_win.h @@ -32,6 +32,8 @@ public: [[nodiscard]] rpl::producer<> hideToTrayRequests() const; [[nodiscard]] rpl::producer<> iconClicks() const; + [[nodiscard]] bool hasIcon() const; + void createIcon(); void destroyIcon(); diff --git a/Telegram/SourceFiles/tray.cpp b/Telegram/SourceFiles/tray.cpp index 4a70dc4e40..cdd2547efc 100644 --- a/Telegram/SourceFiles/tray.cpp +++ b/Telegram/SourceFiles/tray.cpp @@ -9,6 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "core/application.h" #include "core/core_settings.h" +#include "platform/platform_specific.h" #include @@ -19,17 +20,20 @@ Tray::Tray() { void Tray::create() { rebuildMenu(); - if (Core::App().settings().workMode() != Settings::WorkMode::WindowOnly) { + using WorkMode = Settings::WorkMode; + if (Platform::TrayIconSupported() + && (Core::App().settings().workMode() != WorkMode::WindowOnly)) { _tray.createIcon(); } Core::App().settings().workModeValue( ) | rpl::combine_previous( - ) | rpl::start_with_next([=]( - Settings::WorkMode previous, - Settings::WorkMode state) { - const auto wasHasIcon = (previous != Settings::WorkMode::WindowOnly); - const auto nowHasIcon = (state != Settings::WorkMode::WindowOnly); + ) | rpl::start_with_next([=](WorkMode previous, WorkMode state) { + if (!Platform::TrayIconSupported()) { + return; + } + const auto wasHasIcon = (previous != WorkMode::WindowOnly); + const auto nowHasIcon = (state != WorkMode::WindowOnly); if (wasHasIcon != nowHasIcon) { if (nowHasIcon) { _tray.createIcon(); @@ -177,4 +181,8 @@ void Tray::toggleSoundNotifications() { } } +bool Tray::has() const { + return _tray.hasIcon(); +} + } // namespace Core diff --git a/Telegram/SourceFiles/tray.h b/Telegram/SourceFiles/tray.h index 6c5d7d7a23..f5d68dcc0a 100644 --- a/Telegram/SourceFiles/tray.h +++ b/Telegram/SourceFiles/tray.h @@ -23,6 +23,8 @@ public: [[nodiscard]] rpl::producer<> showFromTrayRequests() const; [[nodiscard]] rpl::producer<> hideToTrayRequests() const; + [[nodiscard]] bool has() const; + private: void rebuildMenu(); void toggleSoundNotifications(); diff --git a/Telegram/SourceFiles/window/main_window.cpp b/Telegram/SourceFiles/window/main_window.cpp index cf98ca731c..0940c72ec6 100644 --- a/Telegram/SourceFiles/window/main_window.cpp +++ b/Telegram/SourceFiles/window/main_window.cpp @@ -903,7 +903,7 @@ Core::WindowPosition MainWindow::SecondaryInitPosition() { } bool MainWindow::minimizeToTray() { - if (Core::Quitting()/* || !hasTrayIcon()*/) { + if (Core::Quitting() || !Core::App().tray().has()) { return false; }