Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(318)

Unified Diff: remoting/host/event_executor_linux.cc

Issue 6780014: Clean up remoting project (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix a compile glitch on Windows Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: remoting/host/event_executor_linux.cc
diff --git a/remoting/host/event_executor_linux.cc b/remoting/host/event_executor_linux.cc
index e41f0bf72233a05a126e48e26dd0245515d59007..cfceadac2315e714b1b40b9a20bd2cdd9f27ea53 100644
--- a/remoting/host/event_executor_linux.cc
+++ b/remoting/host/event_executor_linux.cc
@@ -2,13 +2,14 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "remoting/host/event_executor_linux.h"
+#include "remoting/host/event_executor.h"
#include <X11/Xlib.h>
#include <X11/XF86keysym.h>
#include <X11/keysym.h>
#include <X11/extensions/XTest.h>
+#include "base/compiler_specific.h"
#include "base/logging.h"
#include "base/message_loop.h"
#include "base/task.h"
@@ -19,8 +20,35 @@ namespace remoting {
using protocol::MouseEvent;
using protocol::KeyEvent;
-static int MouseButtonToX11ButtonNumber(
- protocol::MouseEvent::MouseButton button) {
+namespace {
+
+// A class to generate events on Linux.
+class EventExecutorLinux : public EventExecutor {
+ public:
+ EventExecutorLinux(MessageLoopForUI* message_loop, Capturer* capturer);
+ virtual ~EventExecutorLinux() {};
+
+ virtual void InjectKeyEvent(const KeyEvent* event, Task* done) OVERRIDE;
+ virtual void InjectMouseEvent(const MouseEvent* event, Task* done) OVERRIDE;
+
+ private:
+ bool Init();
+ MessageLoopForUI* message_loop_;
+ Capturer* capturer_;
+
+ // X11 graphics context.
+ Display* display_;
+ Window root_window_;
+ int width_;
+ int height_;
+
+ int test_event_base_;
+ int test_error_base_;
+
+ DISALLOW_COPY_AND_ASSIGN(EventExecutorLinux);
+};
+
+int MouseButtonToX11ButtonNumber(MouseEvent::MouseButton button) {
switch (button) {
case MouseEvent::BUTTON_LEFT:
return 1;
@@ -196,7 +224,7 @@ const int kUsVkeyToKeysym[256] = {
/* VKEY_NONAME */ -1, /* VKEY_PA1 */ -1, /* VKEY_OEM_CLEAR */ -1, -1
};
-static int ChromotocolKeycodeToX11Keysym(int32_t keycode) {
+int ChromotocolKeycodeToX11Keysym(int32_t keycode) {
if (keycode < 0 || keycode > 255) {
return -1;
}
@@ -204,41 +232,18 @@ static int ChromotocolKeycodeToX11Keysym(int32_t keycode) {
return kUsVkeyToKeysym[keycode];
}
-class EventExecutorLinuxPimpl {
- public:
- explicit EventExecutorLinuxPimpl(EventExecutorLinux* executor,
- Display* display);
-
- bool Init(); // TODO(ajwong): Do we really want this to be synchronous?
-
- void HandleMouse(const MouseEvent* message);
- void HandleKey(const KeyEvent* key_event);
-
- private:
- // Reference to containing class so we can access friend functions.
- // Not owned.
- EventExecutorLinux* executor_;
-
- // X11 graphics context.
- Display* display_;
- Window root_window_;
- int width_;
- int height_;
-
- int test_event_base_;
- int test_error_base_;
-};
-
-EventExecutorLinuxPimpl::EventExecutorLinuxPimpl(EventExecutorLinux* executor,
- Display* display)
- : executor_(executor),
- display_(display),
+EventExecutorLinux::EventExecutorLinux(
+ MessageLoopForUI* message_loop, Capturer* capturer)
+ : message_loop_(message_loop),
+ capturer_(capturer),
+ display_(message_loop->GetDisplay()),
root_window_(BadValue),
width_(0),
height_(0) {
+ CHECK(Init());
}
-bool EventExecutorLinuxPimpl::Init() {
+bool EventExecutorLinux::Init() {
CHECK(display_);
root_window_ = RootWindow(display_, DefaultScreen(display_));
@@ -267,16 +272,22 @@ bool EventExecutorLinuxPimpl::Init() {
width_ = root_attr.width;
height_ = root_attr.height;
-
return true;
}
-void EventExecutorLinuxPimpl::HandleKey(const KeyEvent* key_event) {
+void EventExecutorLinux::InjectKeyEvent(const KeyEvent* event, Task* done) {
+ if (MessageLoop::current() != message_loop_) {
+ message_loop_->PostTask(
+ FROM_HERE,
+ NewRunnableMethod(this, &EventExecutorLinux::InjectKeyEvent,
+ event, done));
+ return;
+ }
// TODO(ajwong): This will only work for QWERTY keyboards.
- int keysym = ChromotocolKeycodeToX11Keysym(key_event->keycode());
+ int keysym = ChromotocolKeycodeToX11Keysym(event->keycode());
if (keysym == -1) {
- LOG(WARNING) << "Ignoring unknown key: " << key_event->keycode();
+ LOG(WARNING) << "Ignoring unknown key: " << event->keycode();
return;
}
@@ -284,17 +295,28 @@ void EventExecutorLinuxPimpl::HandleKey(const KeyEvent* key_event) {
int keycode = XKeysymToKeycode(display_, keysym);
if (keycode == 0) {
LOG(WARNING) << "Ignoring undefined keysym: " << keysym
- << " for key: " << key_event->keycode();
+ << " for key: " << event->keycode();
return;
}
- VLOG(3) << "Got pepper key: " << key_event->keycode()
+ VLOG(3) << "Got pepper key: " << event->keycode()
<< " sending keysym: " << keysym
<< " to keycode: " << keycode;
- XTestFakeKeyEvent(display_, keycode, key_event->pressed(), CurrentTime);
+ XTestFakeKeyEvent(display_, keycode, event->pressed(), CurrentTime);
+
+ done->Run();
+ delete done;
}
-void EventExecutorLinuxPimpl::HandleMouse(const MouseEvent* event) {
+void EventExecutorLinux::InjectMouseEvent(const MouseEvent* event,
+ Task* done) {
+ if (MessageLoop::current() != message_loop_) {
+ message_loop_->PostTask(
+ FROM_HERE,
+ NewRunnableMethod(this, &EventExecutorLinux::InjectMouseEvent,
+ event, done));
+ return;
+ }
if (event->has_x() && event->has_y()) {
if (event->x() < 0 || event->y() < 0 ||
event->x() > width_ || event->y() > height_) {
@@ -329,49 +351,19 @@ void EventExecutorLinuxPimpl::HandleMouse(const MouseEvent* event) {
if (event->has_wheel_offset_x() && event->has_wheel_offset_y()) {
NOTIMPLEMENTED() << "No scroll wheel support yet.";
}
-}
-
-EventExecutorLinux::EventExecutorLinux(
- MessageLoopForUI* message_loop, Capturer* capturer)
- : message_loop_(message_loop),
- capturer_(capturer),
- pimpl_(new EventExecutorLinuxPimpl(this, message_loop->GetDisplay())) {
- CHECK(pimpl_->Init());
-}
-
-EventExecutorLinux::~EventExecutorLinux() {
-}
-void EventExecutorLinux::InjectKeyEvent(const KeyEvent* event, Task* done) {
- if (MessageLoop::current() != message_loop_) {
- message_loop_->PostTask(
- FROM_HERE,
- NewRunnableMethod(this, &EventExecutorLinux::InjectKeyEvent,
- event, done));
- return;
- }
- pimpl_->HandleKey(event);
done->Run();
delete done;
}
-void EventExecutorLinux::InjectMouseEvent(const MouseEvent* event,
- Task* done) {
- if (MessageLoop::current() != message_loop_) {
- message_loop_->PostTask(
- FROM_HERE,
- NewRunnableMethod(this, &EventExecutorLinux::InjectMouseEvent,
- event, done));
- return;
- }
- pimpl_->HandleMouse(event);
- done->Run();
- delete done;
-}
+} // namespace
-protocol::InputStub* CreateEventExecutor(MessageLoopForUI* message_loop,
- Capturer* capturer) {
+EventExecutor* EventExecutor::Create(MessageLoopForUI* message_loop,
+ Capturer* capturer) {
return new EventExecutorLinux(message_loop, capturer);
}
} // namespace remoting
+
+DISABLE_RUNNABLE_METHOD_REFCOUNT(remoting::EventExecutorLinux);
Lambros 2011/04/01 15:54:00 Is this OK here? Do we know this object will outl
dmac 2011/04/01 21:15:07 This is how it was before. I just moved the macro.
+

Powered by Google App Engine
This is Rietveld 408576698