diff options
author | Caolán McNamara <caolanm@redhat.com> | 2018-10-01 13:10:10 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2018-10-01 18:06:21 +0200 |
commit | 38bef03742c94376a974f84693ff2e48693e6839 (patch) | |
tree | adeaffac0b7707f4d08463bef12cb024b2a62102 /vcl/source/window/menu.cxx | |
parent | 75a48e37b260c145297261d0e0ab5720894404f1 (diff) |
pass menuitem ident around directly, instead of deriving from itemid
sidestepping the while duplicate itemids in separate submenus problem
Change-Id: Icb57ac805f3c8c4fc3a68341e318375c6492cbb1
Reviewed-on: https://gerrit.libreoffice.org/61189
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl/source/window/menu.cxx')
-rw-r--r-- | vcl/source/window/menu.cxx | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/vcl/source/window/menu.cxx b/vcl/source/window/menu.cxx index b92daf20f10c..d1adaf25211c 100644 --- a/vcl/source/window/menu.cxx +++ b/vcl/source/window/menu.cxx @@ -364,6 +364,7 @@ void Menu::Select() if ( pStartMenu && ( pStartMenu != this ) ) { pStartMenu->nSelectedId = nSelectedId; + pStartMenu->sSelectedIdent = sSelectedIdent; pStartMenu->aSelectHdl.Call( this ); } } @@ -690,24 +691,12 @@ MenuItemType Menu::GetItemType( sal_uInt16 nPos ) const return MenuItemType::DONTKNOW; } -OString Menu::GetCurItemIdent() const -{ - const MenuItemData* pData = pItemList->GetData(nSelectedId); - return pData ? pData->sIdent : OString(); -} - OString Menu::GetItemIdent(sal_uInt16 nId) const { const MenuItemData* pData = pItemList->GetData(nId); return pData ? pData->sIdent : OString(); } -OString Menu::GetItemIdentFromSubMenu(sal_uInt16 nId) const -{ - const MenuItemData* pData = pItemList->GetDataFromSubMenu(nId); - return pData ? pData->sIdent : OString(); -} - void Menu::SetItemBits( sal_uInt16 nItemId, MenuItemBits nBits ) { MenuItemData* pData = pItemList->GetData( nItemId ); @@ -2132,13 +2121,20 @@ void Menu::ImplCallHighlight(sal_uInt16 nItem) ImplMenuDelData aDelData( this ); nSelectedId = 0; + sSelectedIdent.clear(); MenuItemData* pData = pItemList->GetDataFromPos(nItem); - if ( pData ) + if (pData) + { nSelectedId = pData->nId; + sSelectedIdent = pData->sIdent; + } ImplCallEventListeners( VclEventId::MenuHighlight, GetItemPos( GetCurItemId() ) ); if( !aDelData.isDeleted() ) + { nSelectedId = 0; + sSelectedIdent.clear(); + } } IMPL_LINK_NOARG(Menu, ImplCallSelect, void*, void) @@ -2620,6 +2616,7 @@ bool MenuBar::HandleMenuHighlightEvent( Menu *pMenu, sal_uInt16 nHighlightEventI { pMenu->mnHighlightedItemPos = pMenu->GetItemPos( nHighlightEventId ); pMenu->nSelectedId = nHighlightEventId; + pMenu->sSelectedIdent = pMenu->GetItemIdent( nHighlightEventId ); pMenu->pStartedFrom = const_cast<MenuBar*>(this); pMenu->ImplCallHighlight( pMenu->mnHighlightedItemPos ); } @@ -2636,6 +2633,7 @@ bool Menu::HandleMenuCommandEvent( Menu *pMenu, sal_uInt16 nCommandEventId ) con if( pMenu ) { pMenu->nSelectedId = nCommandEventId; + pMenu->sSelectedIdent = pMenu->GetItemIdent(nCommandEventId); pMenu->pStartedFrom = const_cast<Menu*>(this); pMenu->ImplSelect(); return true; @@ -2762,6 +2760,7 @@ void PopupMenu::SelectItem(sal_uInt16 nId) void PopupMenu::SetSelectedEntry( sal_uInt16 nId ) { nSelectedId = nId; + sSelectedIdent = GetItemIdent(nId); } sal_uInt16 PopupMenu::Execute( vcl::Window* pExecWindow, const Point& rPopupPos ) @@ -2825,6 +2824,7 @@ sal_uInt16 PopupMenu::ImplExecute( const VclPtr<vcl::Window>& pW, const tools::R pStartedFrom = pSFrom; nSelectedId = 0; + sSelectedIdent.clear(); bCanceled = false; VclPtr<vcl::Window> xFocusId; |