summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordavej@chromium.org <davej@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-03 23:51:29 +0000
committerdavej@chromium.org <davej@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-03 23:51:29 +0000
commit606bceeacfe23f9b0eecccd5f9b5f018830976b9 (patch)
tree986b793013f36c2b32daa6de7462ac3a99d031a0
parent7127ee880fa572a61d67d548bd9e30b0eb74f0b1 (diff)
downloadchromium_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.cc26
-rw-r--r--chrome/browser/chromeos/system_key_event_listener.h10
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.