diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index 600f37e1d..66a51005b 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -499,8 +499,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_settings_notify_global" = "Global settings"; "lng_settings_notify_title" = "Notifications for chats"; "lng_settings_desktop_notify" = "Desktop notifications"; -"lng_settings_native_title" = "Native notifications"; +"lng_settings_native_title" = "System integration"; "lng_settings_use_windows" = "Use Windows notifications"; +"lng_settings_skip_in_focus" = "Respect system Focus mode"; "lng_settings_use_native_notifications" = "Use native notifications"; "lng_settings_notifications_position" = "Location on the screen"; "lng_settings_notifications_count" = "Notifications count"; diff --git a/Telegram/SourceFiles/core/core_settings.cpp b/Telegram/SourceFiles/core/core_settings.cpp index 71d9ae0e8..af6819f8f 100644 --- a/Telegram/SourceFiles/core/core_settings.cpp +++ b/Telegram/SourceFiles/core/core_settings.cpp @@ -222,7 +222,7 @@ QByteArray Settings::serialize() const { + Serialize::stringSize(_customFontFamily) + sizeof(qint32) * 3 + Serialize::bytearraySize(_tonsiteStorageToken) - + sizeof(qint32) * 2; + + sizeof(qint32) * 3; auto result = QByteArray(); result.reserve(size); @@ -378,7 +378,8 @@ QByteArray Settings::serialize() const { << qint32(!_weatherInCelsius ? 0 : *_weatherInCelsius ? 1 : 2) << _tonsiteStorageToken << qint32(_includeMutedCounterFolders ? 1 : 0) - << qint32(_ivZoom.current()); + << qint32(_ivZoom.current()) + << qint32(_skipToastsInFocus ? 1 : 0); } Ensures(result.size() == size); @@ -503,6 +504,7 @@ void Settings::addFromSerialized(const QByteArray &serialized) { qint32 weatherInCelsius = !_weatherInCelsius ? 0 : *_weatherInCelsius ? 1 : 2; QByteArray tonsiteStorageToken = _tonsiteStorageToken; qint32 ivZoom = _ivZoom.current(); + qint32 skipToastsInFocus = _skipToastsInFocus ? 1 : 0; stream >> themesAccentColors; if (!stream.atEnd()) { @@ -815,6 +817,9 @@ void Settings::addFromSerialized(const QByteArray &serialized) { if (!stream.atEnd()) { stream >> ivZoom; } + if (!stream.atEnd()) { + stream >> skipToastsInFocus; + } if (stream.status() != QDataStream::Ok) { LOG(("App Error: " "Bad data for Core::Settings::constructFromSerialized()")); @@ -1027,6 +1032,7 @@ void Settings::addFromSerialized(const QByteArray &serialized) { : (weatherInCelsius == 1); _tonsiteStorageToken = tonsiteStorageToken; _ivZoom = ivZoom; + _skipToastsInFocus = (skipToastsInFocus == 1); } QString Settings::getSoundPath(const QString &key) const { @@ -1353,6 +1359,7 @@ void Settings::resetOnLastLogout() { _flashBounceNotify = true; _notifyView = NotifyView::ShowPreview; //_nativeNotifications = std::nullopt; + //_skipToastsInFocus = false; //_notificationsCount = 3; //_notificationsCorner = ScreenCorner::BottomRight; _includeMutedCounter = true; @@ -1472,6 +1479,14 @@ void Settings::setNativeNotifications(bool value) { : std::make_optional(value); } +bool Settings::skipToastsInFocus() const { + return _skipToastsInFocus; +} + +void Settings::setSkipToastsInFocus(bool value) { + _skipToastsInFocus = value; +} + void Settings::setTranslateButtonEnabled(bool value) { _translateButtonEnabled = value; } diff --git a/Telegram/SourceFiles/core/core_settings.h b/Telegram/SourceFiles/core/core_settings.h index 54199d8e5..821f9ec21 100644 --- a/Telegram/SourceFiles/core/core_settings.h +++ b/Telegram/SourceFiles/core/core_settings.h @@ -220,6 +220,9 @@ public: [[nodiscard]] bool nativeNotifications() const; void setNativeNotifications(bool value); + [[nodiscard]] bool skipToastsInFocus() const; + void setSkipToastsInFocus(bool value); + [[nodiscard]] int notificationsCount() const { return _notificationsCount; } @@ -958,6 +961,7 @@ private: bool _flashBounceNotify = true; NotifyView _notifyView = NotifyView::ShowPreview; std::optional _nativeNotifications; + bool _skipToastsInFocus = false; int _notificationsCount = 3; ScreenCorner _notificationsCorner = ScreenCorner::BottomRight; bool _includeMutedCounter = true; diff --git a/Telegram/SourceFiles/platform/win/notifications_manager_win.cpp b/Telegram/SourceFiles/platform/win/notifications_manager_win.cpp index 99cd1b907..618e81823 100644 --- a/Telegram/SourceFiles/platform/win/notifications_manager_win.cpp +++ b/Telegram/SourceFiles/platform/win/notifications_manager_win.cpp @@ -367,6 +367,7 @@ bool SkipSoundForCustom() { return (UserNotificationState == QUNS_NOT_PRESENT) || (UserNotificationState == QUNS_PRESENTATION_MODE) + || (FocusAssistBlocks && Core::App().settings().skipToastsInFocus()) || Core::App().screenIsLocked(); } @@ -387,7 +388,8 @@ bool SkipToastForCustom() { QuerySystemNotificationSettings(); return (UserNotificationState == QUNS_PRESENTATION_MODE) - || (UserNotificationState == QUNS_RUNNING_D3D_FULL_SCREEN); + || (UserNotificationState == QUNS_RUNNING_D3D_FULL_SCREEN) + || (FocusAssistBlocks && Core::App().settings().skipToastsInFocus()); } void MaybeFlashBounceForCustom(Fn flashBounce) { diff --git a/Telegram/SourceFiles/settings/settings_notifications.cpp b/Telegram/SourceFiles/settings/settings_notifications.cpp index cf3c759af..00a8bdb9e 100644 --- a/Telegram/SourceFiles/settings/settings_notifications.cpp +++ b/Telegram/SourceFiles/settings/settings_notifications.cpp @@ -864,6 +864,27 @@ NotifyViewCheckboxes SetupNotifyViewOptions( void SetupAdvancedNotifications( not_null controller, not_null container) { + if (Platform::IsWindows()) { + const auto skipInFocus = container->add(object_ptr