diff options
author | Dan Gudmundsson <[email protected]> | 2014-05-22 13:46:53 +0200 |
---|---|---|
committer | Dan Gudmundsson <[email protected]> | 2014-06-16 12:10:48 +0200 |
commit | 190c04f50ab22e0227a0d5cfd67767db0b687c97 (patch) | |
tree | 0cbf50113363b927545d4d931961f3261893850f /lib/wx/c_src/wxe_impl.cpp | |
parent | b146f66ea96bacca6915f7e3b29ac7dcebd93119 (diff) | |
download | otp-190c04f50ab22e0227a0d5cfd67767db0b687c97.tar.gz otp-190c04f50ab22e0227a0d5cfd67767db0b687c97.tar.bz2 otp-190c04f50ab22e0227a0d5cfd67767db0b687c97.zip |
wx: Fix destroy bug
Do not postpone deletion of wx*DC objects since they need to be
deleted directly. Otherwise, if inside showModal, causes an eternal
loop of wxPaint events on Windows.
Diffstat (limited to 'lib/wx/c_src/wxe_impl.cpp')
-rw-r--r-- | lib/wx/c_src/wxe_impl.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/lib/wx/c_src/wxe_impl.cpp b/lib/wx/c_src/wxe_impl.cpp index f617aaf349..0ee52e3af2 100644 --- a/lib/wx/c_src/wxe_impl.cpp +++ b/lib/wx/c_src/wxe_impl.cpp @@ -500,7 +500,7 @@ void WxeApp::destroyMemEnv(wxeMetaCommand& Ecmd) if(it != ptr2ref.end()) { wxeRefData *refd = it->second; if(refd->alloc_in_erl) { - if((refd->type == 1) && ((wxObject *)ptr)->IsKindOf(CLASSINFO(wxBufferedDC))) { + if((refd->type == 4) && ((wxObject *)ptr)->IsKindOf(CLASSINFO(wxBufferedDC))) { ((wxBufferedDC *)ptr)->m_dc = NULL; // Workaround } wxString msg; @@ -539,6 +539,17 @@ void WxeApp::destroyMemEnv(wxeMetaCommand& Ecmd) refmap.erase((ErlDrvTermData) Ecmd.port); } + +wxeRefData * WxeApp::getRefData(void *ptr) { + ptrMap::iterator it = ptr2ref.find(ptr); + if(it != ptr2ref.end()) { + wxeRefData *refd = it->second; + return refd; + } + return NULL; +} + + wxeMemEnv * WxeApp::getMemEnv(ErlDrvTermData port) { return refmap[port]; } |