From 2a99f1a1efd49e8e0c5a70b510264d876b63fccd Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 25 Jan 2022 18:40:22 +0300 Subject: [PATCH] Add tabbed-panel-show-on-click option. --- .../SourceFiles/chat_helpers/tabbed_panel.cpp | 13 ++++++++- .../SourceFiles/chat_helpers/tabbed_panel.h | 2 ++ .../SourceFiles/history/history_widget.cpp | 6 +++- .../settings/settings_experimental.cpp | 29 +++++++++++++++++++ 4 files changed, 48 insertions(+), 2 deletions(-) diff --git a/Telegram/SourceFiles/chat_helpers/tabbed_panel.cpp b/Telegram/SourceFiles/chat_helpers/tabbed_panel.cpp index fd989566f..12f473136 100644 --- a/Telegram/SourceFiles/chat_helpers/tabbed_panel.cpp +++ b/Telegram/SourceFiles/chat_helpers/tabbed_panel.cpp @@ -14,6 +14,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "window/window_session_controller.h" #include "mainwindow.h" #include "core/application.h" +#include "base/options.h" #include "styles/style_chat_helpers.h" namespace ChatHelpers { @@ -22,8 +23,16 @@ namespace { constexpr auto kHideTimeoutMs = 300; constexpr auto kDelayedHideTimeoutMs = 3000; +base::options::toggle TabbedPanelShowOnClick({ + .id = kOptionTabbedPanelShowOnClick, + .name = "Show tabbed panel by click", + .description = "Show Emoji / Stickers / GIFs panel only after a click.", +}); + } // namespace +const char kOptionTabbedPanelShowOnClick[] = "tabbed-panel-show-on-click"; + TabbedPanel::TabbedPanel( QWidget *parent, not_null controller, @@ -408,7 +417,9 @@ void TabbedPanel::showStarted() { } bool TabbedPanel::eventFilter(QObject *obj, QEvent *e) { - if (e->type() == QEvent::Enter) { + if (TabbedPanelShowOnClick.value()) { + return false; + } else if (e->type() == QEvent::Enter) { otherEnter(); } else if (e->type() == QEvent::Leave) { otherLeave(); diff --git a/Telegram/SourceFiles/chat_helpers/tabbed_panel.h b/Telegram/SourceFiles/chat_helpers/tabbed_panel.h index 48dba7718..1e1fd6bf3 100644 --- a/Telegram/SourceFiles/chat_helpers/tabbed_panel.h +++ b/Telegram/SourceFiles/chat_helpers/tabbed_panel.h @@ -24,6 +24,8 @@ namespace ChatHelpers { class TabbedSelector; +extern const char kOptionTabbedPanelShowOnClick[]; + class TabbedPanel : public Ui::RpWidget { public: TabbedPanel( diff --git a/Telegram/SourceFiles/history/history_widget.cpp b/Telegram/SourceFiles/history/history_widget.cpp index 10d4fdb69..1dde33297 100644 --- a/Telegram/SourceFiles/history/history_widget.cpp +++ b/Telegram/SourceFiles/history/history_widget.cpp @@ -934,7 +934,11 @@ void HistoryWidget::initTabbedSelector() { refreshTabbedPanel(); _tabbedSelectorToggle->addClickHandler([=] { - toggleTabbedSelectorMode(); + if (_tabbedPanel && _tabbedPanel->isHidden()) { + _tabbedPanel->showAnimated(); + } else { + toggleTabbedSelectorMode(); + } }); const auto selector = controller()->tabbedSelector(); diff --git a/Telegram/SourceFiles/settings/settings_experimental.cpp b/Telegram/SourceFiles/settings/settings_experimental.cpp index 04a25b619..9b2e5e34e 100644 --- a/Telegram/SourceFiles/settings/settings_experimental.cpp +++ b/Telegram/SourceFiles/settings/settings_experimental.cpp @@ -10,6 +10,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/wrap/vertical_layout.h" #include "ui/widgets/buttons.h" #include "ui/widgets/labels.h" +#include "base/options.h" #include "chat_helpers/tabbed_panel.h" #include "lang/lang_keys.h" #include "styles/style_settings.h" @@ -18,6 +19,26 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL namespace Settings { namespace { +void AddOption( + not_null container, + base::options::option &option) { + const auto name = option.name().isEmpty() ? option.id() : option.name(); + AddButton( + container, + rpl::single(name), + st::settingsButton + )->toggleOn(rpl::single(option.value()))->toggledChanges( + ) | rpl::start_with_next([=, &option](bool toggled) { + option.set(toggled); + }, container->lifetime()); + + const auto &description = option.description(); + if (!description.isEmpty()) { + AddSkip(container, st::settingsCheckboxesSkip); + AddDividerText(container, rpl::single(description)); + } +} + void SetupExperimental( not_null controller, not_null container) { @@ -33,6 +54,14 @@ void SetupExperimental( AddDivider(container); AddSkip(container, st::settingsCheckboxesSkip); + + const auto addToggle = [&](const char name[]) { + AddOption(container, base::options::lookup(name)); + }; + + addToggle(ChatHelpers::kOptionTabbedPanelShowOnClick); + + AddSkip(container, st::settingsCheckboxesSkip); } } // namespace