summaryrefslogtreecommitdiffstats
path: root/remoting/host/event_executor_win.cc
diff options
context:
space:
mode:
authorsimonmorris@chromium.org <simonmorris@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-16 18:03:32 +0000
committersimonmorris@chromium.org <simonmorris@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-16 18:03:32 +0000
commit98f99a057697e68d829598fdc4b738e71c43fc2b (patch)
treec0e375f0c31000c9a11c023aeb1cba8fa4c0eea8 /remoting/host/event_executor_win.cc
parente5895e65de6b1f2e28ae134f2e891d5c6334d200 (diff)
downloadchromium_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.cc41
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