| Index: remoting/host/local_input_monitor_linux.cc
|
| diff --git a/remoting/host/local_input_monitor_linux.cc b/remoting/host/local_input_monitor_linux.cc
|
| index 241b1b42cc21a26aa778bc842d20494749513e24..a63bbce2257d7fd858229dbd67160cc041309207 100644
|
| --- a/remoting/host/local_input_monitor_linux.cc
|
| +++ b/remoting/host/local_input_monitor_linux.cc
|
| @@ -19,7 +19,7 @@
|
| #include "base/message_pump_libevent.h"
|
| #include "base/posix/eintr_wrapper.h"
|
| #include "base/single_thread_task_runner.h"
|
| -#include "remoting/host/mouse_move_observer.h"
|
| +#include "base/threading/non_thread_safe.h"
|
| #include "third_party/skia/include/core/SkPoint.h"
|
|
|
| // These includes need to be later than dictated by the style guide due to
|
| @@ -32,17 +32,15 @@ namespace remoting {
|
|
|
| namespace {
|
|
|
| -class LocalInputMonitorLinux : public LocalInputMonitor {
|
| +class LocalInputMonitorLinux : public base::NonThreadSafe,
|
| + public LocalInputMonitor {
|
| public:
|
| LocalInputMonitorLinux(
|
| scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner,
|
| - scoped_refptr<base::SingleThreadTaskRunner> input_task_runner);
|
| + scoped_refptr<base::SingleThreadTaskRunner> input_task_runner,
|
| + SessionController::Delegate* delegate);
|
| virtual ~LocalInputMonitorLinux();
|
|
|
| - virtual void Start(MouseMoveObserver* mouse_move_observer,
|
| - const base::Closure& disconnect_callback) OVERRIDE;
|
| - virtual void Stop() OVERRIDE;
|
| -
|
| private:
|
| // The actual implementation resides in LocalInputMonitorLinux::Core class.
|
| class Core
|
| @@ -50,10 +48,10 @@ class LocalInputMonitorLinux : public LocalInputMonitor {
|
| public base::MessagePumpLibevent::Watcher {
|
| public:
|
| Core(scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner,
|
| - scoped_refptr<base::SingleThreadTaskRunner> input_task_runner);
|
| + scoped_refptr<base::SingleThreadTaskRunner> input_task_runner,
|
| + SessionController::Delegate* delegate);
|
|
|
| - void Start(MouseMoveObserver* mouse_move_observer,
|
| - const base::Closure& disconnect_callback);
|
| + void Start();
|
| void Stop();
|
|
|
| private:
|
| @@ -67,11 +65,12 @@ class LocalInputMonitorLinux : public LocalInputMonitor {
|
| virtual void OnFileCanReadWithoutBlocking(int fd) OVERRIDE;
|
| virtual void OnFileCanWriteWithoutBlocking(int fd) OVERRIDE;
|
|
|
| - // Posts OnLocalMouseMoved() notification to |mouse_move_observer_| on
|
| + // Posts OnLocalMouseMoved() notification to |delegate_| on
|
| // the |caller_task_runner_| thread.
|
| void OnLocalMouseMoved(const SkIPoint& position);
|
|
|
| - // Posts |disconnect_callback_| on the |caller_task_runner_| thread.
|
| + // Posts DisconnectSession() call to |delegate_| on
|
| + // the |caller_task_runner_| thread.
|
| void OnDisconnectShortcut();
|
|
|
| // Processes key and mouse events.
|
| @@ -85,12 +84,9 @@ class LocalInputMonitorLinux : public LocalInputMonitor {
|
| // Task runner on which X Window events are received.
|
| scoped_refptr<base::SingleThreadTaskRunner> input_task_runner_;
|
|
|
| - // Invoked in the |caller_task_runner_| thread to report local mouse events.
|
| - MouseMoveObserver* mouse_move_observer_;
|
| -
|
| - // Posted to the |caller_task_runner_| thread every time the disconnect key
|
| - // combination is pressed.
|
| - base::Closure disconnect_callback_;
|
| + // Points to the object receiving mouse event notifications and session
|
| + // disconnect requests.
|
| + SessionController::Delegate* delegate_;
|
|
|
| // Used to receive base::MessagePumpLibevent::Watcher events.
|
| base::MessagePumpLibevent::FileDescriptorWatcher controller_;
|
| @@ -116,51 +112,38 @@ class LocalInputMonitorLinux : public LocalInputMonitor {
|
|
|
| LocalInputMonitorLinux::LocalInputMonitorLinux(
|
| scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner,
|
| - scoped_refptr<base::SingleThreadTaskRunner> input_task_runner)
|
| - : core_(new Core(caller_task_runner, input_task_runner)) {
|
| + scoped_refptr<base::SingleThreadTaskRunner> input_task_runner,
|
| + SessionController::Delegate* delegate)
|
| + : core_(new Core(caller_task_runner, input_task_runner, delegate)) {
|
| + core_->Start();
|
| }
|
|
|
| LocalInputMonitorLinux::~LocalInputMonitorLinux() {
|
| -}
|
| -
|
| -void LocalInputMonitorLinux::Start(
|
| - MouseMoveObserver* mouse_move_observer,
|
| - const base::Closure& disconnect_callback) {
|
| - core_->Start(mouse_move_observer, disconnect_callback);
|
| -}
|
| -
|
| -void LocalInputMonitorLinux::Stop() {
|
| core_->Stop();
|
| }
|
|
|
| LocalInputMonitorLinux::Core::Core(
|
| scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner,
|
| - scoped_refptr<base::SingleThreadTaskRunner> input_task_runner)
|
| + scoped_refptr<base::SingleThreadTaskRunner> input_task_runner,
|
| + SessionController::Delegate* delegate)
|
| : caller_task_runner_(caller_task_runner),
|
| input_task_runner_(input_task_runner),
|
| - mouse_move_observer_(NULL),
|
| + delegate_(delegate),
|
| alt_pressed_(false),
|
| ctrl_pressed_(false),
|
| display_(NULL),
|
| x_record_display_(NULL),
|
| x_record_context_(0) {
|
| DCHECK(caller_task_runner_->BelongsToCurrentThread());
|
| + DCHECK(delegate_);
|
|
|
| x_record_range_[0] = NULL;
|
| x_record_range_[1] = NULL;
|
| }
|
|
|
| -void LocalInputMonitorLinux::Core::Start(
|
| - MouseMoveObserver* mouse_move_observer,
|
| - const base::Closure& disconnect_callback) {
|
| +void LocalInputMonitorLinux::Core::Start() {
|
| DCHECK(caller_task_runner_->BelongsToCurrentThread());
|
| - DCHECK(disconnect_callback_.is_null());
|
| - DCHECK(!disconnect_callback.is_null());
|
| - DCHECK(!mouse_move_observer_);
|
| - DCHECK(mouse_move_observer);
|
|
|
| - disconnect_callback_ = disconnect_callback;
|
| - mouse_move_observer_ = mouse_move_observer;
|
| input_task_runner_->PostTask(FROM_HERE,
|
| base::Bind(&Core::StartOnInputThread, this));
|
| }
|
| @@ -168,15 +151,13 @@ void LocalInputMonitorLinux::Core::Start(
|
| void LocalInputMonitorLinux::Core::Stop() {
|
| DCHECK(caller_task_runner_->BelongsToCurrentThread());
|
|
|
| - disconnect_callback_.Reset();
|
| - mouse_move_observer_ = NULL;
|
| + delegate_ = NULL;
|
| input_task_runner_->PostTask(FROM_HERE,
|
| base::Bind(&Core::StopOnInputThread, this));
|
| }
|
|
|
| LocalInputMonitorLinux::Core::~Core() {
|
| - DCHECK(disconnect_callback_.is_null());
|
| - DCHECK(!mouse_move_observer_);
|
| + DCHECK(!delegate_);
|
| DCHECK(!display_);
|
| DCHECK(!x_record_display_);
|
| DCHECK(!x_record_range_[0]);
|
| @@ -310,8 +291,8 @@ void LocalInputMonitorLinux::Core::OnLocalMouseMoved(const SkIPoint& position) {
|
| return;
|
| }
|
|
|
| - if (mouse_move_observer_)
|
| - mouse_move_observer_->OnLocalMouseMoved(position);
|
| + if (delegate_)
|
| + delegate_->OnLocalMouseMoved(position);
|
| }
|
|
|
| void LocalInputMonitorLinux::Core::OnDisconnectShortcut() {
|
| @@ -321,8 +302,8 @@ void LocalInputMonitorLinux::Core::OnDisconnectShortcut() {
|
| return;
|
| }
|
|
|
| - if (!disconnect_callback_.is_null())
|
| - disconnect_callback_.Run();
|
| + if (delegate_)
|
| + delegate_->DisconnectSession();
|
| }
|
|
|
| void LocalInputMonitorLinux::Core::ProcessXEvent(xEvent* event) {
|
| @@ -361,9 +342,12 @@ void LocalInputMonitorLinux::Core::ProcessReply(XPointer self,
|
| scoped_ptr<LocalInputMonitor> LocalInputMonitor::Create(
|
| scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner,
|
| scoped_refptr<base::SingleThreadTaskRunner> input_task_runner,
|
| - scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner) {
|
| + scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner,
|
| + SessionController::Delegate* delegate) {
|
| return scoped_ptr<LocalInputMonitor>(
|
| - new LocalInputMonitorLinux(caller_task_runner, input_task_runner));
|
| + new LocalInputMonitorLinux(caller_task_runner,
|
| + input_task_runner,
|
| + delegate));
|
| }
|
|
|
| } // namespace remoting
|
|
|