From ca21b7efaed21b83ae5a75343f0567db141c9eba Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 1 Feb 2022 00:43:20 +0300 Subject: [PATCH] Allow disable Cmd+Q warning on macOS. --- Telegram/Resources/langs/lang.strings | 2 + Telegram/SourceFiles/core/core_settings.cpp | 8 ++- Telegram/SourceFiles/core/core_settings.h | 8 +++ .../platform/mac/main_window_mac.mm | 6 +- .../settings/settings_advanced.cpp | 57 ++++++++++++------- Telegram/lib_base | 2 +- 6 files changed, 60 insertions(+), 23 deletions(-) diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index 644eed06a..89296802d 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -389,6 +389,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_settings_auto_start_disabled_uwp" = "Starting with the system was disabled in Windows Settings.\n\nPlease enable Telegram Desktop in the Startup Apps Settings."; "lng_settings_open_system_settings" = "Open Settings"; "lng_settings_add_sendto" = "Place Telegram in \"Send to\" menu"; +"lng_settings_mac_warn_before_quit" = "Show warning before quitting with {text}"; "lng_settings_section_scale" = "Interface Scale"; "lng_settings_scale_auto" = "Auto ({cur})"; @@ -3065,6 +3066,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_mac_menu_preferences" = "Preferences..."; "lng_mac_menu_quit_telegram" = "Quit {telegram}"; "lng_mac_menu_about_telegram" = "About {telegram}"; +//"lng_mac_menu_warn_before_quit" = "Warn Before Quitting ({text})"; "lng_mac_menu_file" = "File"; "lng_mac_menu_logout" = "Log Out"; "lng_mac_menu_edit" = "Edit"; diff --git a/Telegram/SourceFiles/core/core_settings.cpp b/Telegram/SourceFiles/core/core_settings.cpp index ca15ba2cf..c47404bce 100644 --- a/Telegram/SourceFiles/core/core_settings.cpp +++ b/Telegram/SourceFiles/core/core_settings.cpp @@ -227,7 +227,8 @@ QByteArray Settings::serialize() const { << qint32(_closeToTaskbar.current() ? 1 : 0) << _customDeviceModel.current() << qint32(_playerRepeatMode.current()) - << qint32(_playerOrderMode.current()); + << qint32(_playerOrderMode.current()) + << qint32(_macWarnBeforeQuit ? 1 : 0); } return result; } @@ -314,6 +315,7 @@ void Settings::addFromSerialized(const QByteArray &serialized) { QString customDeviceModel = _customDeviceModel.current(); qint32 playerRepeatMode = static_cast(_playerRepeatMode.current()); qint32 playerOrderMode = static_cast(_playerOrderMode.current()); + qint32 macWarnBeforeQuit = _macWarnBeforeQuit ? 1 : 0; stream >> themesAccentColors; if (!stream.atEnd()) { @@ -482,6 +484,9 @@ void Settings::addFromSerialized(const QByteArray &serialized) { >> playerRepeatMode >> playerOrderMode; } + if (!stream.atEnd()) { + stream >> macWarnBeforeQuit; + } if (stream.status() != QDataStream::Ok) { LOG(("App Error: " "Bad data for Core::Settings::constructFromSerialized()")); @@ -636,6 +641,7 @@ void Settings::addFromSerialized(const QByteArray &serialized) { case Media::Player::OrderMode::Reverse: case Media::Player::OrderMode::Shuffle: _playerOrderMode = uncheckedPlayerOrderMode; break; } + _macWarnBeforeQuit = macWarnBeforeQuit ? 1 : 0; } QString Settings::getSoundPath(const QString &key) const { diff --git a/Telegram/SourceFiles/core/core_settings.h b/Telegram/SourceFiles/core/core_settings.h index b057a1f64..414d56da5 100644 --- a/Telegram/SourceFiles/core/core_settings.h +++ b/Telegram/SourceFiles/core/core_settings.h @@ -657,6 +657,13 @@ public: return _playerOrderMode.changes(); } + void setMacWarnBeforeQuit(bool value) { + _macWarnBeforeQuit = value; + } + [[nodiscard]] bool macWarnBeforeQuit() const { + return _macWarnBeforeQuit; + } + [[nodiscard]] static bool ThirdColumnByDefault(); [[nodiscard]] static float64 DefaultDialogsWidthRatio(); [[nodiscard]] static qint32 SerializePlaybackSpeed(float64 speed) { @@ -760,6 +767,7 @@ private: rpl::variable _customDeviceModel; rpl::variable _playerRepeatMode; rpl::variable _playerOrderMode; + bool _macWarnBeforeQuit = true; bool _tabbedReplacedWithInfo = false; // per-window rpl::event_stream _tabbedReplacedWithInfoValue; // per-window diff --git a/Telegram/SourceFiles/platform/mac/main_window_mac.mm b/Telegram/SourceFiles/platform/mac/main_window_mac.mm index 4c538e84d..9621b83e7 100644 --- a/Telegram/SourceFiles/platform/mac/main_window_mac.mm +++ b/Telegram/SourceFiles/platform/mac/main_window_mac.mm @@ -289,9 +289,13 @@ bool MainWindow::preventsQuit(Core::QuitReason reason) { // Thanks Chromium, see // chromium.org/developers/design-documents/confirm-to-quit-experiment return (reason == Core::QuitReason::QtQuitEvent) + && Core::App().settings().macWarnBeforeQuit() && ([[NSApp currentEvent] type] == NSKeyDown) && !Platform::ConfirmQuit::RunModal( - tr::lng_mac_hold_to_quit(tr::now, lt_text, "{key}")); + tr::lng_mac_hold_to_quit( + tr::now, + lt_text, + Platform::ConfirmQuit::QuitKeysString())); } void MainWindow::psTrayMenuUpdated() { diff --git a/Telegram/SourceFiles/settings/settings_advanced.cpp b/Telegram/SourceFiles/settings/settings_advanced.cpp index 1b8681650..ea72c91e0 100644 --- a/Telegram/SourceFiles/settings/settings_advanced.cpp +++ b/Telegram/SourceFiles/settings/settings_advanced.cpp @@ -38,6 +38,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "mtproto/facade.h" #include "styles/style_settings.h" +#ifdef Q_OS_MAC +#include "base/platform/mac/base_confirm_quit.h" +#endif // Q_OS_MAC + #ifndef TDESKTOP_DISABLE_SPELLCHECK #include "boxes/dictionaries_manager.h" #include "chat_helpers/spellchecker_common.h" @@ -399,7 +403,7 @@ void SetupSystemIntegrationContent( cSetSeenTrayTooltip(false); } Core::App().settings().setWorkMode(newMode); - Local::writeSettings(); + Core::App().saveSettingsDelayed(); }; tray->checkedChanges( @@ -427,27 +431,40 @@ void SetupSystemIntegrationContent( } } - if (!Platform::IsMac()) { - const auto closeToTaskbar = addSlidingCheckbox( - tr::lng_settings_close_to_taskbar(), - Core::App().settings().closeToTaskbar()); +#ifdef Q_OS_MAC + const auto warnBeforeQuit = addCheckbox( + tr::lng_settings_mac_warn_before_quit( + lt_text, + rpl::single(Platform::ConfirmQuit::QuitKeysString())), + Core::App().settings().macWarnBeforeQuit()); + warnBeforeQuit->checkedChanges( + ) | rpl::filter([=](bool checked) { + return (checked != Core::App().settings().macWarnBeforeQuit()); + }) | rpl::start_with_next([=](bool checked) { + Core::App().settings().setMacWarnBeforeQuit(checked); + Core::App().saveSettingsDelayed(); + }, warnBeforeQuit->lifetime()); +#else // Q_OS_MAC + const auto closeToTaskbar = addSlidingCheckbox( + tr::lng_settings_close_to_taskbar(), + Core::App().settings().closeToTaskbar()); - const auto closeToTaskbarShown = std::make_shared>(false); - Core::App().settings().workModeValue( - ) | rpl::start_with_next([=](WorkMode workMode) { - *closeToTaskbarShown = (workMode == WorkMode::WindowOnly) - || !Platform::TrayIconSupported(); - }, closeToTaskbar->lifetime()); + const auto closeToTaskbarShown = std::make_shared>(false); + Core::App().settings().workModeValue( + ) | rpl::start_with_next([=](WorkMode workMode) { + *closeToTaskbarShown = (workMode == WorkMode::WindowOnly) + || !Platform::TrayIconSupported(); + }, closeToTaskbar->lifetime()); - closeToTaskbar->toggleOn(closeToTaskbarShown->value()); - closeToTaskbar->entity()->checkedChanges( - ) | rpl::filter([=](bool checked) { - return (checked != Core::App().settings().closeToTaskbar()); - }) | rpl::start_with_next([=](bool checked) { - Core::App().settings().setCloseToTaskbar(checked); - Local::writeSettings(); - }, closeToTaskbar->lifetime()); - } + closeToTaskbar->toggleOn(closeToTaskbarShown->value()); + closeToTaskbar->entity()->checkedChanges( + ) | rpl::filter([=](bool checked) { + return (checked != Core::App().settings().closeToTaskbar()); + }) | rpl::start_with_next([=](bool checked) { + Core::App().settings().setCloseToTaskbar(checked); + Local::writeSettings(); + }, closeToTaskbar->lifetime()); +#endif // Q_OS_MAC if (Ui::Platform::NativeWindowFrameSupported()) { const auto nativeFrame = addCheckbox( diff --git a/Telegram/lib_base b/Telegram/lib_base index fdd2714a2..5d99fef79 160000 --- a/Telegram/lib_base +++ b/Telegram/lib_base @@ -1 +1 @@ -Subproject commit fdd2714a2ae0a42ff1ee06c4ae6815a3fd575a2e +Subproject commit 5d99fef79a9a311896199b223a0325c0998f9c9a