From f1b09b4d3764796a381adc4b30618790b7a9484d Mon Sep 17 00:00:00 2001 From: Bas Ruigrok Date: Sat, 22 Nov 2025 14:40:14 +0100 Subject: [PATCH 1/2] 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(); } From 2979c387abeec9c5b29989ae70bf2ad93836fa18 Mon Sep 17 00:00:00 2001 From: Bas Ruigrok Date: Sun, 23 Nov 2025 14:30:51 +0100 Subject: [PATCH 2/2] Gui: Simplify QObject::connect in openPopupMenu Co-authored-by: xtemp09 <9303235+xtemp09@users.noreply.github.com> --- src/Gui/Navigation/NavigationStyle.cpp | 37 ++++++++++++-------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/src/Gui/Navigation/NavigationStyle.cpp b/src/Gui/Navigation/NavigationStyle.cpp index cee922d900..2008a291e2 100644 --- a/src/Gui/Navigation/NavigationStyle.cpp +++ b/src/Gui/Navigation/NavigationStyle.cpp @@ -2149,29 +2149,26 @@ void NavigationStyle::openPopupMenu(const SbVec2s& position) contextMenu->insertSeparator(posAction); } - 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; - } + auto navigationFunction = [this, navMenuGroup](QAction* selectedAction) { + // handle navigation style change if user selected a navigation style option + if (isNavigationStyleAction(selectedAction, navMenuGroup)) { + applyNavigationStyleChange(selectedAction); + rightClickPosition.reset(); + } + }; - 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 - } + auto clarifyFunction = [pickAction](QAction* selectedAction) { + if (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 } } - ); + }; + + QObject::connect(contextMenu, &QMenu::triggered, navigationFunction); + QObject::connect(contextMenu, &QMenu::triggered, clarifyFunction); contextMenu->popup(QCursor::pos());