Index: chrome/browser/extensions/global_shortcut_listener_x11.cc |
diff --git a/chrome/browser/extensions/global_shortcut_listener_x11.cc b/chrome/browser/extensions/global_shortcut_listener_x11.cc |
index b0b73ccce57930fc47a34616e576bac94813e860..efa6224d63b7c0b5e22faad4096b37a5d48d972b 100644 |
--- a/chrome/browser/extensions/global_shortcut_listener_x11.cc |
+++ b/chrome/browser/extensions/global_shortcut_listener_x11.cc |
@@ -20,9 +20,6 @@ using content::BrowserThread; |
namespace { |
-static base::LazyInstance<extensions::GlobalShortcutListenerX11> instance = |
- LAZY_INSTANCE_INITIALIZER; |
- |
// The modifiers masks used for grabing keys. Due to XGrabKey only working on |
// exact modifiers, we need to grab all key combination including zero or more |
// of the following: Num lock, Caps lock and Scroll lock. So that we can make |
@@ -54,7 +51,9 @@ namespace extensions { |
// static |
GlobalShortcutListener* GlobalShortcutListener::GetInstance() { |
CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- return instance.Pointer(); |
+ static GlobalShortcutListenerX11 *instance = |
+ new GlobalShortcutListenerX11(); |
+ return instance; |
} |
GlobalShortcutListenerX11::GlobalShortcutListenerX11() |
@@ -107,18 +106,13 @@ bool GlobalShortcutListenerX11::Dispatch(const base::NativeEvent& event) { |
return true; |
} |
-void GlobalShortcutListenerX11::RegisterAccelerator( |
- const ui::Accelerator& accelerator, |
- GlobalShortcutListener::Observer* observer) { |
- if (registered_hot_keys_.find(accelerator) != registered_hot_keys_.end()) { |
- // The shortcut has already been registered. Some shortcuts, such as |
- // MediaKeys can have multiple targets, all keyed off of the same |
- // accelerator. |
- return; |
- } |
+bool GlobalShortcutListenerX11::RegisterAcceleratorImpl( |
+ const ui::Accelerator& accelerator) { |
+ DCHECK(registered_hot_keys_.find(accelerator) == registered_hot_keys_.end()); |
int modifiers = GetNativeModifiers(accelerator); |
- KeyCode keycode = XKeysymToKeycode(x_display_, accelerator.key_code()); |
+ KeyCode keycode = XKeysymToKeycode(x_display_, |
+ XKeysymForWindowsKeyCode(accelerator.key_code(), false)); |
base::X11ErrorTracker err_tracker; |
// Because XGrabKey only works on the exact modifiers mask, we should register |
@@ -138,27 +132,27 @@ void GlobalShortcutListenerX11::RegisterAccelerator( |
XUngrabKey(x_display_, keycode, modifiers | kModifiersMasks[i], |
x_root_window_); |
} |
- } else { |
- registered_hot_keys_.insert(accelerator); |
- GlobalShortcutListener::RegisterAccelerator(accelerator, observer); |
+ |
+ return false; |
} |
+ |
+ registered_hot_keys_.insert(accelerator); |
+ return true; |
} |
-void GlobalShortcutListenerX11::UnregisterAccelerator( |
- const ui::Accelerator& accelerator, |
- GlobalShortcutListener::Observer* observer) { |
- if (registered_hot_keys_.find(accelerator) == registered_hot_keys_.end()) |
- return; |
+void GlobalShortcutListenerX11::UnregisterAcceleratorImpl( |
+ const ui::Accelerator& accelerator) { |
+ DCHECK(registered_hot_keys_.find(accelerator) != registered_hot_keys_.end()); |
int modifiers = GetNativeModifiers(accelerator); |
- KeyCode keycode = XKeysymToKeycode(x_display_, accelerator.key_code()); |
+ KeyCode keycode = XKeysymToKeycode(x_display_, |
+ XKeysymForWindowsKeyCode(accelerator.key_code(), false)); |
for (size_t i = 0; i < arraysize(kModifiersMasks); ++i) { |
XUngrabKey(x_display_, keycode, modifiers | kModifiersMasks[i], |
x_root_window_); |
} |
registered_hot_keys_.erase(accelerator); |
- GlobalShortcutListener::UnregisterAccelerator(accelerator, observer); |
} |
#if defined(TOOLKIT_GTK) |
@@ -182,7 +176,7 @@ void GlobalShortcutListenerX11::OnXKeyPressEvent(::XEvent* x_event) { |
ui::Accelerator accelerator( |
ui::KeyboardCodeFromXKeyEvent(x_event), modifiers); |
if (registered_hot_keys_.find(accelerator) != registered_hot_keys_.end()) |
- instance.Get().NotifyKeyPressed(accelerator); |
+ NotifyKeyPressed(accelerator); |
} |
} // namespace extensions |