From dec0ea238ad7a1143312e5268fd3279eea0a8865 Mon Sep 17 00:00:00 2001 From: Bas Ruigrok Date: Sat, 22 Nov 2025 14:40:14 +0100 Subject: [PATCH] Gui: Fix Gesture style context menu segfault --- src/Gui/Navigation/NavigationStyle.cpp | 37 ++++++++++++++++---------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/src/Gui/Navigation/NavigationStyle.cpp b/src/Gui/Navigation/NavigationStyle.cpp index 6a8fdf5fea..cee922d900 100644 --- a/src/Gui/Navigation/NavigationStyle.cpp +++ b/src/Gui/Navigation/NavigationStyle.cpp @@ -2149,22 +2149,31 @@ void NavigationStyle::openPopupMenu(const SbVec2s& position) contextMenu->insertSeparator(posAction); } - QAction* selectedAction = contextMenu->exec(QCursor::pos()); + QObject::connect( + contextMenu, + &QMenu::triggered, + contextMenu, + [this, navMenuGroup, pickAction](QAction* selectedAction) { + // handle navigation style change if user selected a navigation style option + if (selectedAction && isNavigationStyleAction(selectedAction, navMenuGroup)) { + applyNavigationStyleChange(selectedAction); + rightClickPosition.reset(); + return; + } - // handle navigation style change if user selected a navigation style option - if (selectedAction && isNavigationStyleAction(selectedAction, navMenuGroup)) { - applyNavigationStyleChange(selectedAction); - rightClickPosition.reset(); - return; - } - - if (pickAction && selectedAction == pickAction) { - // Execute the Clarify Selection command at this position - auto cmd = Application::Instance->commandManager().getCommandByName("Std_ClarifySelection"); - if (cmd && cmd->isActive()) { - cmd->invoke(0); // required placeholder value - we don't use group command + if (pickAction && selectedAction == pickAction) { + // Execute the Clarify Selection command at this position + auto cmd = Application::Instance->commandManager().getCommandByName( + "Std_ClarifySelection" + ); + if (cmd && cmd->isActive()) { + cmd->invoke(0); // required placeholder value - we don't use group command + } + } } - } + ); + + contextMenu->popup(QCursor::pos()); rightClickPosition.reset(); }