diff --git a/Telegram/SourceFiles/core/core_settings.cpp b/Telegram/SourceFiles/core/core_settings.cpp index 9fdd28b42..546775dae 100644 --- a/Telegram/SourceFiles/core/core_settings.cpp +++ b/Telegram/SourceFiles/core/core_settings.cpp @@ -525,11 +525,11 @@ void Settings::addFromSerialized(const QByteArray &serialized) { || Ui::Integration::Instance().openglLastCheckFailed()); } _groupCallNoiseSuppression = (groupCallNoiseSuppression == 1); - const auto uncheckedWorkMode = static_cast(workMode); + const auto uncheckedWorkMode = static_cast(workMode); switch (uncheckedWorkMode) { - case dbiwmWindowAndTray: - case dbiwmTrayOnly: - case dbiwmWindowOnly: _workMode = uncheckedWorkMode; break; + case WorkMode::WindowAndTray: + case WorkMode::TrayOnly: + case WorkMode::WindowOnly: _workMode = uncheckedWorkMode; break; } } @@ -791,7 +791,7 @@ void Settings::resetOnLastLogout() { _recentEmoji.clear(); _emojiVariants.clear(); - _workMode = dbiwmWindowAndTray; + _workMode = WorkMode::WindowAndTray; } bool Settings::ThirdColumnByDefault() { diff --git a/Telegram/SourceFiles/core/core_settings.h b/Telegram/SourceFiles/core/core_settings.h index 2c9d4d3a2..544754500 100644 --- a/Telegram/SourceFiles/core/core_settings.h +++ b/Telegram/SourceFiles/core/core_settings.h @@ -53,6 +53,11 @@ public: ShowName = 1, ShowNothing = 2, }; + enum class WorkMode { + WindowAndTray = 0, + TrayOnly = 1, + WindowOnly = 2, + }; static constexpr auto kDefaultVolume = 0.9; @@ -526,16 +531,16 @@ public: void setWindowPosition(const WindowPosition &position) { _windowPosition = position; } - void setWorkMode(DBIWorkMode value) { + void setWorkMode(WorkMode value) { _workMode = value; } - [[nodiscard]] DBIWorkMode workMode() const { + [[nodiscard]] WorkMode workMode() const { return _workMode.current(); } - [[nodiscard]] rpl::producer workModeValue() const { + [[nodiscard]] rpl::producer workModeValue() const { return _workMode.value(); } - [[nodiscard]] rpl::producer workModeChanges() const { + [[nodiscard]] rpl::producer workModeChanges() const { return _workMode.changes(); } @@ -658,7 +663,7 @@ private: rpl::variable _systemDarkModeEnabled = false; WindowPosition _windowPosition; // per-window bool _disableOpenGL = false; - rpl::variable _workMode = dbiwmWindowAndTray; + rpl::variable _workMode = WorkMode::WindowAndTray; bool _tabbedReplacedWithInfo = false; // per-window rpl::event_stream _tabbedReplacedWithInfoValue; // per-window diff --git a/Telegram/SourceFiles/core/utils.h b/Telegram/SourceFiles/core/utils.h index d70919d0f..3f932644e 100644 --- a/Telegram/SourceFiles/core/utils.h +++ b/Telegram/SourceFiles/core/utils.h @@ -121,12 +121,6 @@ void memset_rand(void *data, uint32 len); QString translitRusEng(const QString &rus); QString rusKeyboardLayoutSwitch(const QString &from); -enum DBIWorkMode { - dbiwmWindowAndTray = 0, - dbiwmTrayOnly = 1, - dbiwmWindowOnly = 2, -}; - static const int MatrixRowShift = 40000; inline int rowscount(int fullCount, int countPerRow) { diff --git a/Telegram/SourceFiles/mainwindow.cpp b/Telegram/SourceFiles/mainwindow.cpp index 233e21f85..e344f799a 100644 --- a/Telegram/SourceFiles/mainwindow.cpp +++ b/Telegram/SourceFiles/mainwindow.cpp @@ -188,7 +188,8 @@ void MainWindow::applyInitialWorkMode() { const auto minimizeAndHide = [=] { DEBUG_LOG(("Window Pos: First show, setting minimized after.")); setWindowState(windowState() | Qt::WindowMinimized); - if (workMode == dbiwmTrayOnly || workMode == dbiwmWindowAndTray) { + if (workMode == Core::Settings::WorkMode::TrayOnly + || workMode == Core::Settings::WorkMode::WindowAndTray) { hide(); } }; diff --git a/Telegram/SourceFiles/platform/linux/main_window_linux.cpp b/Telegram/SourceFiles/platform/linux/main_window_linux.cpp index e0199862f..e6d1e66a2 100644 --- a/Telegram/SourceFiles/platform/linux/main_window_linux.cpp +++ b/Telegram/SourceFiles/platform/linux/main_window_linux.cpp @@ -61,6 +61,7 @@ namespace Platform { namespace { using internal::WaylandIntegration; +using WorkMode = Core::Settings::WorkMode; constexpr auto kPanelTrayIconName = "telegram-panel"_cs; constexpr auto kMutePanelTrayIconName = "telegram-mute-panel"_cs; @@ -809,7 +810,7 @@ void MainWindow::handleSNIHostRegistered() { _sniAvailable = true; - if (Core::App().settings().workMode() == dbiwmWindowOnly) { + if (Core::App().settings().workMode() == WorkMode::WindowOnly) { return; } @@ -825,7 +826,7 @@ void MainWindow::handleSNIHostRegistered() { SkipTaskbar( windowHandle(), - Core::App().settings().workMode() == dbiwmTrayOnly); + Core::App().settings().workMode() == WorkMode::TrayOnly); } void MainWindow::handleSNIOwnerChanged( @@ -834,7 +835,7 @@ void MainWindow::handleSNIOwnerChanged( const QString &newOwner) { _sniAvailable = IsSNIAvailable(); - if (Core::App().settings().workMode() == dbiwmWindowOnly) { + if (Core::App().settings().workMode() == WorkMode::WindowOnly) { return; } @@ -860,7 +861,7 @@ void MainWindow::handleSNIOwnerChanged( SkipTaskbar( windowHandle(), - (Core::App().settings().workMode() == dbiwmTrayOnly) + (Core::App().settings().workMode() == WorkMode::TrayOnly) && trayAvailable()); } @@ -918,10 +919,10 @@ void MainWindow::psSetupTrayIcon() { } } -void MainWindow::workmodeUpdated(DBIWorkMode mode) { +void MainWindow::workmodeUpdated(Core::Settings::WorkMode mode) { if (!trayAvailable()) { return; - } else if (mode == dbiwmWindowOnly) { + } else if (mode == WorkMode::WindowOnly) { #ifndef DESKTOP_APP_DISABLE_DBUS_INTEGRATION if (_sniTrayIcon) { _sniTrayIcon->setContextMenu(0); @@ -939,7 +940,7 @@ void MainWindow::workmodeUpdated(DBIWorkMode mode) { psSetupTrayIcon(); } - SkipTaskbar(windowHandle(), mode == dbiwmTrayOnly); + SkipTaskbar(windowHandle(), mode == WorkMode::TrayOnly); } void MainWindow::unreadCounterChangedHook() { @@ -1331,7 +1332,7 @@ void MainWindow::handleNativeSurfaceChanged(bool exist) { if (exist) { SkipTaskbar( windowHandle(), - (Core::App().settings().workMode() == dbiwmTrayOnly) + (Core::App().settings().workMode() == WorkMode::TrayOnly) && trayAvailable()); } diff --git a/Telegram/SourceFiles/platform/linux/main_window_linux.h b/Telegram/SourceFiles/platform/linux/main_window_linux.h index 070787cea..cc796bac2 100644 --- a/Telegram/SourceFiles/platform/linux/main_window_linux.h +++ b/Telegram/SourceFiles/platform/linux/main_window_linux.h @@ -51,7 +51,7 @@ protected: void initTrayMenuHook() override; bool hasTrayIcon() const override; - void workmodeUpdated(DBIWorkMode mode) override; + void workmodeUpdated(Core::Settings::WorkMode mode) override; void createGlobalMenu() override; QSystemTrayIcon *trayIcon = nullptr; diff --git a/Telegram/SourceFiles/platform/mac/main_window_mac.h b/Telegram/SourceFiles/platform/mac/main_window_mac.h index bdee966d3..f81c1832b 100644 --- a/Telegram/SourceFiles/platform/mac/main_window_mac.h +++ b/Telegram/SourceFiles/platform/mac/main_window_mac.h @@ -71,7 +71,7 @@ protected: void updateGlobalMenuHook() override; - void workmodeUpdated(DBIWorkMode mode) override; + void workmodeUpdated(Core::Settings::WorkMode mode) override; QSystemTrayIcon *trayIcon = nullptr; QMenu *trayIconMenu = nullptr; diff --git a/Telegram/SourceFiles/platform/mac/main_window_mac.mm b/Telegram/SourceFiles/platform/mac/main_window_mac.mm index 4de1fe0c9..950caed80 100644 --- a/Telegram/SourceFiles/platform/mac/main_window_mac.mm +++ b/Telegram/SourceFiles/platform/mac/main_window_mac.mm @@ -541,9 +541,9 @@ void MainWindow::psSetupTrayIcon() { trayIcon->show(); } -void MainWindow::workmodeUpdated(DBIWorkMode mode) { +void MainWindow::workmodeUpdated(Core::Settings::WorkMode mode) { psSetupTrayIcon(); - if (mode == dbiwmWindowOnly) { + if (mode == Core::Settings::WorkMode::WindowOnly) { if (trayIcon) { trayIcon->setContextMenu(0); delete trayIcon; diff --git a/Telegram/SourceFiles/platform/mac/notifications_manager_mac.mm b/Telegram/SourceFiles/platform/mac/notifications_manager_mac.mm index 19a4d559d..499cb8fed 100644 --- a/Telegram/SourceFiles/platform/mac/notifications_manager_mac.mm +++ b/Telegram/SourceFiles/platform/mac/notifications_manager_mac.mm @@ -234,7 +234,7 @@ Manager::Private::Private(Manager *manager) , _managerIdString(QString::number(_managerId)) , _delegate([[NotificationDelegate alloc] initWithManager:manager managerId:_managerId]) { Core::App().settings().workModeValue( - ) | rpl::start_with_next([=](DBIWorkMode mode) { + ) | rpl::start_with_next([=](Core::Settings::WorkMode mode) { // We need to update the delegate _after_ the tray icon change was done in Qt. // Because Qt resets the delegate. crl::on_main(this, [=] { diff --git a/Telegram/SourceFiles/platform/win/main_window_win.cpp b/Telegram/SourceFiles/platform/win/main_window_win.cpp index ad90832f0..66e3e0a2c 100644 --- a/Telegram/SourceFiles/platform/win/main_window_win.cpp +++ b/Telegram/SourceFiles/platform/win/main_window_win.cpp @@ -268,9 +268,11 @@ void MainWindow::showTrayTooltip() { } } -void MainWindow::workmodeUpdated(DBIWorkMode mode) { +void MainWindow::workmodeUpdated(Core::Settings::WorkMode mode) { + using WorkMode = Core::Settings::WorkMode; + switch (mode) { - case dbiwmWindowAndTray: { + case WorkMode::WindowAndTray: { psSetupTrayIcon(); HWND psOwner = (HWND)GetWindowLongPtr(ps_hWnd, GWLP_HWNDPARENT); if (psOwner) { @@ -279,7 +281,7 @@ void MainWindow::workmodeUpdated(DBIWorkMode mode) { } } break; - case dbiwmTrayOnly: { + case WorkMode::TrayOnly: { psSetupTrayIcon(); HWND psOwner = (HWND)GetWindowLongPtr(ps_hWnd, GWLP_HWNDPARENT); if (!psOwner) { @@ -287,7 +289,7 @@ void MainWindow::workmodeUpdated(DBIWorkMode mode) { } } break; - case dbiwmWindowOnly: { + case WorkMode::WindowOnly: { if (trayIcon) { trayIcon->setContextMenu(0); trayIcon->deleteLater(); diff --git a/Telegram/SourceFiles/platform/win/main_window_win.h b/Telegram/SourceFiles/platform/win/main_window_win.h index 28bd7aa40..de8218075 100644 --- a/Telegram/SourceFiles/platform/win/main_window_win.h +++ b/Telegram/SourceFiles/platform/win/main_window_win.h @@ -85,7 +85,7 @@ protected: void showTrayTooltip() override; - void workmodeUpdated(DBIWorkMode mode) override; + void workmodeUpdated(Core::Settings::WorkMode mode) override; bool initSizeFromSystem() override; diff --git a/Telegram/SourceFiles/settings/settings_advanced.cpp b/Telegram/SourceFiles/settings/settings_advanced.cpp index 5c9246948..cc06f1725 100644 --- a/Telegram/SourceFiles/settings/settings_advanced.cpp +++ b/Telegram/SourceFiles/settings/settings_advanced.cpp @@ -318,6 +318,8 @@ void SetupSpellchecker( void SetupSystemIntegrationContent( Window::SessionController *controller, not_null container) { + using WorkMode = Core::Settings::WorkMode; + const auto checkbox = [&](rpl::producer &&label, bool checked) { return object_ptr( container, @@ -344,8 +346,8 @@ void SetupSystemIntegrationContent( if (Platform::TrayIconSupported()) { const auto trayEnabled = [] { const auto workMode = Core::App().settings().workMode(); - return (workMode == dbiwmTrayOnly) - || (workMode == dbiwmWindowAndTray); + return (workMode == WorkMode::TrayOnly) + || (workMode == WorkMode::WindowAndTray); }; const auto tray = addCheckbox( tr::lng_settings_workmode_tray(), @@ -353,8 +355,8 @@ void SetupSystemIntegrationContent( const auto taskbarEnabled = [] { const auto workMode = Core::App().settings().workMode(); - return (workMode == dbiwmWindowOnly) - || (workMode == dbiwmWindowAndTray); + return (workMode == WorkMode::WindowOnly) + || (workMode == WorkMode::WindowAndTray); }; const auto taskbar = Platform::SkipTaskbarSupported() ? addCheckbox( @@ -365,10 +367,11 @@ void SetupSystemIntegrationContent( const auto updateWorkmode = [=] { const auto newMode = tray->checked() ? ((!taskbar || taskbar->checked()) - ? dbiwmWindowAndTray - : dbiwmTrayOnly) - : dbiwmWindowOnly; - if ((newMode == dbiwmWindowAndTray || newMode == dbiwmTrayOnly) + ? WorkMode::WindowAndTray + : WorkMode::TrayOnly) + : WorkMode::WindowOnly; + if ((newMode == WorkMode::WindowAndTray + || newMode == WorkMode::TrayOnly) && Core::App().settings().workMode() != newMode) { cSetSeenTrayTooltip(false); } diff --git a/Telegram/SourceFiles/storage/details/storage_settings_scheme.cpp b/Telegram/SourceFiles/storage/details/storage_settings_scheme.cpp index 0bdd2c183..44cc82694 100644 --- a/Telegram/SourceFiles/storage/details/storage_settings_scheme.cpp +++ b/Telegram/SourceFiles/storage/details/storage_settings_scheme.cpp @@ -428,11 +428,12 @@ bool ReadSetting( if (!CheckStreamStatus(stream)) return false; const auto newMode = [v] { - switch (v) { - case dbiwmTrayOnly: return dbiwmTrayOnly; - case dbiwmWindowOnly: return dbiwmWindowOnly; + using WorkMode = Core::Settings::WorkMode; + switch (static_cast(v)) { + case WorkMode::TrayOnly: return WorkMode::TrayOnly; + case WorkMode::WindowOnly: return WorkMode::WindowOnly; }; - return dbiwmWindowAndTray; + return WorkMode::WindowAndTray; }(); Core::App().settings().setWorkMode(newMode); diff --git a/Telegram/SourceFiles/window/main_window.cpp b/Telegram/SourceFiles/window/main_window.cpp index dbe11fa5b..f7dac8bd4 100644 --- a/Telegram/SourceFiles/window/main_window.cpp +++ b/Telegram/SourceFiles/window/main_window.cpp @@ -179,7 +179,7 @@ MainWindow::MainWindow(not_null controller) }, lifetime()); Core::App().settings().workModeChanges( - ) | rpl::start_with_next([=](DBIWorkMode mode) { + ) | rpl::start_with_next([=](Core::Settings::WorkMode mode) { workmodeUpdated(mode); }, lifetime()); @@ -211,7 +211,8 @@ bool MainWindow::hideNoQuit() { return false; } const auto workMode = Core::App().settings().workMode(); - if (workMode == dbiwmTrayOnly || workMode == dbiwmWindowAndTray) { + if (workMode == Core::Settings::WorkMode::TrayOnly + || workMode == Core::Settings::WorkMode::WindowAndTray) { if (minimizeToTray()) { if (const auto controller = sessionController()) { Ui::showChatsList(&controller->session()); @@ -316,8 +317,9 @@ void MainWindow::handleStateChanged(Qt::WindowState state) { controller().updateIsActiveFocus(); } Core::App().updateNonIdle(); + using WorkMode = Core::Settings::WorkMode; if (state == Qt::WindowMinimized - && (Core::App().settings().workMode() == dbiwmTrayOnly)) { + && (Core::App().settings().workMode() == WorkMode::TrayOnly)) { minimizeToTray(); } savePosition(state); diff --git a/Telegram/SourceFiles/window/main_window.h b/Telegram/SourceFiles/window/main_window.h index 62828f637..1bd9595ba 100644 --- a/Telegram/SourceFiles/window/main_window.h +++ b/Telegram/SourceFiles/window/main_window.h @@ -11,6 +11,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/rp_widget.h" #include "base/timer.h" #include "base/object_ptr.h" +#include "core/core_settings.h" #include @@ -174,7 +175,7 @@ protected: virtual void showTrayTooltip() { } - virtual void workmodeUpdated(DBIWorkMode mode) { + virtual void workmodeUpdated(Core::Settings::WorkMode mode) { } virtual void createGlobalMenu() { diff --git a/Telegram/SourceFiles/window/window_controller.cpp b/Telegram/SourceFiles/window/window_controller.cpp index f5bb9cba3..ffd15956d 100644 --- a/Telegram/SourceFiles/window/window_controller.cpp +++ b/Telegram/SourceFiles/window/window_controller.cpp @@ -316,7 +316,8 @@ void Controller::updateIsActive() { } void Controller::minimize() { - if (Core::App().settings().workMode() == dbiwmTrayOnly) { + if (Core::App().settings().workMode() + == Core::Settings::WorkMode::TrayOnly) { _widget.minimizeToTray(); } else { _widget.setWindowState(_widget.windowState() | Qt::WindowMinimized);