diff options
author | Noel Grandin <noel@peralex.com> | 2015-09-10 16:44:12 +0200 |
---|---|---|
committer | Noel Grandin <noel@peralex.com> | 2015-09-11 08:48:55 +0200 |
commit | 71a83295d8c719f4fd4fa05f367c3c85323e22e9 (patch) | |
tree | 1ff99c92e49ad61e7b478daad338fd6109324222 | |
parent | c80fb09256f02379b78f7bb219e94dfbf5277872 (diff) |
convert Link<> to typed
and remove unused maChildEventListeners
Change-Id: I845a9af608c3429cf9ccb0e8041f24f423839513
-rw-r--r-- | accessibility/inc/accessibility/standard/accessiblemenubasecomponent.hxx | 2 | ||||
-rw-r--r-- | accessibility/source/standard/accessiblemenubasecomponent.cxx | 11 | ||||
-rw-r--r-- | include/toolkit/awt/vclxmenu.hxx | 3 | ||||
-rw-r--r-- | include/vcl/menu.hxx | 7 | ||||
-rw-r--r-- | include/vcl/toolbox.hxx | 2 | ||||
-rw-r--r-- | toolkit/source/awt/vclxmenu.cxx | 132 | ||||
-rw-r--r-- | vcl/source/window/menu.cxx | 28 | ||||
-rw-r--r-- | vcl/source/window/toolbox2.cxx | 7 |
8 files changed, 89 insertions, 103 deletions
diff --git a/accessibility/inc/accessibility/standard/accessiblemenubasecomponent.hxx b/accessibility/inc/accessibility/standard/accessiblemenubasecomponent.hxx index a16a974528f6..e7547e182264 100644 --- a/accessibility/inc/accessibility/standard/accessiblemenubasecomponent.hxx +++ b/accessibility/inc/accessibility/standard/accessiblemenubasecomponent.hxx @@ -112,7 +112,7 @@ protected: virtual void Click(); virtual bool IsPopupMenuOpen(); - DECL_LINK( MenuEventListener, VclSimpleEvent* ); + DECL_LINK_TYPED( MenuEventListener, VclMenuEvent&, void ); void ProcessMenuEvent( const VclMenuEvent& rVclMenuEvent ); diff --git a/accessibility/source/standard/accessiblemenubasecomponent.cxx b/accessibility/source/standard/accessiblemenubasecomponent.cxx index 47312f7fa914..26a62b52b221 100644 --- a/accessibility/source/standard/accessiblemenubasecomponent.cxx +++ b/accessibility/source/standard/accessiblemenubasecomponent.cxx @@ -566,15 +566,10 @@ bool OAccessibleMenuBaseComponent::IsPopupMenuOpen() -IMPL_LINK( OAccessibleMenuBaseComponent, MenuEventListener, VclSimpleEvent*, pEvent ) +IMPL_LINK_TYPED( OAccessibleMenuBaseComponent, MenuEventListener, VclMenuEvent&, rEvent, void ) { - OSL_ENSURE( pEvent && pEvent->ISA( VclMenuEvent ), "OAccessibleMenuBaseComponent - Unknown MenuEvent!" ); - if ( pEvent && pEvent->ISA( VclMenuEvent ) ) - { - OSL_ENSURE( static_cast<VclMenuEvent*>(pEvent)->GetMenu(), "OAccessibleMenuBaseComponent - Menu?" ); - ProcessMenuEvent( *static_cast<VclMenuEvent*>(pEvent) ); - } - return 0; + OSL_ENSURE( rEvent.GetMenu(), "OAccessibleMenuBaseComponent - Menu?" ); + ProcessMenuEvent( rEvent ); } diff --git a/include/toolkit/awt/vclxmenu.hxx b/include/toolkit/awt/vclxmenu.hxx index b38e549e5374..49624fece463 100644 --- a/include/toolkit/awt/vclxmenu.hxx +++ b/include/toolkit/awt/vclxmenu.hxx @@ -40,6 +40,7 @@ class Menu; class MenuBar; class VclSimpleEvent; class PopupMenu; +class VclMenuEvent; typedef ::std::vector< css::uno::Reference< css::awt::XPopupMenu >* @@ -65,7 +66,7 @@ private: protected: ::osl::Mutex& GetMutex() { return maMutex; } - DECL_LINK( MenuEventListener, VclSimpleEvent* ); + DECL_LINK_TYPED( MenuEventListener, VclMenuEvent&, void ); void ImplCreateMenu( bool bPopup ); diff --git a/include/vcl/menu.hxx b/include/vcl/menu.hxx index 46149cc37cc5..b1c1b9b36404 100644 --- a/include/vcl/menu.hxx +++ b/include/vcl/menu.hxx @@ -141,8 +141,7 @@ private: Link<Menu*, bool> aHighlightHdl; // Highlight-Handler Link<Menu*, bool> aSelectHdl; // Highlight-Handler - VclEventListeners maEventListeners; - VclEventListeners maChildEventListeners; + std::list<Link<VclMenuEvent&,void> > maEventListeners; OUString aTitleText; // PopupMenu text sal_uInt16 nTitleHeight; @@ -357,8 +356,8 @@ public: return nTitleHeight; } - void AddEventListener( const Link<>& rEventListener ); - void RemoveEventListener( const Link<>& rEventListener ); + void AddEventListener( const Link<VclMenuEvent&,void>& rEventListener ); + void RemoveEventListener( const Link<VclMenuEvent&,void>& rEventListener ); Menu& operator =( const Menu& rMenu ); diff --git a/include/vcl/toolbox.hxx b/include/vcl/toolbox.hxx index 9d91d49a1ab1..732e6f5eb645 100644 --- a/include/vcl/toolbox.hxx +++ b/include/vcl/toolbox.hxx @@ -226,7 +226,7 @@ private: DECL_DLLPRIVATE_LINK_TYPED( ImplCallExecuteCustomMenu, void*, void ); DECL_DLLPRIVATE_LINK_TYPED( ImplUpdateHdl, Idle*, void ); - DECL_DLLPRIVATE_LINK( ImplCustomMenuListener, VclMenuEvent* ); + DECL_DLLPRIVATE_LINK_TYPED( ImplCustomMenuListener, VclMenuEvent&, void ); DECL_DLLPRIVATE_LINK_TYPED( ImplDropdownLongClickHdl, Timer*, void ); ToolBox (const ToolBox &) SAL_DELETED_FUNCTION; diff --git a/toolkit/source/awt/vclxmenu.cxx b/toolkit/source/awt/vclxmenu.cxx index 91db85bd3253..b1b809e6e899 100644 --- a/toolkit/source/awt/vclxmenu.cxx +++ b/toolkit/source/awt/vclxmenu.cxx @@ -79,89 +79,83 @@ void VCLXMenu::ImplCreateMenu( bool bPopup ) mpMenu->AddEventListener( LINK( this, VCLXMenu, MenuEventListener ) ); } -IMPL_LINK( VCLXMenu, MenuEventListener, VclSimpleEvent*, pEvent ) +IMPL_LINK_TYPED( VCLXMenu, MenuEventListener, VclMenuEvent&, rMenuEvent, void ) { - DBG_ASSERT( pEvent && pEvent->ISA( VclMenuEvent ), "Unknown Event!" ); - if ( pEvent && pEvent->ISA( VclMenuEvent ) ) - { - DBG_ASSERT( static_cast<VclMenuEvent*>(pEvent)->GetMenu() && mpMenu, "Menu???" ); + DBG_ASSERT( rMenuEvent.GetMenu() && mpMenu, "Menu???" ); - VclMenuEvent* pMenuEvent = static_cast<VclMenuEvent*>(pEvent); - if ( pMenuEvent->GetMenu() == mpMenu ) // Also called for the root menu + if ( rMenuEvent.GetMenu() == mpMenu ) // Also called for the root menu + { + switch ( rMenuEvent.GetId() ) { - switch ( pMenuEvent->GetId() ) + case VCLEVENT_MENU_SELECT: { - case VCLEVENT_MENU_SELECT: - { - if ( maMenuListeners.getLength() ) - { - css::awt::MenuEvent aEvent; - aEvent.Source = static_cast<cppu::OWeakObject*>(this); - aEvent.MenuId = mpMenu->GetCurItemId(); - maMenuListeners.itemSelected( aEvent ); - } - } - break; - case VCLEVENT_OBJECT_DYING: + if ( maMenuListeners.getLength() ) { - mpMenu = NULL; + css::awt::MenuEvent aEvent; + aEvent.Source = static_cast<cppu::OWeakObject*>(this); + aEvent.MenuId = mpMenu->GetCurItemId(); + maMenuListeners.itemSelected( aEvent ); } - break; - case VCLEVENT_MENU_HIGHLIGHT: + } + break; + case VCLEVENT_OBJECT_DYING: + { + mpMenu = NULL; + } + break; + case VCLEVENT_MENU_HIGHLIGHT: + { + if ( maMenuListeners.getLength() ) { - if ( maMenuListeners.getLength() ) - { - css::awt::MenuEvent aEvent; - aEvent.Source = static_cast<cppu::OWeakObject*>(this); - aEvent.MenuId = mpMenu->GetCurItemId(); - maMenuListeners.itemHighlighted( aEvent ); - } + css::awt::MenuEvent aEvent; + aEvent.Source = static_cast<cppu::OWeakObject*>(this); + aEvent.MenuId = mpMenu->GetCurItemId(); + maMenuListeners.itemHighlighted( aEvent ); } - break; - case VCLEVENT_MENU_ACTIVATE: + } + break; + case VCLEVENT_MENU_ACTIVATE: + { + if ( maMenuListeners.getLength() ) { - if ( maMenuListeners.getLength() ) - { - css::awt::MenuEvent aEvent; - aEvent.Source = static_cast<cppu::OWeakObject*>(this); - aEvent.MenuId = mpMenu->GetCurItemId(); - maMenuListeners.itemActivated( aEvent ); - } + css::awt::MenuEvent aEvent; + aEvent.Source = static_cast<cppu::OWeakObject*>(this); + aEvent.MenuId = mpMenu->GetCurItemId(); + maMenuListeners.itemActivated( aEvent ); } - break; - case VCLEVENT_MENU_DEACTIVATE: + } + break; + case VCLEVENT_MENU_DEACTIVATE: + { + if ( maMenuListeners.getLength() ) { - if ( maMenuListeners.getLength() ) - { - css::awt::MenuEvent aEvent; - aEvent.Source = static_cast<cppu::OWeakObject*>(this); - aEvent.MenuId = mpMenu->GetCurItemId(); - maMenuListeners.itemDeactivated( aEvent ); - } + css::awt::MenuEvent aEvent; + aEvent.Source = static_cast<cppu::OWeakObject*>(this); + aEvent.MenuId = mpMenu->GetCurItemId(); + maMenuListeners.itemDeactivated( aEvent ); } - break; - - // ignore accessibility events - case VCLEVENT_MENU_ENABLE: - case VCLEVENT_MENU_INSERTITEM: - case VCLEVENT_MENU_REMOVEITEM: - case VCLEVENT_MENU_SUBMENUACTIVATE: - case VCLEVENT_MENU_SUBMENUDEACTIVATE: - case VCLEVENT_MENU_SUBMENUCHANGED: - case VCLEVENT_MENU_DEHIGHLIGHT: - case VCLEVENT_MENU_DISABLE: - case VCLEVENT_MENU_ITEMTEXTCHANGED: - case VCLEVENT_MENU_ITEMCHECKED: - case VCLEVENT_MENU_ITEMUNCHECKED: - case VCLEVENT_MENU_SHOW: - case VCLEVENT_MENU_HIDE: - break; - - default: OSL_FAIL( "MenuEventListener - Unknown event!" ); - } + } + break; + + // ignore accessibility events + case VCLEVENT_MENU_ENABLE: + case VCLEVENT_MENU_INSERTITEM: + case VCLEVENT_MENU_REMOVEITEM: + case VCLEVENT_MENU_SUBMENUACTIVATE: + case VCLEVENT_MENU_SUBMENUDEACTIVATE: + case VCLEVENT_MENU_SUBMENUCHANGED: + case VCLEVENT_MENU_DEHIGHLIGHT: + case VCLEVENT_MENU_DISABLE: + case VCLEVENT_MENU_ITEMTEXTCHANGED: + case VCLEVENT_MENU_ITEMCHECKED: + case VCLEVENT_MENU_ITEMUNCHECKED: + case VCLEVENT_MENU_SHOW: + case VCLEVENT_MENU_HIDE: + break; + + default: OSL_FAIL( "MenuEventListener - Unknown event!" ); } } - return 0; } diff --git a/vcl/source/window/menu.cxx b/vcl/source/window/menu.cxx index c2e415a4ede2..98d9740bedab 100644 --- a/vcl/source/window/menu.cxx +++ b/vcl/source/window/menu.cxx @@ -340,31 +340,29 @@ void Menu::ImplCallEventListeners( sal_uLong nEvent, sal_uInt16 nPos ) } if ( !aDelData.isDeleted() ) - maEventListeners.Call( &aEvent ); - - if( !aDelData.isDeleted() ) { - Menu* pMenu = this; - while ( pMenu ) + // Copy the list, because this can be destroyed when calling a Link... + std::list<Link<VclMenuEvent&,void>> aCopy( maEventListeners ); + std::list<Link<VclMenuEvent&,void>>::iterator aIter( aCopy.begin() ); + std::list<Link<VclMenuEvent&,void>>::const_iterator aEnd( aCopy.end() ); + while ( aIter != aEnd ) { - maChildEventListeners.Call( &aEvent ); - - if( aDelData.isDeleted() ) - break; - - pMenu = ( pMenu->pStartedFrom != pMenu ) ? pMenu->pStartedFrom : NULL; + Link<VclMenuEvent&,void> &rLink = *aIter; + if( std::find(maEventListeners.begin(), maEventListeners.end(), rLink) != maEventListeners.end() ) + rLink.Call( aEvent ); + ++aIter; } } } -void Menu::AddEventListener( const Link<>& rEventListener ) +void Menu::AddEventListener( const Link<VclMenuEvent&,void>& rEventListener ) { - maEventListeners.addListener( rEventListener ); + maEventListeners.push_back( rEventListener ); } -void Menu::RemoveEventListener( const Link<>& rEventListener ) +void Menu::RemoveEventListener( const Link<VclMenuEvent&,void>& rEventListener ) { - maEventListeners.removeListener( rEventListener ); + maEventListeners.remove( rEventListener ); } MenuItemData* Menu::NbcInsertItem(sal_uInt16 nId, MenuItemBits nBits, diff --git a/vcl/source/window/toolbox2.cxx b/vcl/source/window/toolbox2.cxx index 9c2af02d1c0d..6b570f92a551 100644 --- a/vcl/source/window/toolbox2.cxx +++ b/vcl/source/window/toolbox2.cxx @@ -1851,15 +1851,14 @@ void ToolBox::UpdateCustomMenu() } } -IMPL_LINK( ToolBox, ImplCustomMenuListener, VclMenuEvent*, pEvent ) +IMPL_LINK_TYPED( ToolBox, ImplCustomMenuListener, VclMenuEvent&, rEvent, void ) { - if( pEvent->GetMenu() == GetMenu() && pEvent->GetId() == VCLEVENT_MENU_SELECT ) + if( rEvent.GetMenu() == GetMenu() && rEvent.GetId() == VCLEVENT_MENU_SELECT ) { - sal_uInt16 id = GetMenu()->GetItemId( pEvent->GetItemPos() ); + sal_uInt16 id = GetMenu()->GetItemId( rEvent.GetItemPos() ); if( id >= TOOLBOX_MENUITEM_START ) TriggerItem( id - TOOLBOX_MENUITEM_START, false ); } - return 0; } IMPL_LINK_NOARG_TYPED(ToolBox, ImplCallExecuteCustomMenu, void*, void) |