From 1657c2c7f2b9d984ceb145fe79de4bb880c7fc82 Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 17 Jan 2022 15:12:14 +0300 Subject: [PATCH] Fix context menu on sent images / documents. --- .../SourceFiles/core/click_handler_types.h | 4 ++-- .../data/data_file_click_handler.cpp | 8 ++++--- .../admin_log/history_admin_log_inner.cpp | 16 +++++-------- .../history/history_inner_widget.cpp | 22 +++++++++-------- .../view/history_view_context_menu.cpp | 24 ++++++++----------- .../history/view/media/history_view_photo.h | 2 +- .../info/media/info_media_list_widget.cpp | 16 +++++-------- 7 files changed, 42 insertions(+), 50 deletions(-) diff --git a/Telegram/SourceFiles/core/click_handler_types.h b/Telegram/SourceFiles/core/click_handler_types.h index 27a280de1..73154ecc7 100644 --- a/Telegram/SourceFiles/core/click_handler_types.h +++ b/Telegram/SourceFiles/core/click_handler_types.h @@ -10,8 +10,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/basic_click_handlers.h" constexpr auto kPeerLinkPeerIdProperty = 0x01; -constexpr auto kPhotoLinkMediaIdProperty = 0x02; -constexpr auto kDocumentLinkMediaIdProperty = 0x03; +constexpr auto kPhotoLinkMediaProperty = 0x02; +constexpr auto kDocumentLinkMediaProperty = 0x03; constexpr auto kSendReactionEmojiProperty = 0x04; constexpr auto kReactionsCountEmojiProperty = 0x05; diff --git a/Telegram/SourceFiles/data/data_file_click_handler.cpp b/Telegram/SourceFiles/data/data_file_click_handler.cpp index 4bd22b0d2..704130f6c 100644 --- a/Telegram/SourceFiles/data/data_file_click_handler.cpp +++ b/Telegram/SourceFiles/data/data_file_click_handler.cpp @@ -46,8 +46,8 @@ DocumentClickHandler::DocumentClickHandler( : FileClickHandler(context) , _document(document) { setProperty( - kDocumentLinkMediaIdProperty, - QVariant(qulonglong(_document->id))); + kDocumentLinkMediaProperty, + reinterpret_cast(_document.get())); } DocumentOpenClickHandler::DocumentOpenClickHandler( @@ -150,7 +150,9 @@ PhotoClickHandler::PhotoClickHandler( : FileClickHandler(context) , _photo(photo) , _peer(peer) { - setProperty(kPhotoLinkMediaIdProperty, QVariant(qulonglong(_photo->id))); + setProperty( + kPhotoLinkMediaProperty, + reinterpret_cast(_photo.get())); } not_null PhotoClickHandler::photo() const { 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 ab9c2e1a7..3c77823cf 100644 --- a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp +++ b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp @@ -1169,17 +1169,13 @@ void InnerWidget::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { auto view = App::hoveredItem() ? App::hoveredItem() : App::hoveredLinkItem(); - const auto lnkPhotoId = PhotoId(link - ? link->property(kPhotoLinkMediaIdProperty).toULongLong() - : 0); - const auto lnkDocumentId = DocumentId(link - ? link->property(kDocumentLinkMediaIdProperty).toULongLong() - : 0); - const auto lnkPhoto = lnkPhotoId - ? session().data().photo(lnkPhotoId).get() + const auto lnkPhoto = link + ? reinterpret_cast( + link->property(kPhotoLinkMediaProperty).toULongLong()) : nullptr; - const auto lnkDocument = lnkDocumentId - ? session().data().document(lnkDocumentId).get() + const auto lnkDocument = link + ? reinterpret_cast( + link->property(kDocumentLinkMediaProperty).toULongLong()) : nullptr; auto lnkIsVideo = lnkDocument ? lnkDocument->isVideoFile() : false; auto lnkIsVoice = lnkDocument ? lnkDocument->isVoiceMessage() : false; diff --git a/Telegram/SourceFiles/history/history_inner_widget.cpp b/Telegram/SourceFiles/history/history_inner_widget.cpp index 971963fc0..f2aa178cc 100644 --- a/Telegram/SourceFiles/history/history_inner_widget.cpp +++ b/Telegram/SourceFiles/history/history_inner_widget.cpp @@ -2066,13 +2066,15 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { } }; - const auto lnkPhotoId = PhotoId(link - ? link->property(kPhotoLinkMediaIdProperty).toULongLong() - : 0); - const auto lnkDocumentId = DocumentId(link - ? link->property(kDocumentLinkMediaIdProperty).toULongLong() - : 0); - if (lnkPhotoId || lnkDocumentId) { + const auto lnkPhoto = link + ? reinterpret_cast( + link->property(kPhotoLinkMediaProperty).toULongLong()) + : nullptr; + const auto lnkDocument = link + ? reinterpret_cast( + link->property(kDocumentLinkMediaProperty).toULongLong()) + : nullptr; + if (lnkPhoto || lnkDocument) { const auto item = _dragStateItem; const auto itemId = item ? item->fullId() : FullMsgId(); if (isUponSelected > 0 && !hasCopyRestrictionForSelected()) { @@ -2084,10 +2086,10 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { &st::menuIconCopy); } addItemActions(item, item); - if (lnkPhotoId) { - addPhotoActions(session->data().photo(lnkPhotoId), item); + if (lnkPhoto) { + addPhotoActions(lnkPhoto, item); } else { - addDocumentActions(session->data().document(lnkDocumentId), item); + addDocumentActions(lnkDocument, item); } if (item && item->hasDirectLink() && isUponSelected != 2 && isUponSelected != -2) { _menu->addAction(item->history()->peer->isMegagroup() ? tr::lng_context_copy_message_link(tr::now) : tr::lng_context_copy_post_link(tr::now), [=] { diff --git a/Telegram/SourceFiles/history/view/history_view_context_menu.cpp b/Telegram/SourceFiles/history/view/history_view_context_menu.cpp index aa0ed9631..45a8bc5db 100644 --- a/Telegram/SourceFiles/history/view/history_view_context_menu.cpp +++ b/Telegram/SourceFiles/history/view/history_view_context_menu.cpp @@ -923,17 +923,13 @@ base::unique_qptr FillContextMenu( const auto view = request.view; const auto item = request.item; const auto itemId = item ? item->fullId() : FullMsgId(); - const auto lnkPhotoId = PhotoId(link - ? link->property(kPhotoLinkMediaIdProperty).toULongLong() - : 0); - const auto lnkDocumentId = DocumentId(link - ? link->property(kDocumentLinkMediaIdProperty).toULongLong() - : 0); - const auto photo = lnkPhotoId - ? list->session().data().photo(lnkPhotoId).get() + const auto lnkPhoto = link + ? reinterpret_cast( + link->property(kPhotoLinkMediaProperty).toULongLong()) : nullptr; - const auto document = lnkDocumentId - ? list->session().data().document(lnkDocumentId).get() + const auto lnkDocument = link + ? reinterpret_cast( + link->property(kDocumentLinkMediaProperty).toULongLong()) : nullptr; const auto poll = item ? (item->media() ? item->media()->poll() : nullptr) @@ -958,10 +954,10 @@ base::unique_qptr FillContextMenu( } AddTopMessageActions(result, request, list); - if (photo) { - AddPhotoActions(result, photo, item, list); - } else if (document) { - AddDocumentActions(result, document, item, list); + if (lnkPhoto) { + AddPhotoActions(result, lnkPhoto, item, list); + } else if (lnkDocument) { + AddDocumentActions(result, lnkDocument, item, list); } else if (poll) { AddPollActions(result, poll, item, list->elementContext()); } else if (!request.overSelection && view && !hasSelection) { diff --git a/Telegram/SourceFiles/history/view/media/history_view_photo.h b/Telegram/SourceFiles/history/view/media/history_view_photo.h index d76ad1c8b..d4b0723df 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_photo.h +++ b/Telegram/SourceFiles/history/view/media/history_view_photo.h @@ -135,7 +135,7 @@ private: const PaintContext &context, QPoint photoPosition) const; - not_null _data; + const not_null _data; int _serviceWidth = 0; int _pixw = 1; int _pixh = 1; diff --git a/Telegram/SourceFiles/info/media/info_media_list_widget.cpp b/Telegram/SourceFiles/info/media/info_media_list_widget.cpp index eb6e37095..b9217b741 100644 --- a/Telegram/SourceFiles/info/media/info_media_list_widget.cpp +++ b/Telegram/SourceFiles/info/media/info_media_list_widget.cpp @@ -1593,17 +1593,13 @@ void ListWidget::showContextMenu( }, &st::menuIconShowInChat); - const auto lnkPhotoId = PhotoId(link - ? link->property(kPhotoLinkMediaIdProperty).toULongLong() - : 0); - const auto lnkDocumentId = DocumentId(link - ? link->property(kDocumentLinkMediaIdProperty).toULongLong() - : 0); - const auto lnkPhoto = lnkPhotoId - ? session().data().photo(lnkPhotoId).get() + const auto lnkPhoto = link + ? reinterpret_cast( + link->property(kPhotoLinkMediaProperty).toULongLong()) : nullptr; - const auto lnkDocument = lnkDocumentId - ? session().data().document(lnkDocumentId).get() + const auto lnkDocument = link + ? reinterpret_cast( + link->property(kDocumentLinkMediaProperty).toULongLong()) : nullptr; if (lnkPhoto || lnkDocument) { auto [isVideo, isVoice, isAudio] = [&] {