diff --git a/src/Gui/Action.cpp b/src/Gui/Action.cpp index c839412deb..8588bc4d70 100644 --- a/src/Gui/Action.cpp +++ b/src/Gui/Action.cpp @@ -606,9 +606,37 @@ void ActionGroup::onActivated (QAction* act) } } -void ActionGroup::onHovered (QAction *act) +/** + * Shows tooltip at the right side when hovered. + */ +void ActionGroup::onHovered(QAction *act) { - QToolTip::showText(QCursor::pos(), act->toolTip()); + const auto topLevelWidgets = QApplication::topLevelWidgets(); + QMenu* foundMenu = nullptr; + + for (QWidget* widget : topLevelWidgets) { + QList menus = widget->findChildren(); + + for (QMenu* menu : menus) { + if (menu->isVisible() && menu->actions().contains(act)) { + foundMenu = menu; + break; + } + } + + if (foundMenu) { + break; + } + + } + + if (foundMenu) { + QRect actionRect = foundMenu->actionGeometry(act); + QPoint globalPos = foundMenu->mapToGlobal(actionRect.topRight()); + QToolTip::showText(globalPos, act->toolTip(), foundMenu, actionRect); + } else { + QToolTip::showText(QCursor::pos(), act->toolTip()); + } }