aboutsummaryrefslogtreecommitdiffstats
path: root/lib/wx
diff options
context:
space:
mode:
authorDan Gudmundsson <[email protected]>2019-01-25 08:38:33 +0100
committerDan Gudmundsson <[email protected]>2019-01-25 09:48:48 +0100
commitd7805acb99f2b7ccd97541d189f6494966564d98 (patch)
tree4ef468ddf69cac6d3a2497fb369e078e43837c51 /lib/wx
parentf180ccc75a7d2cef6b469d2e4a737cffbef7c951 (diff)
downloadotp-d7805acb99f2b7ccd97541d189f6494966564d98.tar.gz
otp-d7805acb99f2b7ccd97541d189f6494966564d98.tar.bz2
otp-d7805acb99f2b7ccd97541d189f6494966564d98.zip
Fix showModal crash on Mojave
Invoking wxDialog:showModal could cause a seg-fault on Mojave if invoked from inside event callback. Which could happen when wx dispatch commands inside send_event. Wx dispatches commands inside send_event because some events will not return to idle mode (on Windows) until mouse is released. These events are (at least) wxSize and wxMove according to previous commits. Solved by only dispatching commands for those events. Another solution might be to ifdef the code to only do it on windows or not do it on the Mac.
Diffstat (limited to 'lib/wx')
-rw-r--r--lib/wx/api_gen/wx_gen_cpp.erl6
-rw-r--r--lib/wx/c_src/gen/wxe_events.cpp4
2 files changed, 6 insertions, 4 deletions
diff --git a/lib/wx/api_gen/wx_gen_cpp.erl b/lib/wx/api_gen/wx_gen_cpp.erl
index a29172032b..c6f2534380 100644
--- a/lib/wx/api_gen/wx_gen_cpp.erl
+++ b/lib/wx/api_gen/wx_gen_cpp.erl
@@ -1332,8 +1332,10 @@ encode_events(Evs) ->
w(" } else {~n"),
w(" send_res = rt.send();~n"),
w(" if(cb->skip) event->Skip();~n"),
- #class{id=MouseId} = lists:keyfind("wxMouseEvent", #class.name, Evs),
- w(" if(app->recurse_level < 1 && Etype->cID != ~p) {~n", [MouseId]),
+ #class{id=SizeId} = lists:keyfind("wxSizeEvent", #class.name, Evs),
+ #class{id=MoveId} = lists:keyfind("wxMoveEvent", #class.name, Evs),
+ w(" if(app->recurse_level < 1 && (Etype->cID == ~w || Etype->cID == ~w)) {~n",
+ [SizeId, MoveId]),
w(" app->recurse_level++;~n"),
w(" app->dispatch_cmds();~n"),
w(" app->recurse_level--;~n"),
diff --git a/lib/wx/c_src/gen/wxe_events.cpp b/lib/wx/c_src/gen/wxe_events.cpp
index 45da18f7c7..8c3283a670 100644
--- a/lib/wx/c_src/gen/wxe_events.cpp
+++ b/lib/wx/c_src/gen/wxe_events.cpp
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2008-2018. All Rights Reserved.
+ * Copyright Ericsson AB 2008-2019. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -910,7 +910,7 @@ case 238: {// wxDropFilesEvent
} else {
send_res = rt.send();
if(cb->skip) event->Skip();
- if(app->recurse_level < 1 && Etype->cID != 168) {
+ if(app->recurse_level < 1 && (Etype->cID == 171 || Etype->cID == 172)) {
app->recurse_level++;
app->dispatch_cmds();
app->recurse_level--;