Qt: Fix debugger breakpoint deletion

This commit is contained in:
Megamouse 2021-03-23 23:23:37 +01:00
parent 452fb59c74
commit 8d54453981
2 changed files with 21 additions and 13 deletions

View file

@ -15,9 +15,14 @@ breakpoint_list::breakpoint_list(QWidget* parent, breakpoint_handler* handler) :
setContextMenuPolicy(Qt::CustomContextMenu); setContextMenuPolicy(Qt::CustomContextMenu);
setSelectionMode(QAbstractItemView::ExtendedSelection); setSelectionMode(QAbstractItemView::ExtendedSelection);
// connects
connect(this, &QListWidget::itemDoubleClicked, this, &breakpoint_list::OnBreakpointListDoubleClicked); connect(this, &QListWidget::itemDoubleClicked, this, &breakpoint_list::OnBreakpointListDoubleClicked);
connect(this, &QListWidget::customContextMenuRequested, this, &breakpoint_list::OnBreakpointListRightClicked); connect(this, &QListWidget::customContextMenuRequested, this, &breakpoint_list::OnBreakpointListRightClicked);
m_delete_action = new QAction(tr("&Delete"), this);
m_delete_action->setShortcut(Qt::Key_Delete);
m_delete_action->setShortcutContext(Qt::WidgetShortcut);
connect(m_delete_action, &QAction::triggered, this, &breakpoint_list::OnBreakpointListDelete);
addAction(m_delete_action);
} }
/** /**
@ -110,33 +115,35 @@ void breakpoint_list::OnBreakpointListRightClicked(const QPoint &pos)
return; return;
} }
QMenu* menu = new QMenu(); m_context_menu = new QMenu();
if (selectedItems().count() == 1) if (selectedItems().count() == 1)
{ {
QAction* rename_action = menu->addAction(tr("&Rename")); QAction* rename_action = m_context_menu->addAction(tr("&Rename"));
connect(rename_action, &QAction::triggered, this, [this]() connect(rename_action, &QAction::triggered, this, [this]()
{ {
QListWidgetItem* current_item = selectedItems().first(); QListWidgetItem* current_item = selectedItems().first();
current_item->setFlags(current_item->flags() | Qt::ItemIsEditable); current_item->setFlags(current_item->flags() | Qt::ItemIsEditable);
editItem(current_item); editItem(current_item);
}); });
menu->addSeparator(); m_context_menu->addSeparator();
} }
QAction* delete_action = new QAction(tr("&Delete"), this); m_context_menu->addAction(m_delete_action);
delete_action->setShortcut(Qt::Key_Delete); m_context_menu->exec(viewport()->mapToGlobal(pos));
delete_action->setShortcutContext(Qt::WidgetShortcut); m_context_menu->deleteLater();
connect(delete_action, &QAction::triggered, this, &breakpoint_list::OnBreakpointListDelete); m_context_menu = nullptr;
menu->addAction(delete_action);
menu->exec(viewport()->mapToGlobal(pos));
} }
void breakpoint_list::OnBreakpointListDelete() void breakpoint_list::OnBreakpointListDelete()
{ {
for (int i = selectedItems().count() - 1; i >= 0; i--) for (int i = selectedItems().count() - 1; i >= 0; i--)
{ {
RemoveBreakpoint(item(i)->data(Qt::UserRole).value<u32>()); RemoveBreakpoint(selectedItems().at(i)->data(Qt::UserRole).value<u32>());
}
if (m_context_menu)
{
m_context_menu->close();
} }
} }

View file

@ -32,7 +32,8 @@ private Q_SLOTS:
void OnBreakpointListDelete(); void OnBreakpointListDelete();
private: private:
breakpoint_handler* m_breakpoint_handler; breakpoint_handler* m_breakpoint_handler;
QMenu* m_context_menu = nullptr;
QAction* m_delete_action;
cpu_thread* m_cpu; cpu_thread* m_cpu;
CPUDisAsm* m_disasm; CPUDisAsm* m_disasm;
}; };