]> git.saurik.com Git - wxWidgets.git/commitdiff
allow passing temporary functors to Bind() too (closes #10653)
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 2 May 2009 15:28:16 +0000 (15:28 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 2 May 2009 15:28:16 +0000 (15:28 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@60477 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/event.h
tests/events/evthandler.cpp

index b116e3e8c6dfb0e23da814c4f391de9f010a30a0..3ecf5dfc94e93dc4655880d0af518eb778f558a7 100644 (file)
@@ -523,7 +523,7 @@ class wxEventFunctorFunctor : public wxEventFunctor
 public:
     typedef typename EventTag::EventClass EventArg;
 
-    wxEventFunctorFunctor(Functor& handler)
+    wxEventFunctorFunctor(const Functor& handler)
         : m_handler(handler), m_handlerAddr(&handler)
         { }
 
@@ -591,14 +591,14 @@ wxMakeEventFunctor(const EventTag&, void (*func)(EventArg &))
 // Create functors wrapping other functors:
 template <typename EventTag, typename Functor>
 inline wxEventFunctorFunctor<EventTag, Functor> *
-wxNewEventFunctor(const EventTag&, Functor &func)
+wxNewEventFunctor(const EventTag&, const Functor &func)
 {
     return new wxEventFunctorFunctor<EventTag, Functor>(func);
 }
 
 template <typename EventTag, typename Functor>
 inline wxEventFunctorFunctor<EventTag, Functor>
-wxMakeEventFunctor(const EventTag&, Functor &func)
+wxMakeEventFunctor(const EventTag&, const Functor &func)
 {
     return wxEventFunctorFunctor<EventTag, Functor>(func);
 }
@@ -3059,7 +3059,7 @@ public:
     // Bind functors to an event:
     template <typename EventTag, typename Functor>
     void Bind(const EventTag& eventType,
-              Functor &functor,
+              const Functor &functor,
               int winid = wxID_ANY,
               int lastId = wxID_ANY,
               wxObject *userData = NULL)
@@ -3072,7 +3072,7 @@ public:
 
     template <typename EventTag, typename Functor>
     bool Unbind(const EventTag& eventType,
-                Functor &functor,
+                const Functor &functor,
                 int winid = wxID_ANY,
                 int lastId = wxID_ANY,
                 wxObject *userData = NULL)
index 0f49b1a1791ba2ac8c8d7627e93622a350aee86c..863f879de8a8842924f02c15c2f10bfafa7c41de 100644 (file)
@@ -309,6 +309,19 @@ void EvtHandlerTestCase::BindFunctor()
 
     handler.Bind( MyEventType, functor, 0, 0 );
     handler.Unbind( MyEventType, functor, 0, 0 );
+
+    // Test that a temporary functor is working as well. Note that Unbind will
+    // fail because a functor can only be unbound if it is the same instance as
+    // in Bind!
+
+    handler.Bind( MyEventType, MyFunctor() );
+    CPPUNIT_ASSERT( !handler.Unbind( MyEventType, MyFunctor() ));
+
+    handler.Bind( MyEventType, MyFunctor(), 0 );
+    CPPUNIT_ASSERT( !handler.Unbind( MyEventType, MyFunctor(), 0 ));
+
+    handler.Bind( MyEventType, MyFunctor(), 0, 0 );
+    CPPUNIT_ASSERT( !handler.Unbind( MyEventType, MyFunctor(), 0, 0 ));
 }
 
 void EvtHandlerTestCase::BindMethod()