Added ability to swipe-to-back to other sections.

This commit is contained in:
23rd 2025-02-17 21:17:22 +03:00 committed by John Preston
parent 13a93102a5
commit d662a8f2b9
6 changed files with 93 additions and 0 deletions

View file

@ -919,6 +919,8 @@ PRIVATE
history/history_unread_things.h
history/history_view_highlight_manager.cpp
history/history_view_highlight_manager.h
history/history_view_swipe_back_session.cpp
history/history_view_swipe_back_session.h
history/history_widget.cpp
history/history_widget.h
info/bot/earn/info_bot_earn_list.cpp

View file

@ -0,0 +1,55 @@
/*
This file is part of Telegram Desktop,
the official desktop application for the Telegram messaging service.
For license and copyright information please follow this link:
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/
#include "history/history_view_swipe_back_session.h"
#include "history/history_view_swipe_data.h"
#include "history/history_view_swipe.h"
#include "history/view/history_view_list_widget.h"
#include "ui/chat/chat_style.h"
#include "window/window_session_controller.h"
namespace Window {
void SetupSwipeBackSection(
not_null<Ui::RpWidget*> parent,
not_null<Ui::ScrollArea*> scroll,
not_null<HistoryView::ListWidget*> list) {
const auto swipeBackData
= list->lifetime().make_state<HistoryView::SwipeBackResult>();
HistoryView::SetupSwipeHandler(parent, scroll, [=](
HistoryView::ChatPaintGestureHorizontalData data) {
if (data.translation > 0) {
if (!swipeBackData->callback) {
const auto color = [=]() -> std::pair<QColor, QColor> {
const auto c = list->delegate()->listPreparePaintContext({
.theme = list->delegate()->listChatTheme(),
});
return {
c.st->msgServiceBg()->c,
c.st->msgServiceFg()->c,
};
};
(*swipeBackData) = HistoryView::SetupSwipeBack(parent, color);
}
swipeBackData->callback(data);
return;
} else if (swipeBackData->lifetime) {
(*swipeBackData) = {};
}
}, [=](int, Qt::LayoutDirection direction) {
if (direction != Qt::RightToLeft) {
return HistoryView::SwipeHandlerFinishData();
}
return HistoryView::SwipeHandlerFinishData{
.callback = [=] { list->controller()->showBackFromStack(); },
.msgBareId = HistoryView::kMsgBareIdSwipeBack,
};
}, list->touchMaybeSelectingValue());
}
} // namespace Window

View file

@ -0,0 +1,30 @@
/*
This file is part of Telegram Desktop,
the official desktop application for the Telegram messaging service.
For license and copyright information please follow this link:
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/
#pragma once
class WindowListDelegate;
namespace HistoryView {
class ListWidget;
} // namespace HistoryView
namespace Ui {
class RpWidget;
class ScrollArea;
} // namespace Ui
namespace Window {
class SectionWidget;
void SetupSwipeBackSection(
not_null<Ui::RpWidget*> parent,
not_null<Ui::ScrollArea*> scroll,
not_null<HistoryView::ListWidget*> list);
} // namespace Window

View file

@ -13,6 +13,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "history/history.h"
#include "history/history_item_components.h"
#include "history/history_item.h"
#include "history/history_view_swipe_back_session.h"
#include "ui/boxes/confirm_box.h"
#include "ui/widgets/scroll_area.h"
#include "ui/widgets/shadow.h"
@ -173,6 +174,7 @@ PinnedWidget::PinnedWidget(
setupClearButton();
setupTranslateBar();
Window::SetupSwipeBackSection(this, _scroll.get(), _inner);
}
PinnedWidget::~PinnedWidget() = default;

View file

@ -15,6 +15,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "history/history.h"
#include "history/history_drag_area.h"
#include "history/history_item_helpers.h" // GetErrorForSending.
#include "history/history_view_swipe_back_session.h"
#include "menu/menu_send.h" // SendMenu::Type.
#include "ui/widgets/buttons.h"
#include "ui/widgets/tooltip.h"
@ -245,6 +246,7 @@ ScheduledWidget::ScheduledWidget(
_inner->setEmptyInfoWidget(std::move(emptyInfo));
}
setupComposeControls();
Window::SetupSwipeBackSection(this, _scroll, _inner);
}
ScheduledWidget::~ScheduledWidget() = default;

View file

@ -22,6 +22,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "history/view/history_view_list_widget.h"
#include "history/history.h"
#include "history/history_item.h"
#include "history/history_view_swipe_back_session.h"
#include "lang/lang_keys.h"
#include "ui/chat/chat_style.h"
#include "ui/widgets/buttons.h"
@ -146,6 +147,7 @@ SublistWidget::SublistWidget(
setupShortcuts();
setupTranslateBar();
Window::SetupSwipeBackSection(this, _scroll.get(), _inner);
}
SublistWidget::~SublistWidget() = default;