diff options
author | Dan Gudmundsson <dgud@ubuntu.(none)> | 2014-02-05 20:19:41 +0100 |
---|---|---|
committer | Dan Gudmundsson <[email protected]> | 2014-02-13 16:42:36 +0100 |
commit | ce28e4940a6d313db19d996ff3cece21d7372a7b (patch) | |
tree | aed103c158692c6f471ec597d6494693637808db /lib/wx/src/wxe_util.erl | |
parent | 8d71ab498974b5f0623eac50c4f94f62fc229a94 (diff) | |
download | otp-ce28e4940a6d313db19d996ff3cece21d7372a7b.tar.gz otp-ce28e4940a6d313db19d996ff3cece21d7372a7b.tar.bz2 otp-ce28e4940a6d313db19d996ff3cece21d7372a7b.zip |
wx: Rewrite eventhandling again
Remove the extra wxEvtListener that only caused confusion,
now everything is automatically cleaned up by the destructors
and event sent to erlang when it becomes delete for all cases.
Diffstat (limited to 'lib/wx/src/wxe_util.erl')
-rw-r--r-- | lib/wx/src/wxe_util.erl | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/lib/wx/src/wxe_util.erl b/lib/wx/src/wxe_util.erl index a31c3e30b8..02ac4ddfa6 100644 --- a/lib/wx/src/wxe_util.erl +++ b/lib/wx/src/wxe_util.erl @@ -74,7 +74,7 @@ call(Op, Args) -> true -> debug_call(Dbg band 15, Op, Args, Port) end. - + rec(Op) -> receive {'_wxe_result_', Res} -> Res; @@ -108,21 +108,26 @@ send_bin(Bin) when is_binary(Bin) -> get_cbId(Fun) -> gen_server:call((wx:get_env())#wx_env.sv,{register_cb, Fun}, infinity). -connect_cb(Object,EvData) -> - handle_listener(connect_cb, Object, EvData). - -disconnect_cb(Object,EvData) -> - handle_listener(disconnect_cb, Object, EvData). - -handle_listener(Op,Object,EvData) -> - Listener = gen_server:call((wx:get_env())#wx_env.sv, {Op,Object,EvData}, infinity), - case Listener of - {call_impl, connect_cb, EvtList} -> - wxEvtHandler:connect_impl(EvtList,Object,EvData); - Res -> - Res +connect_cb(Object,EvData0 = #evh{cb=Callback}) -> + Server = (wx:get_env())#wx_env.sv, + case Callback of + 0 -> %% Message api connect from this process + case wxEvtHandler:connect_impl(Object,EvData0) of + {ok, Listener} -> + EvData = EvData0#evh{handler=Listener, userdata=undefined}, + gen_server:call(Server, {connect_cb,Object,EvData}, infinity); + Error -> + Error + end; + _ -> %% callback, fun or pid (pid for wx_object:sync_events masked callbacks) + %% let the server do the connect + gen_server:call(Server, {connect_cb,Object,EvData0}, infinity) end. +disconnect_cb(Object,EvData) -> + Server = (wx:get_env())#wx_env.sv, + gen_server:call(Server, {disconnect_cb,Object,EvData}, infinity). + debug_cast(1, Op, _Args, _Port) -> check_previous(), case ets:lookup(wx_debug_info,Op) of |