Resolves: tdf#99324 accel underlines don't appear in extension option pages
because they are not widget-layout tab pages, we have to dive down through the WB_DIALOGCONTROL widgets as well Change-Id: I13dbf88878efd89794158ce43137381008e18890
This commit is contained in:
@@ -128,46 +128,47 @@ void ImplHandleControlAccelerator( vcl::Window* pWindow, bool bShow )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
void processChildren(vcl::Window *pParent, bool bShowAccel)
|
||||||
|
{
|
||||||
|
// go through its children
|
||||||
|
vcl::Window* pChild = firstLogicalChildOfParent(pParent);
|
||||||
|
while (pChild)
|
||||||
|
{
|
||||||
|
if (pChild->GetType() == WINDOW_TABCONTROL)
|
||||||
|
{
|
||||||
|
// find currently shown tab page
|
||||||
|
TabControl* pTabControl = static_cast<TabControl*>(pChild);
|
||||||
|
TabPage* pTabPage = pTabControl->GetTabPage( pTabControl->GetCurPageId() );
|
||||||
|
processChildren(pTabPage, bShowAccel);
|
||||||
|
}
|
||||||
|
else if (pChild->GetType() == WINDOW_TABPAGE)
|
||||||
|
{
|
||||||
|
// bare tabpage without tabcontrol parent (options dialog)
|
||||||
|
processChildren(pChild, bShowAccel);
|
||||||
|
}
|
||||||
|
else if ((pChild->GetStyle() & (WB_DIALOGCONTROL | WB_NODIALOGCONTROL)) == WB_DIALOGCONTROL)
|
||||||
|
{
|
||||||
|
// special controls that manage their children outside of widget layout
|
||||||
|
processChildren(pChild, bShowAccel);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ImplHandleControlAccelerator(pChild, bShowAccel);
|
||||||
|
}
|
||||||
|
pChild = nextLogicalChildOfParent(pParent, pChild);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool Accelerator::ToggleMnemonicsOnHierarchy(const CommandEvent& rCEvent, vcl::Window *pWindow)
|
bool Accelerator::ToggleMnemonicsOnHierarchy(const CommandEvent& rCEvent, vcl::Window *pWindow)
|
||||||
{
|
{
|
||||||
if (rCEvent.GetCommand() == CommandEventId::ModKeyChange)
|
if (rCEvent.GetCommand() == CommandEventId::ModKeyChange)
|
||||||
{
|
{
|
||||||
const CommandModKeyData *pCData = rCEvent.GetModKeyData();
|
const CommandModKeyData *pCData = rCEvent.GetModKeyData();
|
||||||
const bool bShowAccel = pCData && pCData->IsMod2();
|
const bool bShowAccel = pCData && pCData->IsMod2();
|
||||||
|
processChildren(pWindow, bShowAccel);
|
||||||
vcl::Window *pGetChild = firstLogicalChildOfParent(pWindow);
|
|
||||||
while (pGetChild)
|
|
||||||
{
|
|
||||||
if (pGetChild->GetType() == WINDOW_TABCONTROL)
|
|
||||||
{
|
|
||||||
// find currently shown tab page
|
|
||||||
TabControl* pTabControl = static_cast<TabControl*>( pGetChild );
|
|
||||||
TabPage* pTabPage = pTabControl->GetTabPage( pTabControl->GetCurPageId() );
|
|
||||||
vcl::Window* pTabPageChild = firstLogicalChildOfParent( pTabPage );
|
|
||||||
|
|
||||||
// and go through its children
|
|
||||||
while ( pTabPageChild )
|
|
||||||
{
|
|
||||||
ImplHandleControlAccelerator(pTabPageChild, bShowAccel);
|
|
||||||
pTabPageChild = nextLogicalChildOfParent(pTabPage, pTabPageChild);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (pGetChild->GetType() == WINDOW_TABPAGE)
|
|
||||||
{
|
|
||||||
// bare tabpage without tabcontrol parent (options dialog)
|
|
||||||
vcl::Window* pTabPageChild = firstLogicalChildOfParent( pGetChild );
|
|
||||||
|
|
||||||
// and go through its children
|
|
||||||
while ( pTabPageChild )
|
|
||||||
{
|
|
||||||
ImplHandleControlAccelerator(pTabPageChild, bShowAccel);
|
|
||||||
pTabPageChild = nextLogicalChildOfParent(pGetChild, pTabPageChild);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ImplHandleControlAccelerator( pGetChild, bShowAccel );
|
|
||||||
pGetChild = nextLogicalChildOfParent(pWindow, pGetChild);
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
Reference in New Issue
Block a user