From 3bbef51448e18a3daaed5a41540f1075c1afb52d Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 6 Apr 2026 17:00:06 +0700 Subject: [PATCH] Add an experimental option for "AI Tools" button. --- .../SourceFiles/history/history_widget.cpp | 18 ++++-------------- .../controls/history_view_compose_controls.cpp | 18 ++++-------------- .../settings/settings_experimental.cpp | 2 ++ .../ui/controls/compose_ai_button_factory.cpp | 12 +++++++++++- .../ui/controls/compose_ai_button_factory.h | 2 ++ 5 files changed, 23 insertions(+), 29 deletions(-) diff --git a/Telegram/SourceFiles/history/history_widget.cpp b/Telegram/SourceFiles/history/history_widget.cpp index 9b5e34dc77..cd39b38f1c 100644 --- a/Telegram/SourceFiles/history/history_widget.cpp +++ b/Telegram/SourceFiles/history/history_widget.cpp @@ -54,6 +54,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/painter.h" #include "ui/rect.h" #include "ui/power_saving.h" +#include "ui/controls/compose_ai_button_factory.h" #include "ui/controls/emoji_button.h" #include "ui/controls/send_button.h" #include "ui/controls/send_as_button.h" @@ -6246,20 +6247,9 @@ bool HistoryWidget::fieldOrDisabledShown() const { } bool HistoryWidget::hasEnoughLinesForAi() const { - if (!_history - || _voiceRecordBar->isActive() - || session().appConfig().aiComposeStyles().empty()) { - return false; - } - const auto &style = _field->st().style; - const auto lineHeight = style.lineHeight - ? style.lineHeight - : style.font->height; - const auto margins = _field->fullTextMargins(); - const auto contentHeight = _field->height() - - margins.top() - - margins.bottom(); - return contentHeight >= (3 * lineHeight); + return _history + && !_voiceRecordBar->isActive() + && Ui::HasEnoughLinesForAi(&session(), _field); } void HistoryWidget::updateAiButtonVisibility() { diff --git a/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp b/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp index 8780c92df8..b96697a8ef 100644 --- a/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp +++ b/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp @@ -92,6 +92,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/widgets/dropdown_menu.h" #include "ui/widgets/popup_menu.h" #include "ui/text/format_values.h" +#include "ui/controls/compose_ai_button_factory.h" #include "ui/controls/emoji_button.h" #include "ui/controls/send_button.h" #include "ui/controls/send_as_button.h" @@ -3640,20 +3641,9 @@ bool ComposeControls::canSendAiComposeDirect() const { } bool ComposeControls::hasEnoughLinesForAi() const { - if (!_history - || _recording.current() - || session().appConfig().aiComposeStyles().empty()) { - return false; - } - const auto &style = _field->st().style; - const auto lineHeight = style.lineHeight - ? style.lineHeight - : style.font->height; - const auto margins = _field->fullTextMargins(); - const auto contentHeight = _field->height() - - margins.top() - - margins.bottom(); - return contentHeight >= (3 * lineHeight); + return _history + && !_recording.current() + && Ui::HasEnoughLinesForAi(&session(), _field); } bool ComposeControls::updateBotCommandShown() { diff --git a/Telegram/SourceFiles/settings/settings_experimental.cpp b/Telegram/SourceFiles/settings/settings_experimental.cpp index 57747c20d5..31315bdae3 100644 --- a/Telegram/SourceFiles/settings/settings_experimental.cpp +++ b/Telegram/SourceFiles/settings/settings_experimental.cpp @@ -19,6 +19,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/vertical_list.h" #include "ui/gl/gl_detection.h" #include "ui/chat/chat_style_radius.h" +#include "ui/controls/compose_ai_button_factory.h" #include "base/options.h" #include "boxes/moderate_messages_box.h" #include "core/application.h" @@ -233,6 +234,7 @@ void SetupExperimental( addToggle(kModerateCommonGroups); addToggle(kForceComposeSearchOneColumn); addToggle(ChatHelpers::kOptionUnlimitedRecentStickers); + addToggle(Ui::kOptionHideAiButton); } } // namespace diff --git a/Telegram/SourceFiles/ui/controls/compose_ai_button_factory.cpp b/Telegram/SourceFiles/ui/controls/compose_ai_button_factory.cpp index 12df0832a0..8601b9a2ef 100644 --- a/Telegram/SourceFiles/ui/controls/compose_ai_button_factory.cpp +++ b/Telegram/SourceFiles/ui/controls/compose_ai_button_factory.cpp @@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "ui/controls/compose_ai_button_factory.h" +#include "base/options.h" #include "boxes/compose_ai_box.h" #include "history/view/controls/history_view_compose_ai_button.h" #include "lang/lang_keys.h" @@ -19,10 +20,19 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL namespace Ui { +const char kOptionHideAiButton[] = "hide-ai-button"; + +base::options::toggle HideAiButtonOption({ + .id = kOptionHideAiButton, + .name = "Hide AI button", + .description = "Hide the AI Tools button in message compose fields.", +}); + bool HasEnoughLinesForAi( not_null session, not_null field) { - if (session->appConfig().aiComposeStyles().empty()) { + if (HideAiButtonOption.value() + || session->appConfig().aiComposeStyles().empty()) { return false; } const auto &style = field->st().style; diff --git a/Telegram/SourceFiles/ui/controls/compose_ai_button_factory.h b/Telegram/SourceFiles/ui/controls/compose_ai_button_factory.h index 5acb15b297..6044c8fe14 100644 --- a/Telegram/SourceFiles/ui/controls/compose_ai_button_factory.h +++ b/Telegram/SourceFiles/ui/controls/compose_ai_button_factory.h @@ -23,6 +23,8 @@ class ComposeAiButton; namespace Ui { +extern const char kOptionHideAiButton[]; + [[nodiscard]] bool HasEnoughLinesForAi( not_null session, not_null field);