From 66ac4d615062c90789c756bd34773dd929332563 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 9 Mar 2018 00:21:27 +0300 Subject: [PATCH] No fast reply and double click reply if selecting. Also fix messages selection glitch. --- .../admin_log/history_admin_log_inner.cpp | 4 ++++ .../admin_log/history_admin_log_inner.h | 1 + .../history/history_inner_widget.cpp | 22 ++++++++++++++++--- .../history/history_inner_widget.h | 1 + .../SourceFiles/history/history_widget.cpp | 4 ++++ Telegram/SourceFiles/history/history_widget.h | 1 + .../history/view/history_view_element.h | 1 + .../history/view/history_view_list_widget.cpp | 4 ++++ .../history/view/history_view_list_widget.h | 1 + .../history/view/history_view_message.cpp | 4 +++- Telegram/SourceFiles/mainwidget.cpp | 4 ++++ Telegram/SourceFiles/mainwidget.h | 2 ++ 12 files changed, 45 insertions(+), 4 deletions(-) diff --git a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp index 57c11d595..1d74c0ef6 100644 --- a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp +++ b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp @@ -513,6 +513,10 @@ TimeMs InnerWidget::elementHighlightTime( return TimeMs(0); } +bool InnerWidget::elementInSelectionMode() { + return false; +} + void InnerWidget::saveState(not_null memento) { memento->setFilter(std::move(_filter)); memento->setAdmins(std::move(_admins)); diff --git a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.h b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.h index 4d3788b74..f79ae176f 100644 --- a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.h +++ b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.h @@ -87,6 +87,7 @@ public: not_null view) override; TimeMs elementHighlightTime( not_null element) override; + bool elementInSelectionMode() override; ~InnerWidget(); diff --git a/Telegram/SourceFiles/history/history_inner_widget.cpp b/Telegram/SourceFiles/history/history_inner_widget.cpp index ffdb4e864..0d7b8d1c1 100644 --- a/Telegram/SourceFiles/history/history_inner_widget.cpp +++ b/Telegram/SourceFiles/history/history_inner_widget.cpp @@ -1378,7 +1378,8 @@ void HistoryInner::mouseDoubleClickEvent(QMouseEvent *e) { } if (!ClickHandler::getActive() && !ClickHandler::getPressed() - && _mouseCursorState == CursorState::None) { + && _mouseCursorState == CursorState::None + && !inSelectionMode()) { if (const auto item = _mouseActionItem) { mouseActionCancel(); _widget->replyToMessage(item); @@ -2249,6 +2250,18 @@ bool HistoryInner::canDeleteSelected() const { return (selectedState.count > 0) && (selectedState.count == selectedState.canDeleteCount); } +bool HistoryInner::inSelectionMode() const { + if (!_selected.empty() + && (_selected.begin()->second == FullSelection)) { + return true; + } else if (_mouseAction == MouseAction::Selecting + && _dragSelFrom + && _dragSelTo) { + return true; + } + return false; +} + auto HistoryInner::getSelectionState() const -> HistoryView::TopBarWidget::SelectedState { auto result = HistoryView::TopBarWidget::SelectedState {}; @@ -2534,13 +2547,13 @@ void HistoryInner::mouseActionUpdate() { if (selectingDown) { if (m.y() < dragSelTo->marginTop()) { dragSelTo = (dragSelFrom != dragSelTo) - ? prevItem(dragSelFrom) + ? prevItem(dragSelTo) : nullptr; } } else { if (m.y() >= dragSelTo->height() - dragSelTo->marginBottom()) { dragSelTo = (dragSelFrom != dragSelTo) - ? nextItem(dragSelFrom) + ? nextItem(dragSelTo) : nullptr; } } @@ -3031,6 +3044,9 @@ not_null HistoryInner::ElementDelegate() { } return TimeMs(0); } + bool elementInSelectionMode() override { + return App::main()->historyInSelectionMode(); + } }; diff --git a/Telegram/SourceFiles/history/history_inner_widget.h b/Telegram/SourceFiles/history/history_inner_widget.h index 9f8487298..d430769d4 100644 --- a/Telegram/SourceFiles/history/history_inner_widget.h +++ b/Telegram/SourceFiles/history/history_inner_widget.h @@ -69,6 +69,7 @@ public: void clearSelected(bool onlyTextSelection = false); MessageIdsList getSelectedItems() const; void selectItem(not_null item); + bool inSelectionMode() const; void updateBotInfo(bool recount = true); diff --git a/Telegram/SourceFiles/history/history_widget.cpp b/Telegram/SourceFiles/history/history_widget.cpp index 180631c95..5af89a341 100644 --- a/Telegram/SourceFiles/history/history_widget.cpp +++ b/Telegram/SourceFiles/history/history_widget.cpp @@ -921,6 +921,10 @@ int HistoryWidget::itemTopForHighlight( return qMax(itemTop - (heightLeft / 2), 0); } +bool HistoryWidget::inSelectionMode() const { + return _list ? _list->inSelectionMode() : false; +} + void HistoryWidget::start() { Auth().data().stickersUpdated( ) | rpl::start_with_next([this] { diff --git a/Telegram/SourceFiles/history/history_widget.h b/Telegram/SourceFiles/history/history_widget.h index 1ffef07f3..e095965da 100644 --- a/Telegram/SourceFiles/history/history_widget.h +++ b/Telegram/SourceFiles/history/history_widget.h @@ -247,6 +247,7 @@ public: void enqueueMessageHighlight(not_null view); TimeMs highlightStartTime(not_null item) const; + bool inSelectionMode() const; MessageIdsList getSelectedItems() const; void itemEdited(HistoryItem *item); diff --git a/Telegram/SourceFiles/history/view/history_view_element.h b/Telegram/SourceFiles/history/view/history_view_element.h index 18d82a170..bb1db925a 100644 --- a/Telegram/SourceFiles/history/view/history_view_element.h +++ b/Telegram/SourceFiles/history/view/history_view_element.h @@ -44,6 +44,7 @@ public: not_null element) = 0; virtual TimeMs elementHighlightTime( not_null element) = 0; + virtual bool elementInSelectionMode() = 0; }; diff --git a/Telegram/SourceFiles/history/view/history_view_list_widget.cpp b/Telegram/SourceFiles/history/view/history_view_list_widget.cpp index 382c6f872..12c73d897 100644 --- a/Telegram/SourceFiles/history/view/history_view_list_widget.cpp +++ b/Telegram/SourceFiles/history/view/history_view_list_widget.cpp @@ -1119,6 +1119,10 @@ TimeMs ListWidget::elementHighlightTime( return TimeMs(0); } +bool ListWidget::elementInSelectionMode() { + return hasSelectedItems() || !_dragSelected.empty(); +} + void ListWidget::saveState(not_null memento) { memento->setAroundPosition(_aroundPosition); auto state = countScrollState(); diff --git a/Telegram/SourceFiles/history/view/history_view_list_widget.h b/Telegram/SourceFiles/history/view/history_view_list_widget.h index 418f6fd3b..41de57466 100644 --- a/Telegram/SourceFiles/history/view/history_view_list_widget.h +++ b/Telegram/SourceFiles/history/view/history_view_list_widget.h @@ -178,6 +178,7 @@ public: void elementAnimationAutoplayAsync( not_null view) override; TimeMs elementHighlightTime(not_null element) override; + bool elementInSelectionMode() override; ~ListWidget(); diff --git a/Telegram/SourceFiles/history/view/history_view_message.cpp b/Telegram/SourceFiles/history/view/history_view_message.cpp index 23ffc5265..66b224414 100644 --- a/Telegram/SourceFiles/history/view/history_view_message.cpp +++ b/Telegram/SourceFiles/history/view/history_view_message.cpp @@ -1334,7 +1334,9 @@ bool Message::hasFastReply() const { } bool Message::displayFastReply() const { - return hasFastReply() && data()->history()->peer->canWrite(); + return hasFastReply() + && data()->history()->peer->canWrite() + && !delegate()->elementInSelectionMode(); } bool Message::displayRightAction() const { diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 2aba72aff..f50a0268b 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -1390,6 +1390,10 @@ TimeMs MainWidget::highlightStartTime(not_null item) const { return _history->highlightStartTime(item); } +bool MainWidget::historyInSelectionMode() const { + return _history->inSelectionMode(); +} + void MainWidget::sendBotCommand(PeerData *peer, UserData *bot, const QString &cmd, MsgId replyTo) { _history->sendBotCommand(peer, bot, cmd, replyTo); } diff --git a/Telegram/SourceFiles/mainwidget.h b/Telegram/SourceFiles/mainwidget.h index 040672f9b..a7f4809da 100644 --- a/Telegram/SourceFiles/mainwidget.h +++ b/Telegram/SourceFiles/mainwidget.h @@ -238,7 +238,9 @@ public: void unreadCountChanged(not_null history); + // While HistoryInner is not HistoryView::ListWidget. TimeMs highlightStartTime(not_null item) const; + bool historyInSelectionMode() const; void sendBotCommand(PeerData *peer, UserData *bot, const QString &cmd, MsgId replyTo); void hideSingleUseKeyboard(PeerData *peer, MsgId replyTo);