diff options
author | davej@chromium.org <davej@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-03 23:51:29 +0000 |
---|---|---|
committer | davej@chromium.org <davej@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-03 23:51:29 +0000 |
commit | 606bceeacfe23f9b0eecccd5f9b5f018830976b9 (patch) | |
tree | 986b793013f36c2b32daa6de7462ac3a99d031a0 | |
parent | 7127ee880fa572a61d67d548bd9e30b0eb74f0b1 (diff) | |
download | chromium_src-606bceeacfe23f9b0eecccd5f9b5f018830976b9.zip chromium_src-606bceeacfe23f9b0eecccd5f9b5f018830976b9.tar.gz chromium_src-606bceeacfe23f9b0eecccd5f9b5f018830976b9.tar.bz2 |
Handle volume keys within Chrome (restore WM key handling)
Until volume key grabbing is removed from window manager, Chrome needs to keep responding to the key messages from window manager. This patch puts that functionality back in until this is done.
BUG=chromium-os:6074, chromium-os:8635
TEST=Volume Up/Down and Mute keys should work when screen is locked and when logged in normally.
Review URL: http://codereview.chromium.org/4420001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@64994 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/chromeos/system_key_event_listener.cc | 26 | ||||
-rw-r--r-- | chrome/browser/chromeos/system_key_event_listener.h | 10 |
2 files changed, 35 insertions, 1 deletions
diff --git a/chrome/browser/chromeos/system_key_event_listener.cc b/chrome/browser/chromeos/system_key_event_listener.cc index f6baaf7..999f5bb 100644 --- a/chrome/browser/chromeos/system_key_event_listener.cc +++ b/chrome/browser/chromeos/system_key_event_listener.cc @@ -9,6 +9,7 @@ #include "chrome/browser/chromeos/audio_handler.h" #include "chrome/browser/chromeos/volume_bubble.h" +#include "cros/chromeos_wm_ipc_enums.h" namespace chromeos { @@ -25,6 +26,8 @@ SystemKeyEventListener* SystemKeyEventListener::instance() { SystemKeyEventListener::SystemKeyEventListener() : audio_handler_(AudioHandler::instance()) { + WmMessageListener::instance()->AddObserver(this); + key_volume_mute_ = XKeysymToKeycode(GDK_DISPLAY(), XF86XK_AudioMute); key_volume_down_ = XKeysymToKeycode(GDK_DISPLAY(), XF86XK_AudioLowerVolume); key_volume_up_ = XKeysymToKeycode(GDK_DISPLAY(), XF86XK_AudioRaiseVolume); @@ -45,9 +48,32 @@ SystemKeyEventListener::SystemKeyEventListener() } SystemKeyEventListener::~SystemKeyEventListener() { + WmMessageListener::instance()->RemoveObserver(this); gdk_window_remove_filter(NULL, GdkEventFilter, this); } +void SystemKeyEventListener::ProcessWmMessage(const WmIpc::Message& message, + GdkWindow* window) { + if (message.type() != WM_IPC_MESSAGE_CHROME_NOTIFY_SYSKEY_PRESSED) + return; + + switch (message.param(0)) { + case WM_IPC_SYSTEM_KEY_VOLUME_MUTE: + OnVolumeMute(); + break; + case WM_IPC_SYSTEM_KEY_VOLUME_DOWN: + OnVolumeDown(); + break; + case WM_IPC_SYSTEM_KEY_VOLUME_UP: + OnVolumeUp(); + break; + default: + DLOG(ERROR) << "SystemKeyEventListener: Unexpected message " + << message.param(0) + << " received"; + } +} + // static GdkFilterReturn SystemKeyEventListener::GdkEventFilter(GdkXEvent* gxevent, GdkEvent* gevent, diff --git a/chrome/browser/chromeos/system_key_event_listener.h b/chrome/browser/chromeos/system_key_event_listener.h index fac1665..61a20ca 100644 --- a/chrome/browser/chromeos/system_key_event_listener.h +++ b/chrome/browser/chromeos/system_key_event_listener.h @@ -9,6 +9,7 @@ #include <gdk/gdk.h> #include "base/singleton.h" +#include "chrome/browser/chromeos/wm_message_listener.h" namespace chromeos { @@ -18,10 +19,17 @@ class AudioHandler; // tells the AudioHandler to adjust volume accordingly. Start by just calling // instance() to get it going. -class SystemKeyEventListener { +// TODO(davej): Remove WmMessageListener::Observer once volume key handling has +// been removed from the window manager since those keys take precedence. + +class SystemKeyEventListener : public WmMessageListener::Observer { public: static SystemKeyEventListener* instance(); + // WmMessageListener::Observer: + virtual void ProcessWmMessage(const WmIpc::Message& message, + GdkWindow* window); + private: // Defines the delete on exit Singleton traits we like. Best to have this // and const/dest private as recommended for Singletons. |