fix: refactor popup

decouple it from submenu, because submenu causes issues with reactions lol
This commit is contained in:
ZavaruKitsu 2023-09-22 01:01:23 +03:00
parent a67655a532
commit d3ab1d60ce
4 changed files with 33 additions and 52 deletions

View file

@ -21,26 +21,22 @@
namespace AyuUi
{
AyuPopupMenu::AyuPopupMenu(HistoryInner *parent)
{
_ayuSubMenu = std::make_unique<Ui::PopupMenu>(parent, st::popupMenuWithIcons);
}
void AyuPopupMenu::addHistoryAction(HistoryItem *item)
void AddHistoryAction(not_null<Ui::PopupMenu *> menu, HistoryItem *item)
{
if (AyuMessages::getInstance().hasRevisions(item)) {
_ayuSubMenu->addAction(tr::ayu_EditsHistoryMenuText(tr::now), [=]
menu->addAction(tr::ayu_EditsHistoryMenuText(tr::now), [=]
{
item->history()->session().tryResolveWindow()->showSection(std::make_shared<EditedLog::SectionMemento>(item->history()->peer, item));
item->history()->session().tryResolveWindow()
->showSection(std::make_shared<EditedLog::SectionMemento>(item->history()->peer, item));
}, &st::menuIconInfo);
}
}
void AyuPopupMenu::addHideMessageAction(HistoryItem *item) const
void AddHideMessageAction(not_null<Ui::PopupMenu *> menu, HistoryItem *item)
{
const auto settings = &AyuSettings::getInstance();
const auto history = item->history();
_ayuSubMenu->addAction(tr::ayu_ContextHideMessage(tr::now), [=]()
menu->addAction(tr::ayu_ContextHideMessage(tr::now), [=]()
{
const auto initSaveDeleted = settings->saveDeletedMessages;
@ -50,10 +46,15 @@ void AyuPopupMenu::addHideMessageAction(HistoryItem *item) const
}, &st::menuIconClear);
}
void AyuPopupMenu::addReadUntilAction(HistoryItem *item) const
void AddReadUntilAction(not_null<Ui::PopupMenu *> menu, HistoryItem *item)
{
const auto settings = &AyuSettings::getInstance();
if (settings->sendReadMessages) {
return;
}
const auto history = item->history();
_ayuSubMenu->addAction(tr::ayu_ReadUntilMenuText(tr::now), [=]()
menu->addAction(tr::ayu_ReadUntilMenuText(tr::now), [=]()
{
AyuState::setAllowSendReadPacket(true);
history->session().data().histories().readInboxOnNewMessage(item);

View file

@ -83,18 +83,10 @@
namespace AyuUi
{
class AyuPopupMenu
{
public:
AyuPopupMenu(HistoryInner *parent);
void AddHistoryAction(not_null<Ui::PopupMenu *>menu, HistoryItem *item);
void addHistoryAction(HistoryItem *item);
void AddHideMessageAction(not_null<Ui::PopupMenu *>menu, HistoryItem *item);
void addHideMessageAction(HistoryItem *item) const;
void addReadUntilAction(HistoryItem *item) const;
std::unique_ptr<Ui::PopupMenu> _ayuSubMenu;
};
void AddReadUntilAction(not_null<Ui::PopupMenu *>menu, HistoryItem *item);
}

View file

@ -2225,13 +2225,8 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) {
}), isPinned ? &st::menuIconUnpin : &st::menuIconPin);
}
// ayu context menu options
auto ayuSubMenu = AyuUi::AyuPopupMenu(this);
ayuSubMenu.addHistoryAction(item);
ayuSubMenu.addHideMessageAction(item);
ayuSubMenu.addReadUntilAction(item);
_menu->addAction(QString("Ayu"), std::move(ayuSubMenu._ayuSubMenu), &st::ayuMenuIcon, &st::ayuMenuIcon);
AyuUi::AddHistoryAction(_menu, item);
AyuUi::AddHideMessageAction(_menu, item);
};
const auto addPhotoActions = [&](not_null<PhotoData*> photo, HistoryItem *item) {
const auto media = photo->activeMediaView();
@ -2327,6 +2322,8 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) {
}
}, &st::menuIconSelect);
}
AyuUi::AddReadUntilAction(_menu, item);
};
const auto lnkPhoto = link

View file

@ -75,13 +75,16 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include <QtGui/QGuiApplication>
#include <QtGui/QClipboard>
// AyuGram includes
#include "ayu/ayu_settings.h"
#include "ayu/database/ayu_database.h"
#include "ayu/messages/ayu_messages_controller.h"
#include "ayu/ui/context_menu/context_menu.h"
#include "ayu/ui/boxes/message_history_box.h"
#include "ayu/ui/sections/edited/edited_log_section.h"
namespace HistoryView {
namespace {
@ -941,6 +944,11 @@ void AddMessageActions(
not_null<Ui::PopupMenu*> menu,
const ContextMenuRequest &request,
not_null<ListWidget*> list) {
if (request.item) {
AyuUi::AddHistoryAction(menu, request.item);
AyuUi::AddHideMessageAction(menu, request.item);
}
AddPostLinkAction(menu, request);
AddForwardAction(menu, request, list);
AddSendNowAction(menu, request, list);
@ -949,6 +957,11 @@ void AddMessageActions(
AddReportAction(menu, request, list);
AddSelectionAction(menu, request, list);
AddRescheduleAction(menu, request, list);
if (request.item)
{
AyuUi::AddReadUntilAction(menu, request.item);
}
}
void AddCopyLinkAction(
@ -1086,28 +1099,6 @@ base::unique_qptr<Ui::PopupMenu> FillContextMenu(
}
}
if (item)
{
if (AyuMessages::getInstance().hasRevisions(item))
{
result->addAction(tr::ayu_EditsHistoryMenuText(tr::now), [=]
{
item->history()->session().tryResolveWindow()->showSection(std::make_shared<EditedLog::SectionMemento>(item->history()->peer, item));
}, &st::menuIconInfo);
}
const auto settings = &AyuSettings::getInstance();
const auto history = item->history();
result->addAction(tr::ayu_ContextHideMessage(tr::now), [=]()
{
const auto initKeepDeleted = settings->saveDeletedMessages;
settings->set_keepDeletedMessages(false);
history->destroyMessage(item);
settings->set_keepDeletedMessages(initKeepDeleted);
}, &st::menuIconClear);
}
if (!view || !list->hasCopyRestriction(view->data())) {
AddCopyLinkAction(result, link);
}