aboutsummaryrefslogtreecommitdiffstats
path: root/lib/wx/c_src/wxePrintout.cpp
diff options
context:
space:
mode:
authorDan Gudmundsson <[email protected]>2011-07-14 11:36:50 +0200
committerDan Gudmundsson <[email protected]>2011-07-14 16:24:38 +0200
commit30283e3136c22444a2ecb1263a77654e6f1bd48d (patch)
tree6cbd0b93f228964b8a5683583ac08704804b59cb /lib/wx/c_src/wxePrintout.cpp
parentf6d661504a1998f3a243731d3fe5769641f80bcc (diff)
downloadotp-30283e3136c22444a2ecb1263a77654e6f1bd48d.tar.gz
otp-30283e3136c22444a2ecb1263a77654e6f1bd48d.tar.bz2
otp-30283e3136c22444a2ecb1263a77654e6f1bd48d.zip
Handle overloading callbacks the same as events
Previously other process wx calls where allowed to execute in the callback code, but that lead to a deadlock if for example a dialog was created.
Diffstat (limited to 'lib/wx/c_src/wxePrintout.cpp')
-rw-r--r--lib/wx/c_src/wxePrintout.cpp49
1 files changed, 32 insertions, 17 deletions
diff --git a/lib/wx/c_src/wxePrintout.cpp b/lib/wx/c_src/wxePrintout.cpp
index 1bcbc5f1a4..90959df379 100644
--- a/lib/wx/c_src/wxePrintout.cpp
+++ b/lib/wx/c_src/wxePrintout.cpp
@@ -38,7 +38,7 @@
rt.addAtom("_wx_invoke_cb_"); \
rt.addTupleCount(3); \
rt.send(); \
- handle_callback_batch(port); \
+ handle_event_callback(port, memenv->owner); \
}
#define INVOKE_CALLBACK(port, callback, class_str) \
@@ -68,9 +68,11 @@ bool wxEPrintout::OnBeginDocument(int startPage, int endPage)
rt.addInt(startPage);
rt.addInt(endPage);
INVOKE_CALLBACK_END(port, 2);
- if(((WxeApp *) wxTheApp)->cb_len > 0) {
- char * bp = ((WxeApp *) wxTheApp)->cb_buff;
- return *(int*) bp;
+ if(((WxeApp *) wxTheApp)->cb_buff) {
+ int res = * (int*) ((WxeApp *) wxTheApp)->cb_buff;
+ driver_free(((WxeApp *) wxTheApp)->cb_buff);
+ ((WxeApp *) wxTheApp)->cb_buff = NULL;
+ return res;
}
}
return wxPrintout::OnBeginDocument(startPage,endPage);
@@ -122,9 +124,11 @@ bool wxEPrintout::HasPage(int page)
INVOKE_CALLBACK_INIT(port, hasPage, "wxPrintout");
rt.addInt(page);
INVOKE_CALLBACK_END(port, 1);
- if(((WxeApp *) wxTheApp)->cb_len > 0) {
- char * bp = ((WxeApp *) wxTheApp)->cb_buff;
- return *(int*) bp;
+ if(((WxeApp *) wxTheApp)->cb_buff) {
+ int res = * (int*) ((WxeApp *) wxTheApp)->cb_buff;
+ driver_free(((WxeApp *) wxTheApp)->cb_buff);
+ ((WxeApp *) wxTheApp)->cb_buff = NULL;
+ return res;
}
}
return wxPrintout::HasPage(page);
@@ -135,9 +139,11 @@ bool wxEPrintout::OnPrintPage(int page)
INVOKE_CALLBACK_INIT(port, onPrintPage, "wxPrintout");
rt.addInt(page);
INVOKE_CALLBACK_END(port, 1);
- if(((WxeApp *) wxTheApp)->cb_len > 0) {
- char * bp = ((WxeApp *) wxTheApp)->cb_buff;
- return *(int*) bp;
+ if(((WxeApp *) wxTheApp)->cb_buff) {
+ int res = * (int*) ((WxeApp *) wxTheApp)->cb_buff;
+ driver_free(((WxeApp *) wxTheApp)->cb_buff);
+ ((WxeApp *) wxTheApp)->cb_buff = NULL;
+ return res;
}
return FALSE;
}
@@ -146,12 +152,14 @@ void wxEPrintout::GetPageInfo(int *minPage, int *maxPage, int *pageFrom, int *pa
{
if(getPageInfo) {
INVOKE_CALLBACK(port, getPageInfo, "wxPrintout");
- if(((WxeApp *) wxTheApp)->cb_len > 0) {
+ if(((WxeApp *) wxTheApp)->cb_buff) {
char * bp = ((WxeApp *) wxTheApp)->cb_buff;
*minPage = *(int *) bp; bp += 4;
*maxPage = *(int *) bp; bp += 4;
*pageFrom = *(int *) bp; bp += 4;
*pageTo = *(int *) bp; bp += 4;
+ driver_free(((WxeApp *) wxTheApp)->cb_buff);
+ ((WxeApp *) wxTheApp)->cb_buff = NULL;
}
}
wxPrintout::GetPageInfo(minPage, maxPage, pageFrom, pageTo);
@@ -166,9 +174,11 @@ wxString EwxListCtrl::OnGetItemText(long item, long col) const {
rt.addInt(item);
rt.addInt(col);
INVOKE_CALLBACK_END(port, 2);
- if(((WxeApp *) wxTheApp)->cb_len > 0) {
+ if(((WxeApp *) wxTheApp)->cb_buff) {
char * bp = ((WxeApp *) wxTheApp)->cb_buff;
wxString str = wxString(bp, wxConvUTF8);
+ driver_free(((WxeApp *) wxTheApp)->cb_buff);
+ ((WxeApp *) wxTheApp)->cb_buff = NULL;
return str;
}
}
@@ -182,8 +192,11 @@ wxListItemAttr* EwxListCtrl::OnGetItemAttr(long item) const {
INVOKE_CALLBACK_END(port, 1);
char * bp = ((WxeApp *) wxTheApp)->cb_buff;
wxeMemEnv * memenv = ((WxeApp *) wxTheApp)->getMemEnv(port);
- if(((WxeApp *) wxTheApp)->cb_len > 0) {
- return (wxListItemAttr *) ((WxeApp *) wxTheApp)->getPtr(bp, memenv);
+ if(bp) {
+ wxListItemAttr * result = (wxListItemAttr *)((WxeApp *) wxTheApp)->getPtr(bp, memenv);
+ driver_free(((WxeApp *) wxTheApp)->cb_buff);
+ ((WxeApp *) wxTheApp)->cb_buff = NULL;
+ return result;
}
}
return NULL;
@@ -199,9 +212,11 @@ int EwxListCtrl::OnGetItemColumnImage(long item, long col) const {
rt.addInt(item);
rt.addInt(col);
INVOKE_CALLBACK_END(port, 2);
- if(((WxeApp *) wxTheApp)->cb_len > 0) {
- char * bp = ((WxeApp *) wxTheApp)->cb_buff;
- return *(int *) bp;
+ if(((WxeApp *) wxTheApp)->cb_buff) {
+ int res = * (int*) ((WxeApp *) wxTheApp)->cb_buff;
+ driver_free(((WxeApp *) wxTheApp)->cb_buff);
+ ((WxeApp *) wxTheApp)->cb_buff = NULL;
+ return res;
}
}
return -1;