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..dd997d8a70bd42ad5009fef4b8a676a08cc7badc 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_| |
Sergey Ulanov
2013/03/20 06:31:06
nit: missing |
alexeypa (please no reviews)
2013/03/20 17:05:29
Done.
|
+ // 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 |