refactor: Change lifetime of context menus (#4924)

This commit is contained in:
nerix 2023-10-29 20:24:38 +01:00 committed by GitHub
parent 7ecbfa0cdb
commit c811e2d991
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 8 additions and 27 deletions

View file

@ -44,6 +44,7 @@
- Dev: Improve performance by reducing repaints caused by selections. (#4889) - Dev: Improve performance by reducing repaints caused by selections. (#4889)
- Dev: Removed direct dependency on Qt 5 compatibility module. (#4906) - Dev: Removed direct dependency on Qt 5 compatibility module. (#4906)
- Dev: Refactor `DebugCount` and add copy button to debug popup. (#4921) - Dev: Refactor `DebugCount` and add copy button to debug popup. (#4921)
- Dev: Changed lifetime of context menus. (#4924)
## 2.4.6 ## 2.4.6

View file

@ -278,15 +278,8 @@ UserInfoPopup::UserInfoPopup(bool closeAutomatically, QWidget *parent,
return; return;
} }
static QMenu *previousMenu = nullptr; auto *menu = new QMenu(this);
if (previousMenu != nullptr) menu->setAttribute(Qt::WA_DeleteOnClose);
{
previousMenu->deleteLater();
previousMenu = nullptr;
}
auto menu = new QMenu;
previousMenu = menu;
auto avatarUrl = this->avatarUrl_; auto avatarUrl = this->avatarUrl_;

View file

@ -73,19 +73,13 @@ namespace {
MessageElementFlags creatorFlags, QMenu &menu) MessageElementFlags creatorFlags, QMenu &menu)
{ {
auto *openAction = menu.addAction("&Open"); auto *openAction = menu.addAction("&Open");
auto openMenu = new QMenu; auto *openMenu = new QMenu(&menu);
openAction->setMenu(openMenu); openAction->setMenu(openMenu);
auto *copyAction = menu.addAction("&Copy"); auto *copyAction = menu.addAction("&Copy");
auto copyMenu = new QMenu; auto *copyMenu = new QMenu(&menu);
copyAction->setMenu(copyMenu); copyAction->setMenu(copyMenu);
// see if the QMenu actually gets destroyed
QObject::connect(openMenu, &QMenu::destroyed, [] {
QMessageBox(QMessageBox::Information, "xD", "the menu got deleted")
.exec();
});
// Add copy and open links for 1x, 2x, 3x // Add copy and open links for 1x, 2x, 3x
auto addImageLink = [&](const ImagePtr &image, char scale) { auto addImageLink = [&](const ImagePtr &image, char scale) {
if (!image->isEmpty()) if (!image->isEmpty())
@ -2099,15 +2093,8 @@ void ChannelView::addContextMenuItems(
const MessageLayoutElement *hoveredElement, MessageLayoutPtr layout, const MessageLayoutElement *hoveredElement, MessageLayoutPtr layout,
QMouseEvent *event) QMouseEvent *event)
{ {
static QMenu *previousMenu = nullptr; auto *menu = new QMenu(this);
if (previousMenu != nullptr) menu->setAttribute(Qt::WA_DeleteOnClose);
{
previousMenu->deleteLater();
previousMenu = nullptr;
}
auto menu = new QMenu;
previousMenu = menu;
// Add image options if the element clicked contains an image (e.g. a badge or an emote) // Add image options if the element clicked contains an image (e.g. a badge or an emote)
this->addImageContextMenuItems(hoveredElement, layout, event, *menu); this->addImageContextMenuItems(hoveredElement, layout, event, *menu);
@ -2416,7 +2403,7 @@ void ChannelView::addCommandExecutionContextMenuItems(
menu.addSeparator(); menu.addSeparator();
auto *executeAction = menu.addAction("&Execute command"); auto *executeAction = menu.addAction("&Execute command");
auto cmdMenu = new QMenu; auto *cmdMenu = new QMenu(&menu);
executeAction->setMenu(cmdMenu); executeAction->setMenu(cmdMenu);
for (auto &cmd : cmds) for (auto &cmd : cmds)