| Index: chrome/browser/chromeos/system_key_event_listener.cc
|
| diff --git a/chrome/browser/chromeos/system_key_event_listener.cc b/chrome/browser/chromeos/system_key_event_listener.cc
|
| index 5fa6a50513e7578e3c480655401b9e8487b74676..00991b819494c2590276f0539953536063883d2d 100644
|
| --- a/chrome/browser/chromeos/system_key_event_listener.cc
|
| +++ b/chrome/browser/chromeos/system_key_event_listener.cc
|
| @@ -1,4 +1,4 @@
|
| -// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| @@ -13,6 +13,10 @@
|
| #include "content/browser/user_metrics.h"
|
| #include "third_party/cros/chromeos_wm_ipc_enums.h"
|
|
|
| +#if defined(TOUCH_UI)
|
| +#include "base/message_pump_glib_x_dispatch.h"
|
| +#endif
|
| +
|
| namespace chromeos {
|
|
|
| namespace {
|
| @@ -47,7 +51,12 @@ SystemKeyEventListener::SystemKeyEventListener()
|
| GrabKey(key_f8_, 0);
|
| GrabKey(key_f9_, 0);
|
| GrabKey(key_f10_, 0);
|
| +
|
| +#if defined(TOUCH_UI)
|
| + MessageLoopForUI::current()->AddObserver(this);
|
| +#else
|
| gdk_window_add_filter(NULL, GdkEventFilter, this);
|
| +#endif
|
| }
|
|
|
| SystemKeyEventListener::~SystemKeyEventListener() {
|
| @@ -58,7 +67,11 @@ void SystemKeyEventListener::Stop() {
|
| if (stopped_)
|
| return;
|
| WmMessageListener::GetInstance()->RemoveObserver(this);
|
| +#if defined(TOUCH_UI)
|
| + MessageLoopForUI::current()->RemoveObserver(this);
|
| +#else
|
| gdk_window_remove_filter(NULL, GdkEventFilter, this);
|
| +#endif
|
| audio_handler_->Disconnect();
|
| stopped_ = true;
|
| }
|
| @@ -93,34 +106,8 @@ GdkFilterReturn SystemKeyEventListener::GdkEventFilter(GdkXEvent* gxevent,
|
| SystemKeyEventListener* listener = static_cast<SystemKeyEventListener*>(data);
|
| XEvent* xevent = static_cast<XEvent*>(gxevent);
|
|
|
| - if (xevent->type == KeyPress) {
|
| - int32 keycode = xevent->xkey.keycode;
|
| - if (keycode) {
|
| - // Only doing non-Alt/Shift/Ctrl modified keys
|
| - if (!(xevent->xkey.state & (Mod1Mask | ShiftMask | ControlMask))) {
|
| - if ((keycode == listener->key_f8_) ||
|
| - (keycode == listener->key_volume_mute_)) {
|
| - if (keycode == listener->key_f8_)
|
| - UserMetrics::RecordAction(UserMetricsAction("Accel_VolumeMute_F8"));
|
| - listener->OnVolumeMute();
|
| - return GDK_FILTER_REMOVE;
|
| - } else if ((keycode == listener->key_f9_) ||
|
| - keycode == listener->key_volume_down_) {
|
| - if (keycode == listener->key_f9_)
|
| - UserMetrics::RecordAction(UserMetricsAction("Accel_VolumeDown_F9"));
|
| - listener->OnVolumeDown();
|
| - return GDK_FILTER_REMOVE;
|
| - } else if ((keycode == listener->key_f10_) ||
|
| - (keycode == listener->key_volume_up_)) {
|
| - if (keycode == listener->key_f10_)
|
| - UserMetrics::RecordAction(UserMetricsAction("Accel_VolumeUp_F10"));
|
| - listener->OnVolumeUp();
|
| - return GDK_FILTER_REMOVE;
|
| - }
|
| - }
|
| - }
|
| - }
|
| - return GDK_FILTER_CONTINUE;
|
| + return listener->WillProcessXEvent(xevent) ? GDK_FILTER_REMOVE
|
| + : GDK_FILTER_CONTINUE;
|
| }
|
|
|
| void SystemKeyEventListener::GrabKey(int32 key, uint32 mask) {
|
| @@ -173,4 +160,35 @@ void SystemKeyEventListener::OnVolumeUp() {
|
| BrightnessBubble::GetInstance()->HideBubble();
|
| }
|
|
|
| +bool SystemKeyEventListener::WillProcessXEvent(XEvent* xevent) {
|
| + if (xevent->type == KeyPress) {
|
| + int32 keycode = xevent->xkey.keycode;
|
| + if (keycode) {
|
| + // Only doing non-Alt/Shift/Ctrl modified keys
|
| + if (!(xevent->xkey.state & (Mod1Mask | ShiftMask | ControlMask))) {
|
| + if ((keycode == key_f8_) ||
|
| + (keycode == key_volume_mute_)) {
|
| + if (keycode == key_f8_)
|
| + UserMetrics::RecordAction(UserMetricsAction("Accel_VolumeMute_F8"));
|
| + OnVolumeMute();
|
| + return true;
|
| + } else if ((keycode == key_f9_) ||
|
| + keycode == key_volume_down_) {
|
| + if (keycode == key_f9_)
|
| + UserMetrics::RecordAction(UserMetricsAction("Accel_VolumeDown_F9"));
|
| + OnVolumeDown();
|
| + return true;
|
| + } else if ((keycode == key_f10_) ||
|
| + (keycode == key_volume_up_)) {
|
| + if (keycode == key_f10_)
|
| + UserMetrics::RecordAction(UserMetricsAction("Accel_VolumeUp_F10"));
|
| + OnVolumeUp();
|
| + return true;
|
| + }
|
| + }
|
| + }
|
| + }
|
| + return false;
|
| +}
|
| +
|
| } // namespace chromeos
|
|
|