Chromium Code Reviews| Index: remoting/client/plugin/chromoting_instance.cc |
| diff --git a/remoting/client/plugin/chromoting_instance.cc b/remoting/client/plugin/chromoting_instance.cc |
| index 4f07f25816ec3b3faa01dc311afaa64f5dcb4d32..9fd830984181246b4d103575f2968a0258c0cead 100644 |
| --- a/remoting/client/plugin/chromoting_instance.cc |
| +++ b/remoting/client/plugin/chromoting_instance.cc |
| @@ -39,9 +39,7 @@ |
| #include "remoting/client/rectangle_update_decoder.h" |
| #include "remoting/protocol/connection_to_host.h" |
| #include "remoting/protocol/host_stub.h" |
| -#include "remoting/protocol/input_event_tracker.h" |
| #include "remoting/protocol/libjingle_transport_factory.h" |
| -#include "remoting/protocol/mouse_input_filter.h" |
| // Windows defines 'PostMessage', so we have to undef it. |
| #if defined(PostMessage) |
| @@ -155,6 +153,16 @@ ChromotingInstance::ChromotingInstance(PP_Instance pp_instance) |
| plugin_task_runner_( |
| new PluginThreadTaskRunner(&plugin_thread_delegate_)), |
| context_(plugin_task_runner_), |
| + input_tracker_(&mouse_input_filter_), |
| +#if defined(OS_MACOSX) |
| + // On Mac we need an extra filter to inject missing keyup events. |
| + // See remoting/client/plugin/mac_key_event_processor.h for more details. |
| + mac_key_event_processor_(&input_tracker_), |
|
Sergey Ulanov
2012/08/10 00:30:58
Does this work properly? mac_key_event_processor_
Wez
2012/08/10 20:04:56
Done.
Wez
2012/08/10 20:04:56
Did this CL on Linux, so of course missed that thi
|
| + key_mapper_(&mac_key_event_processor_), |
| +#else |
| + key_mapper_(&input_tracker_), |
| +#endif |
| + input_handler_(&key_mapper_), |
| weak_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { |
| RequestInputEvents(PP_INPUTEVENT_CLASS_MOUSE | PP_INPUTEVENT_CLASS_WHEEL); |
| RequestFilteringInputEvents(PP_INPUTEVENT_CLASS_KEYBOARD); |
| @@ -346,9 +354,7 @@ void ChromotingInstance::DidChangeView(const pp::View& view) { |
| view_->SetView(view); |
| - if (mouse_input_filter_.get()) { |
| - mouse_input_filter_->set_input_size(view_->get_view_size_dips()); |
| - } |
| + mouse_input_filter_.set_input_size(view_->get_view_size_dips()); |
| } |
| bool ChromotingInstance::HandleInputEvent(const pp::InputEvent& event) { |
| @@ -359,11 +365,9 @@ bool ChromotingInstance::HandleInputEvent(const pp::InputEvent& event) { |
| // TODO(wez): When we have a good hook into Host dimensions changes, move |
| // this there. |
| - // If |input_handler_| is valid, then |mouse_input_filter_| must also be |
| - // since they are constructed together as part of the input pipeline |
| - mouse_input_filter_->set_output_size(view_->get_screen_size()); |
| + mouse_input_filter_.set_output_size(view_->get_screen_size()); |
| - return input_handler_->HandleInputEvent(event); |
| + return input_handler_.HandleInputEvent(event); |
| } |
| void ChromotingInstance::SetDesktopSize(const SkISize& size, |
| @@ -476,24 +480,9 @@ void ChromotingInstance::Connect(const ClientConfig& config) { |
| rectangle_decoder_.get(), |
| audio_player.Pass())); |
| - // Construct the input pipeline |
| - mouse_input_filter_.reset( |
| - new protocol::MouseInputFilter(host_connection_->input_stub())); |
| - mouse_input_filter_->set_input_size(view_->get_view_size_dips()); |
| - input_tracker_.reset( |
| - new protocol::InputEventTracker(mouse_input_filter_.get())); |
| - |
| -#if defined(OS_MACOSX) |
| - // On Mac we need an extra filter to inject missing keyup events. |
| - // See remoting/client/plugin/mac_key_event_processor.h for more details. |
| - mac_key_event_processor_.reset( |
| - new MacKeyEventProcessor(input_tracker_.get())); |
| - key_mapper_.set_input_stub(mac_key_event_processor_.get()); |
| -#else |
| - key_mapper_.set_input_stub(input_tracker_.get()); |
| -#endif |
| - input_handler_.reset( |
| - new PepperInputHandler(&key_mapper_)); |
| + // Connect the input pipeline to the protocol stub & initialize components. |
| + mouse_input_filter_.set_input_stub(host_connection_->input_stub()); |
| + mouse_input_filter_.set_input_size(view_->get_view_size_dips()); |
| LOG(INFO) << "Connecting to " << config.host_jid |
| << ". Local jid: " << config.local_jid << "."; |
| @@ -533,9 +522,8 @@ void ChromotingInstance::Disconnect() { |
| client_.reset(); |
| } |
| - input_handler_.reset(); |
| - input_tracker_.reset(); |
| - mouse_input_filter_.reset(); |
| + // Disconnect the input pipeline and teardown the connection. |
| + mouse_input_filter_.set_input_stub(NULL); |
| host_connection_.reset(); |
| } |
| @@ -545,13 +533,13 @@ void ChromotingInstance::OnIncomingIq(const std::string& iq) { |
| void ChromotingInstance::ReleaseAllKeys() { |
| if (IsConnected()) |
| - input_tracker_->ReleaseAll(); |
| + input_tracker_.ReleaseAll(); |
| } |
| void ChromotingInstance::InjectKeyEvent(const protocol::KeyEvent& event) { |
| // Inject after the KeyEventMapper, so the event won't get mapped or trapped. |
| if (IsConnected()) |
| - input_tracker_->InjectKeyEvent(event); |
| + input_tracker_.InjectKeyEvent(event); |
| } |
| void ChromotingInstance::RemapKey(uint32 in_usb_keycode, |