Kaydet (Commit) 59fe75cd authored tarafından Caolán McNamara's avatar Caolán McNamara

Resolves: tdf#120632 consider submenus on restoring focus from menu

additionally to the menu having focus, if a submenu of that menu has
focus, then restore the focus when the whole hierarchy execution ends
return focus to the toplevel menu's saved focus widget

Change-Id: Iefd467fb1ba67ffd0a303505a893d2453e0ffbb3
Reviewed-on: https://gerrit.libreoffice.org/66115
Tested-by: Jenkins
Reviewed-by: 's avatarCaolán McNamara <caolanm@redhat.com>
Tested-by: 's avatarCaolán McNamara <caolanm@redhat.com>
üst 4631c5d4
......@@ -417,6 +417,16 @@ void MenuFloatingWindow::Start()
GetParent()->IncModalCount();
}
bool MenuFloatingWindow::MenuInHierarchyHasFocus() const
{
if (HasChildPathFocus())
return true;
PopupMenu* pSub = GetActivePopup();
if (!pSub)
return false;
return pSub->ImplGetFloatingWindow()->HasChildPathFocus();
}
void MenuFloatingWindow::End()
{
if (!bInExecute)
......@@ -428,7 +438,7 @@ void MenuFloatingWindow::End()
// restore focus to previous window if we still have the focus
VclPtr<vcl::Window> xFocusId(xSaveFocusId);
xSaveFocusId = nullptr;
if (HasChildPathFocus() && xFocusId != nullptr)
if (xFocusId != nullptr && MenuInHierarchyHasFocus())
{
ImplGetSVData()->maWinData.mbNoDeactivate = false;
Window::EndSaveFocus(xFocusId);
......
......@@ -121,6 +121,8 @@ public:
void SetPosInParent( sal_uInt16 nPos ) { nPosInParent = nPos; }
bool MenuInHierarchyHasFocus() const;
virtual css::uno::Reference<css::accessibility::XAccessible> CreateAccessible() override;
};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment