diff options
Diffstat (limited to 'remoting/host/event_executor_linux.cc')
-rw-r--r-- | remoting/host/event_executor_linux.cc | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/remoting/host/event_executor_linux.cc b/remoting/host/event_executor_linux.cc index c438a3d..8c16fba 100644 --- a/remoting/host/event_executor_linux.cc +++ b/remoting/host/event_executor_linux.cc @@ -14,8 +14,9 @@ #include "base/basictypes.h" #include "base/bind.h" #include "base/compiler_specific.h" +#include "base/location.h" #include "base/logging.h" -#include "base/message_loop.h" +#include "base/single_thread_task_runner.h" #include "remoting/proto/internal.pb.h" namespace remoting { @@ -34,7 +35,7 @@ using protocol::MouseEvent; // A class to generate events on Linux. class EventExecutorLinux : public EventExecutor { public: - EventExecutorLinux(MessageLoop* message_loop); + EventExecutorLinux(scoped_refptr<base::SingleThreadTaskRunner> task_runner); virtual ~EventExecutorLinux(); bool Init(); @@ -59,7 +60,7 @@ class EventExecutorLinux : public EventExecutor { void SetAutoRepeatForKey(int keycode, int mode); void InjectScrollWheelClicks(int button, int count); - MessageLoop* message_loop_; + scoped_refptr<base::SingleThreadTaskRunner> task_runner_; std::set<int> pressed_keys_; @@ -267,8 +268,9 @@ int ChromotocolKeycodeToX11Keysym(int32_t keycode) { return kUsVkeyToKeysym[keycode]; } -EventExecutorLinux::EventExecutorLinux(MessageLoop* message_loop) - : message_loop_(message_loop), +EventExecutorLinux::EventExecutorLinux( + scoped_refptr<base::SingleThreadTaskRunner> task_runner) + : task_runner_(task_runner), display_(XOpenDisplay(NULL)), root_window_(BadValue) { } @@ -306,8 +308,8 @@ void EventExecutorLinux::InjectKeyEvent(const KeyEvent& event) { // HostEventDispatcher should filter events missing the pressed field. DCHECK(event.has_pressed()); - if (MessageLoop::current() != message_loop_) { - message_loop_->PostTask( + if (!task_runner_->BelongsToCurrentThread()) { + task_runner_->PostTask( FROM_HERE, base::Bind(&EventExecutorLinux::InjectKeyEvent, base::Unretained(this), event)); @@ -375,8 +377,8 @@ void EventExecutorLinux::InjectScrollWheelClicks(int button, int count) { } void EventExecutorLinux::InjectMouseEvent(const MouseEvent& event) { - if (MessageLoop::current() != message_loop_) { - message_loop_->PostTask( + if (!task_runner_->BelongsToCurrentThread()) { + task_runner_->PostTask( FROM_HERE, base::Bind(&EventExecutorLinux::InjectMouseEvent, base::Unretained(this), event)); @@ -431,11 +433,12 @@ void EventExecutorLinux::OnSessionFinished() { } // namespace -scoped_ptr<EventExecutor> EventExecutor::Create(MessageLoop* message_loop, - base::MessageLoopProxy* ui_loop, - Capturer* capturer) { +scoped_ptr<EventExecutor> EventExecutor::Create( + scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, + scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner, + Capturer* capturer) { scoped_ptr<EventExecutorLinux> executor( - new EventExecutorLinux(message_loop)); + new EventExecutorLinux(main_task_runner)); if (!executor->Init()) return scoped_ptr<EventExecutor>(NULL); return executor.PassAs<EventExecutor>(); |