Almost context location

This commit is contained in:
Joey Yakimowich-Payne 2026-01-28 12:55:02 -07:00
commit f4132ee37c
2 changed files with 21 additions and 4 deletions

View file

@ -472,23 +472,33 @@ GraphEditorWidget::GraphEditorWidget(Potato::PipeWireController *controller, QWi
m_view->addAction(loadPresetAction); m_view->addAction(loadPresetAction);
auto *createVirtualSinkAction = new QAction(QString("Create Virtual Sink"), m_view); auto *createVirtualSinkAction = new QAction(QString("Create Virtual Sink"), m_view);
createVirtualSinkAction->setShortcutContext(Qt::WidgetShortcut);
connect(createVirtualSinkAction, &QAction::triggered, [this]() { connect(createVirtualSinkAction, &QAction::triggered, [this]() {
const int index = ++m_virtualSinkCount; const int index = ++m_virtualSinkCount;
const QString name = QString("Potato_Virtual_Sink_%1").arg(index); const QString name = QString("Potato_Virtual_Sink_%1").arg(index);
const QString description = QString("Virtual Sink %1").arg(index); const QString description = QString("Virtual Sink %1").arg(index);
m_pendingPastePositions.insert(name, m_lastContextMenuPos);
if (!m_controller->createVirtualSink(name, description, 2, 48000)) { if (!m_controller->createVirtualSink(name, description, 2, 48000)) {
qWarning() << "Failed to create virtual sink" << name; qWarning() << "Failed to create virtual sink" << name;
m_pendingPastePositions.remove(name);
} }
}); });
m_view->addAction(createVirtualSinkAction); m_view->addAction(createVirtualSinkAction);
auto *createVirtualSourceAction = new QAction(QString("Create Virtual Source"), m_view); auto *createVirtualSourceAction = new QAction(QString("Create Virtual Source"), m_view);
createVirtualSourceAction->setShortcutContext(Qt::WidgetShortcut);
connect(createVirtualSourceAction, &QAction::triggered, [this]() { connect(createVirtualSourceAction, &QAction::triggered, [this]() {
const int index = ++m_virtualSourceCount; const int index = ++m_virtualSourceCount;
const QString name = QString("Potato_Virtual_Source_%1").arg(index); const QString name = QString("Potato_Virtual_Source_%1").arg(index);
const QString description = QString("Virtual Source %1").arg(index); const QString description = QString("Virtual Source %1").arg(index);
m_pendingPastePositions.insert(name, m_lastContextMenuPos);
if (!m_controller->createVirtualSource(name, description, 2, 48000)) { if (!m_controller->createVirtualSource(name, description, 2, 48000)) {
qWarning() << "Failed to create virtual source" << name; qWarning() << "Failed to create virtual source" << name;
m_pendingPastePositions.remove(name);
} }
}); });
m_view->addAction(createVirtualSourceAction); m_view->addAction(createVirtualSourceAction);
@ -1048,12 +1058,18 @@ void GraphEditorWidget::updateNodeMeterLabel(QLabel *label)
bool GraphEditorWidget::eventFilter(QObject *object, QEvent *event) bool GraphEditorWidget::eventFilter(QObject *object, QEvent *event)
{ {
if (auto *label = qobject_cast<QLabel*>(object)) { if (object == m_view->viewport()) {
if (event->type() == QEvent::Resize || event->type() == QEvent::Show) { if (event->type() == QEvent::MouseButtonPress) {
updateNodeMeterLabel(label); QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
if (mouseEvent->button() == Qt::MiddleButton) {
m_view->centerOn(m_view->mapToScene(mouseEvent->pos()));
return true;
}
} else if (event->type() == QEvent::ContextMenu) {
QContextMenuEvent *contextEvent = static_cast<QContextMenuEvent*>(event);
m_lastContextMenuPos = m_view->mapToScene(contextEvent->pos());
} }
} }
return QWidget::eventFilter(object, event); return QWidget::eventFilter(object, event);
} }

View file

@ -134,4 +134,5 @@ private:
int m_meterProfileFrames = 0; int m_meterProfileFrames = 0;
PresetManager *m_presetManager = nullptr; PresetManager *m_presetManager = nullptr;
bool m_ignoreVolumeUndo = false; bool m_ignoreVolumeUndo = false;
QPointF m_lastContextMenuPos;
}; };