Add wxEventObjectOriginSetter helper class

This RAII helper can be used to temporarily change the event object and
ID of a wxEvent and will be used when redirecting events to make events
from one object to appear as coming from another one.
This commit is contained in:
Vadim Zeitlin
2021-05-23 14:03:38 +01:00
parent 0f0f9eb790
commit 9a150ba486

View File

@@ -1197,6 +1197,35 @@ private:
wxDECLARE_NO_COPY_CLASS(wxPropagateOnce); wxDECLARE_NO_COPY_CLASS(wxPropagateOnce);
}; };
// Helper class changing the event object to make the event appear as coming
// from a different source: this is somewhat of a hack, but avoids copying the
// events just to change their event object field.
class wxEventObjectOriginSetter
{
public:
wxEventObjectOriginSetter(wxEvent& event, wxObject* source, int winid = 0)
: m_event(event),
m_sourceOrig(event.GetEventObject()),
m_idOrig(event.GetId())
{
m_event.SetEventObject(source);
m_event.SetId(winid);
}
~wxEventObjectOriginSetter()
{
m_event.SetId(m_idOrig);
m_event.SetEventObject(m_sourceOrig);
}
private:
wxEvent& m_event;
wxObject* const m_sourceOrig;
const int m_idOrig;
wxDECLARE_NO_COPY_CLASS(wxEventObjectOriginSetter);
};
// A helper object used to temporarily make wxEvent::ShouldProcessOnlyIn() // A helper object used to temporarily make wxEvent::ShouldProcessOnlyIn()
// return true for the handler passed to its ctor. // return true for the handler passed to its ctor.
class wxEventProcessInHandlerOnly class wxEventProcessInHandlerOnly