diff options
author | simonmorris@chromium.org <simonmorris@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-16 18:03:32 +0000 |
---|---|---|
committer | simonmorris@chromium.org <simonmorris@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-16 18:03:32 +0000 |
commit | 98f99a057697e68d829598fdc4b738e71c43fc2b (patch) | |
tree | c0e375f0c31000c9a11c023aeb1cba8fa4c0eea8 /remoting/host/event_executor_win.cc | |
parent | e5895e65de6b1f2e28ae134f2e891d5c6334d200 (diff) | |
download | chromium_src-98f99a057697e68d829598fdc4b738e71c43fc2b.zip chromium_src-98f99a057697e68d829598fdc4b738e71c43fc2b.tar.gz chromium_src-98f99a057697e68d829598fdc4b738e71c43fc2b.tar.bz2 |
[Chromoting] The Windows IT2Me host gets any new text items it finds on the clipboard.
A follow-up CL will send those items to the client.
The approach used in this CL will do nothing on OSes earlier than Vista.
BUG=117473
Review URL: https://chromiumcodereview.appspot.com/10381115
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@137455 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'remoting/host/event_executor_win.cc')
-rw-r--r-- | remoting/host/event_executor_win.cc | 41 |
1 files changed, 19 insertions, 22 deletions
diff --git a/remoting/host/event_executor_win.cc b/remoting/host/event_executor_win.cc index 007f31b..430266a 100644 --- a/remoting/host/event_executor_win.cc +++ b/remoting/host/event_executor_win.cc @@ -9,6 +9,7 @@ #include "base/bind.h" #include "base/compiler_specific.h" #include "base/message_loop.h" +#include "base/message_loop_proxy.h" #include "remoting/host/capturer.h" #include "remoting/host/clipboard.h" #include "remoting/proto/event.pb.h" @@ -30,7 +31,9 @@ using protocol::MouseEvent; // A class to generate events on Windows. class EventExecutorWin : public EventExecutor { public: - EventExecutorWin(MessageLoop* message_loop, Capturer* capturer); + EventExecutorWin(MessageLoop* message_loop, + base::MessageLoopProxy* ui_loop, + Capturer* capturer); virtual ~EventExecutorWin() {} // ClipboardStub interface. @@ -48,10 +51,9 @@ class EventExecutorWin : public EventExecutor { HKL GetForegroundKeyboardLayout(); void HandleKey(const KeyEvent& event); void HandleMouse(const MouseEvent& event); - void HandleSessionStarted(); - void HandleSessionFinished(); MessageLoop* message_loop_; + base::MessageLoopProxy* ui_loop_; Capturer* capturer_; scoped_ptr<Clipboard> clipboard_; @@ -59,15 +61,17 @@ class EventExecutorWin : public EventExecutor { }; EventExecutorWin::EventExecutorWin(MessageLoop* message_loop, + base::MessageLoopProxy* ui_loop, Capturer* capturer) : message_loop_(message_loop), + ui_loop_(ui_loop), capturer_(capturer), clipboard_(Clipboard::Create()) { } void EventExecutorWin::InjectClipboardEvent(const ClipboardEvent& event) { - if (MessageLoop::current() != message_loop_) { - message_loop_->PostTask( + if (!ui_loop_->BelongsToCurrentThread()) { + ui_loop_->PostTask( FROM_HERE, base::Bind(&EventExecutorWin::InjectClipboardEvent, base::Unretained(this), @@ -103,27 +107,27 @@ void EventExecutorWin::InjectMouseEvent(const MouseEvent& event) { } void EventExecutorWin::OnSessionStarted() { - if (MessageLoop::current() != message_loop_) { - message_loop_->PostTask( + if (!ui_loop_->BelongsToCurrentThread()) { + ui_loop_->PostTask( FROM_HERE, base::Bind(&EventExecutorWin::OnSessionStarted, base::Unretained(this))); return; } - HandleSessionStarted(); + clipboard_->Start(); } void EventExecutorWin::OnSessionFinished() { - if (MessageLoop::current() != message_loop_) { - message_loop_->PostTask( + if (!ui_loop_->BelongsToCurrentThread()) { + ui_loop_->PostTask( FROM_HERE, base::Bind(&EventExecutorWin::OnSessionFinished, base::Unretained(this))); return; } - HandleSessionFinished(); + clipboard_->Stop(); } HKL EventExecutorWin::GetForegroundKeyboardLayout() { @@ -278,20 +282,13 @@ void EventExecutorWin::HandleMouse(const MouseEvent& event) { } } -void EventExecutorWin::HandleSessionStarted() { - clipboard_->Start(); -} - -void EventExecutorWin::HandleSessionFinished() { - clipboard_->Stop(); -} - } // namespace -scoped_ptr<EventExecutor> EventExecutor::Create( - MessageLoop* message_loop, Capturer* capturer) { +scoped_ptr<EventExecutor> EventExecutor::Create(MessageLoop* message_loop, + base::MessageLoopProxy* ui_loop, + Capturer* capturer) { return scoped_ptr<EventExecutor>( - new EventExecutorWin(message_loop, capturer)); + new EventExecutorWin(message_loop, ui_loop, capturer)); } } // namespace remoting |