diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index 8b353c5c6..96fb42e79 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -2578,4 +2578,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "ktg_forward_go_to_chat" = "Go to chat"; +"ktg_settings_forward" = "Forward"; +"ktg_settings_forward_retain_selection" = "Retain selection after forward"; + // Keys finished diff --git a/Telegram/Resources/langs/rewrites/en.json b/Telegram/Resources/langs/rewrites/en.json index 858d1d059..0baf7a452 100644 --- a/Telegram/Resources/langs/rewrites/en.json +++ b/Telegram/Resources/langs/rewrites/en.json @@ -168,6 +168,8 @@ // New strings "ktg_forward_go_to_chat": "Go to chat", + "ktg_settings_forward": "Forward", + "ktg_settings_forward_retain_selection": "Retain selection after forward", // This string should always be last for better work with Git. "dummy_last_string": "" diff --git a/Telegram/Resources/langs/rewrites/pl.json b/Telegram/Resources/langs/rewrites/pl.json index 703911c1e..24492479d 100644 --- a/Telegram/Resources/langs/rewrites/pl.json +++ b/Telegram/Resources/langs/rewrites/pl.json @@ -176,6 +176,8 @@ // New strings "ktg_forward_go_to_chat": "Go to chat", + "ktg_settings_forward": "Forward", + "ktg_settings_forward_retain_selection": "Retain selection after forward", // This string should always be last for better work with Git. "dummy_last_string": "" diff --git a/Telegram/Resources/langs/rewrites/ru.json b/Telegram/Resources/langs/rewrites/ru.json index 166fef554..934cb9d5f 100644 --- a/Telegram/Resources/langs/rewrites/ru.json +++ b/Telegram/Resources/langs/rewrites/ru.json @@ -175,6 +175,8 @@ // New strings "ktg_forward_go_to_chat": "Перейти в чат", + "ktg_settings_forward": "Пересылка", + "ktg_settings_forward_retain_selection": "Сохранять выделение после пересылки", // This string should always be last for better work with Git. "dummy_last_string": "" diff --git a/Telegram/Resources/langs/rewrites/tr.json b/Telegram/Resources/langs/rewrites/tr.json index 727af981f..8af321664 100644 --- a/Telegram/Resources/langs/rewrites/tr.json +++ b/Telegram/Resources/langs/rewrites/tr.json @@ -168,6 +168,8 @@ // New strings "ktg_forward_go_to_chat": "Go to chat", + "ktg_settings_forward": "Forward", + "ktg_settings_forward_retain_selection": "Retain selection after forward", // This string should always be last for better work with Git. "dummy_last_string": "" diff --git a/Telegram/Resources/langs/rewrites/uk.json b/Telegram/Resources/langs/rewrites/uk.json index 74eec40b3..7fb592e99 100644 --- a/Telegram/Resources/langs/rewrites/uk.json +++ b/Telegram/Resources/langs/rewrites/uk.json @@ -175,6 +175,8 @@ // New strings "ktg_forward_go_to_chat": "Go to chat", + "ktg_settings_forward": "Forward", + "ktg_settings_forward_retain_selection": "Retain selection after forward", // This string should always be last for better work with Git. "dummy_last_string": "" diff --git a/Telegram/SourceFiles/kotato/json_settings.cpp b/Telegram/SourceFiles/kotato/json_settings.cpp index 70566b4cf..b7e21c6a4 100644 --- a/Telegram/SourceFiles/kotato/json_settings.cpp +++ b/Telegram/SourceFiles/kotato/json_settings.cpp @@ -212,6 +212,7 @@ QByteArray GenerateSettingsJson(bool areDefault = false) { settings.insert(qsl("profile_top_mute"), cProfileTopBarNotifications()); settings.insert(qsl("hover_emoji_panel"), HoverEmojiPanel()); settings.insert(qsl("monospace_large_bubbles"), MonospaceLargeBubbles()); + settings.insert(qsl("forward_retain_selection"), cForwardRetainSelection()); settingsFonts.insert(qsl("use_system_font"), cUseSystemFont()); settingsFonts.insert(qsl("use_original_metrics"), cUseOriginalMetrics()); @@ -516,6 +517,10 @@ bool Manager::readCustomFile() { ReadBoolOption(settings, "hover_emoji_panel", [&](auto v) { SetHoverEmojiPanel(v); }); + + ReadBoolOption(settings, "forward_retain_selection", [&](auto v) { + cSetForwardRetainSelection(v); + }); return true; } diff --git a/Telegram/SourceFiles/kotato/settings.cpp b/Telegram/SourceFiles/kotato/settings.cpp index 69796a45a..72caea07a 100644 --- a/Telegram/SourceFiles/kotato/settings.cpp +++ b/Telegram/SourceFiles/kotato/settings.cpp @@ -186,3 +186,5 @@ bool HoverEmojiPanel() { rpl::producer HoverEmojiPanelChanges() { return gHoverEmojiPanel.changes(); } + +bool gForwardRetainSelection = false; diff --git a/Telegram/SourceFiles/kotato/settings.h b/Telegram/SourceFiles/kotato/settings.h index 71b9db212..459df11ab 100644 --- a/Telegram/SourceFiles/kotato/settings.h +++ b/Telegram/SourceFiles/kotato/settings.h @@ -121,3 +121,5 @@ DeclareSetting(bool, ProfileTopBarNotifications); void SetHoverEmojiPanel(bool enabled); [[nodiscard]] bool HoverEmojiPanel(); [[nodiscard]] rpl::producer HoverEmojiPanelChanges(); + +DeclareSetting(bool, ForwardRetainSelection); diff --git a/Telegram/SourceFiles/kotato/settings_menu.cpp b/Telegram/SourceFiles/kotato/settings_menu.cpp index 2e819bfd2..1c75369bd 100644 --- a/Telegram/SourceFiles/kotato/settings_menu.cpp +++ b/Telegram/SourceFiles/kotato/settings_menu.cpp @@ -372,6 +372,16 @@ void SetupKotatoMessages(not_null container) { AddSkip(container); } +void SetupKotatoForward(not_null container) { + AddDivider(container); + AddSkip(container); + AddSubsectionTitle(container, tr::ktg_settings_forward()); + + SettingsMenuCSwitch(ktg_settings_forward_retain_selection, ForwardRetainSelection); + + AddSkip(container); +} + void SetupKotatoNetwork(not_null container) { AddDivider(container); AddSkip(container); @@ -585,6 +595,7 @@ void Kotato::setupContent(not_null controller) { SetupKotatoChats(controller, content); SetupKotatoMessages(content); + SetupKotatoForward(content); SetupKotatoNetwork(content); SetupKotatoFolders(controller, content); SetupKotatoSystem(controller, content); diff --git a/Telegram/SourceFiles/kotato/settings_menu.h b/Telegram/SourceFiles/kotato/settings_menu.h index a9ce315a8..66194d31d 100644 --- a/Telegram/SourceFiles/kotato/settings_menu.h +++ b/Telegram/SourceFiles/kotato/settings_menu.h @@ -15,6 +15,7 @@ namespace Settings { void SetupKotatoChats(not_null container); void SetupKotatoMessages(not_null container); +void SetupKotatoForward(not_null container); void SetupKotatoNetwork(not_null container); void SetupKotatoFolders( not_null controller, diff --git a/Telegram/SourceFiles/window/window_peer_menu.cpp b/Telegram/SourceFiles/window/window_peer_menu.cpp index 92cd5b1e9..d88a468ba 100644 --- a/Telegram/SourceFiles/window/window_peer_menu.cpp +++ b/Telegram/SourceFiles/window/window_peer_menu.cpp @@ -1025,13 +1025,15 @@ QPointer ShowForwardMessagesBox( MessageIdsList &&items, FnMut &&successCallback) { struct ShareData { - ShareData(not_null peer, MessageIdsList &&ids) + ShareData(not_null peer, MessageIdsList &&ids, FnMut &&callback) : peer(peer) - , msgIds(std::move(ids)) { + , msgIds(std::move(ids)) + , submitCallback(std::move(callback)) { } not_null peer; MessageIdsList msgIds; base::flat_set requests; + FnMut submitCallback; }; const auto weak = std::make_shared>(); const auto item = App::wnd()->sessionController()->session().data().message(items[0]); @@ -1043,7 +1045,7 @@ QPointer ShowForwardMessagesBox( && item->media() && (item->media()->game() != nullptr); const auto canCopyLink = items.size() == 1 && (item->hasDirectLink() || isGame); - const auto data = std::make_shared(history->peer, std::move(items)); + const auto data = std::make_shared(history->peer, std::move(items), std::move(successCallback)); auto copyCallback = [=]() { if (const auto item = owner->message(data->msgIds[0])) { @@ -1162,6 +1164,9 @@ QPointer ShowForwardMessagesBox( }); data->requests.insert(history->sendRequestId); } + if (data->submitCallback && !cForwardRetainSelection()) { + data->submitCallback(); + } }; auto filterCallback = [](PeerData *peer) { return peer->canWrite();