Home | History | Annotate | Download | only in cocoa
      1 // Copyright 2014 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 CONTENT_BROWSER_COCOA_SYSTEM_HOTKEY_MAP_H_
      6 #define CONTENT_BROWSER_COCOA_SYSTEM_HOTKEY_MAP_H_
      7 
      8 #import <Cocoa/Cocoa.h>
      9 #include <vector>
     10 
     11 #include "base/gtest_prod_util.h"
     12 #include "base/macros.h"
     13 #include "content/common/content_export.h"
     14 
     15 namespace content {
     16 
     17 struct SystemHotkey;
     18 
     19 // Maintains a listing of all OSX system hotkeys. e.g. (cmd + `) These hotkeys
     20 // should have higher priority than web content, so NSEvents that correspond to
     21 // a system hotkey should not be passed to the renderer.
     22 class CONTENT_EXPORT SystemHotkeyMap {
     23  public:
     24   SystemHotkeyMap();
     25   ~SystemHotkeyMap();
     26 
     27   // Converts the plist stored in |data| into an NSDictionary. Returns nil on
     28   // error.
     29   static NSDictionary* DictionaryFromData(NSData* data);
     30 
     31   // Parses the property list data commonly stored at
     32   // ~/Library/Preferences/com.apple.symbolichotkeys.plist
     33   // Returns false on encountering an irrecoverable error.
     34   // Can be called multiple times. Only the results from the most recent
     35   // invocation are stored.
     36   bool ParseDictionary(NSDictionary* dictionary);
     37 
     38   // Whether the event corresponds to a hotkey that has been reserved by the
     39   // system.
     40   bool IsEventReserved(NSEvent* event) const;
     41 
     42  private:
     43   FRIEND_TEST_ALL_PREFIXES(SystemHotkeyMapTest, Parse);
     44   FRIEND_TEST_ALL_PREFIXES(SystemHotkeyMapTest, ParseCustomEntries);
     45   FRIEND_TEST_ALL_PREFIXES(SystemHotkeyMapTest, ParseMouse);
     46 
     47   // Whether the hotkey has been reserved by the user.
     48   bool IsHotkeyReserved(unsigned short key_code, NSUInteger modifiers) const;
     49 
     50   // Create at least one record of a hotkey that is reserved by the user.
     51   // Certain system hotkeys automatically reserve multiple key combinations.
     52   void ReserveHotkey(unsigned short key_code,
     53                      NSUInteger modifiers,
     54                      NSString* system_effect);
     55 
     56   // Create a record of a hotkey that is reserved by the user.
     57   void ReserveHotkey(unsigned short key_code, NSUInteger modifiers);
     58 
     59   std::vector<SystemHotkey> system_hotkeys_;
     60 
     61   DISALLOW_COPY_AND_ASSIGN(SystemHotkeyMap);
     62 };
     63 
     64 }  // namespace content
     65 
     66 #endif  // CONTENT_BROWSER_COCOA_SYSTEM_HOTKEY_MAP_H_
     67