Fix UnbindFromHandler() test compilation with C++98
Can't declare classes inside the function as they must have external linkage
to be usable with Bind().
Fixes the build after 99d9a81e28
, see #17229.
This commit is contained in:
@@ -462,46 +462,49 @@ void EvtHandlerTestCase::InvalidBind()
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Helpers for UnbindFromHandler() test, have to be declared outside of the
|
||||||
|
// function in C++98.
|
||||||
|
struct Handler1
|
||||||
|
{
|
||||||
|
void OnDontCall(MyEvent&)
|
||||||
|
{
|
||||||
|
// Although this handler is bound, the second one below is bound
|
||||||
|
// later and so will be called first and will disconnect this one
|
||||||
|
// before it has a chance to be called.
|
||||||
|
CPPUNIT_FAIL("shouldn't be called");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class Handler2
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Handler2(MyHandler& handler, Handler1& h1)
|
||||||
|
: m_handler(handler),
|
||||||
|
m_h1(h1)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnUnbind(MyEvent& e)
|
||||||
|
{
|
||||||
|
m_handler.Unbind(MyEventType, &Handler1::OnDontCall, &m_h1);
|
||||||
|
|
||||||
|
// Check that the now disconnected first handler is not executed.
|
||||||
|
e.Skip();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
MyHandler& m_handler;
|
||||||
|
Handler1& m_h1;
|
||||||
|
|
||||||
|
wxDECLARE_NO_COPY_CLASS(Handler2);
|
||||||
|
};
|
||||||
|
|
||||||
void EvtHandlerTestCase::UnbindFromHandler()
|
void EvtHandlerTestCase::UnbindFromHandler()
|
||||||
{
|
{
|
||||||
struct Handler1
|
Handler1 h1;
|
||||||
{
|
|
||||||
void OnDontCall(MyEvent&)
|
|
||||||
{
|
|
||||||
// Although this handler is bound, the second one below is bound
|
|
||||||
// later and so will be called first and will disconnect this one
|
|
||||||
// before it has a chance to be called.
|
|
||||||
CPPUNIT_FAIL("shouldn't be called");
|
|
||||||
}
|
|
||||||
} h1;
|
|
||||||
|
|
||||||
handler.Bind(MyEventType, &Handler1::OnDontCall, &h1);
|
handler.Bind(MyEventType, &Handler1::OnDontCall, &h1);
|
||||||
|
|
||||||
class Handler2
|
Handler2 h2(handler, h1);
|
||||||
{
|
|
||||||
public:
|
|
||||||
Handler2(MyHandler& handler, Handler1& h1)
|
|
||||||
{
|
|
||||||
m_handler = &handler;
|
|
||||||
m_h1 = &h1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void OnUnbind(MyEvent& e)
|
|
||||||
{
|
|
||||||
m_handler->Unbind(MyEventType, &Handler1::OnDontCall, m_h1);
|
|
||||||
|
|
||||||
// Check that the now disconnected first handler is not executed.
|
|
||||||
e.Skip();
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
// Use pointers instead of references just to avoid warnings about the
|
|
||||||
// class being non-copyable even though these pointers don't change and
|
|
||||||
// are non-NULL.
|
|
||||||
MyHandler* m_handler;
|
|
||||||
Handler1* m_h1;
|
|
||||||
} h2(handler, h1);
|
|
||||||
|
|
||||||
handler.Bind(MyEventType, &Handler2::OnUnbind, &h2);
|
handler.Bind(MyEventType, &Handler2::OnUnbind, &h2);
|
||||||
|
|
||||||
handler.ProcessEvent(e);
|
handler.ProcessEvent(e);
|
||||||
|
Reference in New Issue
Block a user