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

Unified Diff: remoting/client/plugin/mac_key_event_processor.cc

Issue 10387226: [chromoting] Fix sticky c key with cmd on mac using usb keycode (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 7 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/client/plugin/mac_key_event_processor.cc
diff --git a/remoting/client/plugin/mac_key_event_processor.cc b/remoting/client/plugin/mac_key_event_processor.cc
index ac82745cacd05fdf24d7cdd45cd4ef2cef6a8e62..ab8f17c8a60277f74a59478bf30d1ce76293f5f0 100644
--- a/remoting/client/plugin/mac_key_event_processor.cc
+++ b/remoting/client/plugin/mac_key_event_processor.cc
@@ -10,13 +10,15 @@ namespace remoting {
namespace {
-// A list of known keycodes.
-const int kShift = 16;
-const int kControl = 17;
-const int kOption = 18;
-const int kCapsLock = 20;
-const int kLeftCmd = 91;
-const int kRightCmd = 93;
+const unsigned int kUsbLeftControl = 0x0700e0;
+const unsigned int kUsbLeftShift = 0x0700e1;
+const unsigned int kUsbLeftOption = 0x0700e2;
+const unsigned int kUsbLeftCmd = 0x0700e3;
+const unsigned int kUsbRightControl = 0x0700e4;
+const unsigned int kUsbRightShift = 0x0700e5;
+const unsigned int kUsbRightOption = 0x0700e6;
+const unsigned int kUsbRightCmd = 0x0700e7;
+const unsigned int kUsbTab = 0x07002b;
} // namespace
@@ -28,19 +30,30 @@ MacKeyEventProcessor::~MacKeyEventProcessor() {
}
void MacKeyEventProcessor::InjectKeyEvent(const protocol::KeyEvent& event) {
Wez 2012/05/22 00:17:08 nit: DCHECK(event.has_usb_keycode());
- if (event.pressed()) {
- key_pressed_map_[event.keycode()] = event;
- } else {
- key_pressed_map_.erase(event.keycode());
- if (event.keycode() == kLeftCmd || event.keycode() == kRightCmd)
- GenerateKeyupEvents();
+ bool special_key = event.usb_keycode() == kUsbLeftControl ||
Wez 2012/05/22 00:17:08 nit: is_special_key
+ event.usb_keycode() == kUsbLeftShift ||
+ event.usb_keycode() == kUsbLeftOption ||
+ event.usb_keycode() == kUsbRightControl ||
+ event.usb_keycode() == kUsbRightShift ||
+ event.usb_keycode() == kUsbRightOption ||
+ event.usb_keycode() == kUsbTab;
+
+ bool cmd_key = event.usb_keycode() == kUsbLeftCmd ||
Wez 2012/05/22 00:17:08 nit: is_cmd_key
+ event.usb_keycode() == kUsbRightCmd;
+
+ if (!cmd_key && !special_key) {
+ if (event.pressed()) {
+ key_pressed_map_[event.usb_keycode()] = event;
+ } else {
+ key_pressed_map_.erase(event.usb_keycode());
+ }
}
- InputFilter::InjectKeyEvent(event);
-}
+ if (cmd_key && !event.pressed()) {
+ GenerateKeyupEvents();
+ }
-int MacKeyEventProcessor::NumberOfPressedKeys() const {
- return key_pressed_map_.size();
+ InputFilter::InjectKeyEvent(event);
}
void MacKeyEventProcessor::GenerateKeyupEvents() {
@@ -52,12 +65,6 @@ void MacKeyEventProcessor::GenerateKeyupEvents() {
i != key_pressed_map_.end(); ++i) {
const int keycode = i->first;
- if (keycode == kCapsLock || keycode == kOption ||
- keycode == kControl || keycode == kShift ||
- keycode == kLeftCmd || keycode == kRightCmd) {
- continue;
- }
-
keycodes.push_back(keycode);
protocol::KeyEvent event = i->second;
event.set_pressed(false);
« no previous file with comments | « remoting/client/plugin/mac_key_event_processor.h ('k') | remoting/client/plugin/mac_key_event_processor_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698