Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4823)

Unified Diff: chrome/browser/ui/cocoa/extensions/extension_keybinding_registry_cocoa.h

Issue 10824307: Port Extension Commands to Mac. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/cocoa/extensions/extension_keybinding_registry_cocoa.h
===================================================================
--- chrome/browser/ui/cocoa/extensions/extension_keybinding_registry_cocoa.h (revision 0)
+++ chrome/browser/ui/cocoa/extensions/extension_keybinding_registry_cocoa.h (revision 0)
@@ -0,0 +1,88 @@
+// Copyright (c) 2012 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.
+
+#ifndef CHROME_BROWSER_UI_COCOA_EXTENSIONS_EXTENSION_KEYBINDING_REGISTRY_COCOA_H_
+#define CHROME_BROWSER_UI_COCOA_EXTENSIONS_EXTENSION_KEYBINDING_REGISTRY_COCOA_H_
+
+#include <map>
+#include <string>
+#include <utility>
+
+#include "chrome/browser/extensions/extension_keybinding_registry.h"
+#include "ui/base/accelerators/accelerator.h"
+#include "ui/gfx/native_widget_types.h"
+
+class Profile;
+
+namespace content {
+ struct NativeWebKeyboardEvent;
+}
+namespace extensions {
+ class Extension;
+}
+
+// The ExtensionKeybindingRegistryCocoa is the Cocoa specialization of the
+// ExtensionKeybindingRegistry class that handles turning keyboard shortcuts
+// into events that get sent to the extension.
+
+// ExtensionKeybindingRegistryCocoa is a class that handles Cocoa-specific
+// implemenation of the Extension Commands shortcuts (keyboard accelerators).
+// It also routes the events to the intended recipient (ie. to the browser
+// action button in case of browser action commands).
+class ExtensionKeybindingRegistryCocoa
+ : public extensions::ExtensionKeybindingRegistry {
+ public:
+ ExtensionKeybindingRegistryCocoa(Profile* profile, gfx::NativeWindow window);
+ virtual ~ExtensionKeybindingRegistryCocoa();
+
+ static void set_shortcut_handling_suspended(bool suspended) {
+ shortcut_handling_suspended_ = suspended;
+ }
+ static bool shortcut_handling_suspended() {
+ return shortcut_handling_suspended_;
+ }
+
+ // For a given keyboard |event|, see if a known Extension Command registration
+ // exists and route the event to it. Returns true if the event was handled,
+ // false otherwise.
+ bool ProcessKeyEvent(const content::NativeWebKeyboardEvent& event);
+
+ protected:
+ // Overridden from ExtensionKeybindingRegistry:
+ virtual void AddExtensionKeybinding(
+ const extensions::Extension* extension,
+ const std::string& command_name) OVERRIDE;
+ virtual void RemoveExtensionKeybinding(
+ const extensions::Extension* extension,
+ const std::string& command_name) OVERRIDE;
+
+ private:
+ // Keeps track of whether shortcut handling is currently suspended. Shortcuts
+ // are suspended briefly while capturing which shortcut to assign to an
+ // extension command in the Config UI. If handling isn't suspended while
+ // capturing then trying to assign Ctrl+F to a command would instead result
+ // in the Find box opening.
+ static bool shortcut_handling_suspended_;
+
+ // Weak pointer to the our profile. Not owned by us.
+ Profile* profile_;
+
+ // The window we are associated with.
+ gfx::NativeWindow window_;
+
+ // Maps an accelerator to a string pair (extension id, command name) for
+ // commands that have been registered. Unlike its Views counterpart, this map
+ // contains browserAction and pageAction commands (but does not route those
+ // events), so that we can query priority handlers in HasPriorityHandler(...).
+ typedef std::map< ui::Accelerator,
+ std::pair<std::string, std::string> > EventTargets;
+ EventTargets event_targets_;
+
+ // The content notification registrar for listening to extension events.
+ content::NotificationRegistrar registrar_;
+
+ DISALLOW_COPY_AND_ASSIGN(ExtensionKeybindingRegistryCocoa);
+};
+
+#endif // CHROME_BROWSER_UI_COCOA_EXTENSIONS_EXTENSION_KEYBINDING_REGISTRY_COCOA_H_

Powered by Google App Engine
This is Rietveld 408576698