diff options
author | jeremy@chromium.org <jeremy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-19 21:10:08 +0000 |
---|---|---|
committer | jeremy@chromium.org <jeremy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-19 21:10:08 +0000 |
commit | 578bba9eb889903735722645e56387cd1b9a87b9 (patch) | |
tree | b6ccdff95afab1930e1cbccadecf7a48e3bb8f1d /chrome/browser/cocoa/rwhvm_editcommand_helper.h | |
parent | ae0ba2c44fb60fc3abb3f36d0747dac6472e100d (diff) | |
download | chromium_src-578bba9eb889903735722645e56387cd1b9a87b9.zip chromium_src-578bba9eb889903735722645e56387cd1b9a87b9.tar.gz chromium_src-578bba9eb889903735722645e56387cd1b9a87b9.tar.bz2 |
This patch adds Cocoa editing selectors to the RenderViewWidgetHostMac class.
This makes us a better citizen in OSX text-editing land and is a first step in getting our text entry story to work more natively on OSX.
The selectors are added at runtime to the Cocoa class and invoking them causes the appropriate WebKit core command to be invoked on the currently focused WebFrame.
As a side-effect bug 10862 is fixed.
BUG=10862
TEST=Open a new tab and type some text into an input element, change to a Hebrew keyboard layout and hit command-a, all text should be selected.
Review URL: http://codereview.chromium.org/114070
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18853 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/cocoa/rwhvm_editcommand_helper.h')
-rw-r--r-- | chrome/browser/cocoa/rwhvm_editcommand_helper.h | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/chrome/browser/cocoa/rwhvm_editcommand_helper.h b/chrome/browser/cocoa/rwhvm_editcommand_helper.h new file mode 100644 index 0000000..aa948db --- /dev/null +++ b/chrome/browser/cocoa/rwhvm_editcommand_helper.h @@ -0,0 +1,65 @@ +// Copyright (c) 2009 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_COCOA_RWHVM_EDITCOMMAND_HELPER_H_ +#define CHROME_BROWSER_COCOA_RWHVM_EDITCOMMAND_HELPER_H_ + +#import <Cocoa/Cocoa.h> + +#include "base/hash_tables.h" +#include "base/logging.h" +#include "chrome/browser/renderer_host/render_widget_host_view_mac.h" +#include "testing/gtest/include/gtest/gtest_prod.h" + +// RenderWidgetHostViewMacEditCommandHelper is the real name of this class +// but that's too long, so we use a shorter version. +// +// This class mimics the behavior of WebKit's WebView class in a way that makes +// sense for Chrome. +// +// WebCore has the concept of "core commands", basically named actions such as +// "Select All" and "Move Cursor Left". The commands are executed using their +// string value by WebCore. +// +// This class is responsible for 2 things: +// 1. Provide an abstraction to determine the enabled/disabled state of menu +// items that correspond to edit commands. +// 2. Hook up a bunch of objc selectors to the RenderWidgetHostViewCocoa object. +// (note that this is not a misspelling of RenderWidgetHostViewMac, it's in +// fact a distinct object) When these selectors are called, the relevant +// edit command is executed in WebCore. +class RWHVMEditCommandHelper { + FRIEND_TEST(RWHVMEditCommandHelperTest, TestAddEditingSelectorsToClass); + FRIEND_TEST(RWHVMEditCommandHelperTest, TestEditingCommandDelivery); + + public: + RWHVMEditCommandHelper(); + + // Adds editing selectors to the objc class using the objc runtime APIs. + // Each selector is connected to a single c method which forwards the message + // to WebCore's ExecuteCoreCommand() function. + // This method is idempotent. + // The class passed in must conform to the RenderWidgetHostViewMacOwner + // protocol. + void AddEditingSelectorsToClass(Class klass); + + // Is a given menu item currently enabled? + // SEL - the objc selector currently associated with an NSMenuItem. + // owner - An object we can retrieve a RenderWidgetHostViewMac from to + // determine the command states. + bool IsMenuItemEnabled(SEL item_action, + id<RenderWidgetHostViewMacOwner> owner); + + protected: + // Gets a list of all the selectors that AddEditingSelectorsToClass adds to + // the aforementioned class. + // returns an array of NSStrings WITHOUT the trailing ':'s. + NSArray* GetEditSelectorNames(); + + private: + base::hash_set<std::string> edit_command_set_; + DISALLOW_COPY_AND_ASSIGN(RWHVMEditCommandHelper); +}; + +#endif // CHROME_BROWSER_COCOA_RWHVM_EDITCOMMAND_HELPER_H_ |