added OnExit(); made event loop exception safe; added wxModalEvtLoop
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@23647 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -16,6 +16,8 @@
|
||||
#pragma interface "evtloop.h"
|
||||
#endif
|
||||
|
||||
class WXDLLEXPORT wxEventLoopImpl;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxEventLoop: a GUI event loop
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -51,12 +53,48 @@ public:
|
||||
static void SetActive(wxEventLoop* loop) { ms_activeLoop = loop; }
|
||||
|
||||
protected:
|
||||
// the pointer to the port specific implementation class
|
||||
class WXDLLEXPORT wxEventLoopImpl *m_impl;
|
||||
// this function should be called before the event loop terminates, whether
|
||||
// this happens normally (because of Exit() call) or abnormally (because of
|
||||
// an exception thrown from inside the loop)
|
||||
virtual void OnExit() { }
|
||||
|
||||
|
||||
// the pointer to currently active loop
|
||||
static wxEventLoop *ms_activeLoop;
|
||||
|
||||
// the pointer to the port specific implementation class
|
||||
wxEventLoopImpl *m_impl;
|
||||
|
||||
DECLARE_NO_COPY_CLASS(wxEventLoop)
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxModalEventLoop
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// this is a naive generic implementation which uses wxWindowDisabler to
|
||||
// implement modality, we will surely need platform-specific implementations
|
||||
// too, this generic implementation is here only temporarily to see how it
|
||||
// works
|
||||
class WXDLLEXPORT wxModalEventLoop : public wxEventLoop
|
||||
{
|
||||
public:
|
||||
wxModalEventLoop(wxWindow *winModal)
|
||||
{
|
||||
m_windowDisabler = new wxWindowDisabler(winModal);
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void OnExit()
|
||||
{
|
||||
delete m_windowDisabler;
|
||||
m_windowDisabler = NULL;
|
||||
|
||||
wxEventLoop::OnExit();
|
||||
}
|
||||
|
||||
private:
|
||||
wxWindowDisabler *m_windowDisabler;
|
||||
};
|
||||
|
||||
#endif // _WX_EVTLOOP_H_
|
||||
|
Reference in New Issue
Block a user