summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Grandin <noel@peralex.com>2015-09-10 16:44:12 +0200
committerNoel Grandin <noel@peralex.com>2015-09-11 08:48:55 +0200
commit71a83295d8c719f4fd4fa05f367c3c85323e22e9 (patch)
tree1ff99c92e49ad61e7b478daad338fd6109324222
parentc80fb09256f02379b78f7bb219e94dfbf5277872 (diff)
convert Link<> to typed
and remove unused maChildEventListeners Change-Id: I845a9af608c3429cf9ccb0e8041f24f423839513
-rw-r--r--accessibility/inc/accessibility/standard/accessiblemenubasecomponent.hxx2
-rw-r--r--accessibility/source/standard/accessiblemenubasecomponent.cxx11
-rw-r--r--include/toolkit/awt/vclxmenu.hxx3
-rw-r--r--include/vcl/menu.hxx7
-rw-r--r--include/vcl/toolbox.hxx2
-rw-r--r--toolkit/source/awt/vclxmenu.cxx132
-rw-r--r--vcl/source/window/menu.cxx28
-rw-r--r--vcl/source/window/toolbox2.cxx7
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)