Home | History | Annotate | Download | only in chromeos
      1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_CHROMEOS_SYSTEM_KEY_EVENT_LISTENER_H_
      6 #define CHROME_BROWSER_CHROMEOS_SYSTEM_KEY_EVENT_LISTENER_H_
      7 #pragma once
      8 
      9 #include <gdk/gdk.h>
     10 
     11 #include "base/memory/singleton.h"
     12 #include "chrome/browser/chromeos/wm_message_listener.h"
     13 
     14 namespace chromeos {
     15 
     16 class AudioHandler;
     17 
     18 // SystemKeyEventListener listens for volume related key presses from GDK, then
     19 // tells the AudioHandler to adjust volume accordingly.  Start by just calling
     20 // instance() to get it going.
     21 
     22 // TODO(davej): Remove WmMessageListener::Observer once volume key handling has
     23 // been removed from the window manager since those keys take precedence.
     24 
     25 class SystemKeyEventListener : public WmMessageListener::Observer {
     26  public:
     27   static SystemKeyEventListener* GetInstance();
     28 
     29   // WmMessageListener::Observer:
     30   virtual void ProcessWmMessage(const WmIpc::Message& message,
     31                                 GdkWindow* window);
     32 
     33   void Stop();
     34 
     35  private:
     36   // Defines the delete on exit Singleton traits we like.  Best to have this
     37   // and const/dest private as recommended for Singletons.
     38   friend struct DefaultSingletonTraits<SystemKeyEventListener>;
     39 
     40   SystemKeyEventListener();
     41   virtual ~SystemKeyEventListener();
     42 
     43   // This event filter intercepts events before they reach GDK, allowing us to
     44   // check for system level keyboard events regardless of which window has
     45   // focus.
     46   static GdkFilterReturn GdkEventFilter(GdkXEvent* gxevent,
     47                                         GdkEvent* gevent,
     48                                         gpointer data);
     49 
     50   // Tell X we are interested in the specified key/mask combination.
     51   // Capslock and Numlock are always ignored.
     52   void GrabKey(int32 key, uint32 mask);
     53 
     54   void OnVolumeMute();
     55   void OnVolumeDown();
     56   void OnVolumeUp();
     57 
     58   int32 key_volume_mute_;
     59   int32 key_volume_down_;
     60   int32 key_volume_up_;
     61   int32 key_f8_;
     62   int32 key_f9_;
     63   int32 key_f10_;
     64 
     65   bool stopped_;
     66 
     67   // AudioHandler is a Singleton class we are just caching a pointer to here,
     68   // and we do not own the pointer.
     69   AudioHandler* const audio_handler_;
     70 
     71   DISALLOW_COPY_AND_ASSIGN(SystemKeyEventListener);
     72 };
     73 
     74 }  // namespace chromeos
     75 
     76 #endif  // CHROME_BROWSER_CHROMEOS_SYSTEM_KEY_EVENT_LISTENER_H_
     77 
     78