From 9e6afa0d4e82550c87f5f7f032a2206df6cf67c3 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Tue, 25 May 2021 15:42:26 +0300 Subject: [PATCH] Removed observable dragFinished from MainWindow. --- Telegram/SourceFiles/history/history_inner_widget.cpp | 7 +++---- Telegram/SourceFiles/history/history_inner_widget.h | 3 +-- .../history/view/history_view_list_widget.cpp | 4 +++- Telegram/SourceFiles/window/main_window.cpp | 9 ++++----- Telegram/SourceFiles/window/main_window.h | 6 +----- 5 files changed, 12 insertions(+), 17 deletions(-) diff --git a/Telegram/SourceFiles/history/history_inner_widget.cpp b/Telegram/SourceFiles/history/history_inner_widget.cpp index 5b5a2bc3ad..1c245573a8 100644 --- a/Telegram/SourceFiles/history/history_inner_widget.cpp +++ b/Telegram/SourceFiles/history/history_inner_widget.cpp @@ -176,9 +176,6 @@ HistoryInner::HistoryInner( update(); } }, lifetime()); - subscribe(_controller->widget()->dragFinished(), [this] { - mouseActionUpdate(QCursor::pos()); - }); session().data().itemRemoved( ) | rpl::start_with_next( [this](auto item) { itemRemoved(item); }, @@ -1261,7 +1258,9 @@ std::unique_ptr HistoryInner::prepareDrag() { void HistoryInner::performDrag() { if (auto mimeData = prepareDrag()) { // This call enters event loop and can destroy any QObject. - _controller->widget()->launchDrag(std::move(mimeData)); + _controller->widget()->launchDrag( + std::move(mimeData), + crl::guard(this, [=] { mouseActionUpdate(QCursor::pos()); })); } } diff --git a/Telegram/SourceFiles/history/history_inner_widget.h b/Telegram/SourceFiles/history/history_inner_widget.h index bf3a11c11a..ffc30c1648 100644 --- a/Telegram/SourceFiles/history/history_inner_widget.h +++ b/Telegram/SourceFiles/history/history_inner_widget.h @@ -41,8 +41,7 @@ enum class ReportReason; class HistoryWidget; class HistoryInner : public Ui::RpWidget - , public Ui::AbstractTooltipShower - , private base::Subscriber { + , public Ui::AbstractTooltipShower { // The Q_OBJECT meta info is used for qobject_cast! Q_OBJECT diff --git a/Telegram/SourceFiles/history/view/history_view_list_widget.cpp b/Telegram/SourceFiles/history/view/history_view_list_widget.cpp index 6377493e05..8864f56536 100644 --- a/Telegram/SourceFiles/history/view/history_view_list_widget.cpp +++ b/Telegram/SourceFiles/history/view/history_view_list_widget.cpp @@ -2567,7 +2567,9 @@ std::unique_ptr ListWidget::prepareDrag() { void ListWidget::performDrag() { if (auto mimeData = prepareDrag()) { // This call enters event loop and can destroy any QObject. - _controller->widget()->launchDrag(std::move(mimeData)); + _controller->widget()->launchDrag( + std::move(mimeData), + crl::guard(this, [=] { mouseActionUpdate(QCursor::pos()); }));; } } diff --git a/Telegram/SourceFiles/window/main_window.cpp b/Telegram/SourceFiles/window/main_window.cpp index cf23abd760..1be16cb48c 100644 --- a/Telegram/SourceFiles/window/main_window.cpp +++ b/Telegram/SourceFiles/window/main_window.cpp @@ -827,17 +827,16 @@ int MainWindow::tryToExtendWidthBy(int addToWidth) { return addToWidth; } -void MainWindow::launchDrag(std::unique_ptr data) { - auto weak = QPointer(this); +void MainWindow::launchDrag( + std::unique_ptr data, + Fn &&callback) { auto drag = std::make_unique(this); drag->setMimeData(data.release()); drag->exec(Qt::CopyAction); // We don't receive mouseReleaseEvent when drag is finished. ClickHandler::unpressed(); - if (weak) { - weak->dragFinished().notify(); - } + callback(); } MainWindow::~MainWindow() { diff --git a/Telegram/SourceFiles/window/main_window.h b/Telegram/SourceFiles/window/main_window.h index c6a1881d98..62828f6371 100644 --- a/Telegram/SourceFiles/window/main_window.h +++ b/Telegram/SourceFiles/window/main_window.h @@ -103,10 +103,7 @@ public: return _body.data(); } - void launchDrag(std::unique_ptr data); - base::Observable &dragFinished() { - return _dragFinished; - } + void launchDrag(std::unique_ptr data, Fn &&callback); rpl::producer<> leaveEvents() const; @@ -229,7 +226,6 @@ private: bool _isActive = false; - base::Observable _dragFinished; rpl::event_stream<> _leaveEvents; bool _maximizedBeforeHide = false;