summaryrefslogtreecommitdiffstats
path: root/third_party/mozilla
diff options
context:
space:
mode:
authorstuartmorgan@chromium.org <stuartmorgan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-15 23:31:55 +0000
committerstuartmorgan@chromium.org <stuartmorgan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-15 23:31:55 +0000
commit935d63deb04754a6c831c5a5edfef35f71c0b805 (patch)
tree9ebbc892c6bd4abb5496bf246d0677a1e7f3c571 /third_party/mozilla
parentdf39d8740b4de18d5a57ec3a9fc519d89b26b1cc (diff)
downloadchromium_src-935d63deb04754a6c831c5a5edfef35f71c0b805.zip
chromium_src-935d63deb04754a6c831c5a5edfef35f71c0b805.tar.gz
chromium_src-935d63deb04754a6c831c5a5edfef35f71c0b805.tar.bz2
Implement IME for Mac plugins using the Cocoa event model on 10.6
Based on the implementation of Gecko's Cocoa event model IME handling on 64-bit, but modified to fit Chrome's cross-process event handling. Because NSTextInputContext is 10.6+, 10.5 will need a cempletely different implementation. BUG=30905 TEST=Plugins implementing the updated NPAPI Cocoa IME spec should handle IME on 10.6. Review URL: http://codereview.chromium.org/3808001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@62820 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'third_party/mozilla')
-rw-r--r--third_party/mozilla/ComplexTextInputPanel.h49
-rw-r--r--third_party/mozilla/ComplexTextInputPanel.mm143
-rw-r--r--third_party/mozilla/README.chromium11
3 files changed, 203 insertions, 0 deletions
diff --git a/third_party/mozilla/ComplexTextInputPanel.h b/third_party/mozilla/ComplexTextInputPanel.h
new file mode 100644
index 0000000..598a2b8
--- /dev/null
+++ b/third_party/mozilla/ComplexTextInputPanel.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2009 Apple Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Modified by Josh Aas of Mozilla Corporation.
+ */
+
+#ifndef ComplexTextInputPanel_h_
+#define ComplexTextInputPanel_h_
+
+#import <Cocoa/Cocoa.h>
+
+#if MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_5
+@class NSTextInputContext;
+#endif
+
+@interface ComplexTextInputPanel : NSPanel {
+ NSTextView *mInputTextView;
+}
+
++ (ComplexTextInputPanel*)sharedComplexTextInputPanel;
+
+- (NSTextInputContext*)inputContext;
+- (BOOL)interpretKeyEvent:(NSEvent*)event string:(NSString**)string;
+- (void)cancelInput;
+
+@end
+
+#endif // ComplexTextInputPanel_h_
diff --git a/third_party/mozilla/ComplexTextInputPanel.mm b/third_party/mozilla/ComplexTextInputPanel.mm
new file mode 100644
index 0000000..638ed9d
--- /dev/null
+++ b/third_party/mozilla/ComplexTextInputPanel.mm
@@ -0,0 +1,143 @@
+/*
+ * Copyright (C) 2009 Apple Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Modified by Josh Aas of Mozilla Corporation.
+ */
+
+#import "ComplexTextInputPanel.h"
+
+#if MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_5
+@interface NSView (SnowLeopardMethods)
+- (NSTextInputContext *)inputContext;
+@end
+
+// This is actually an NSTextInputContext method, but we can't declare
+// that since the whole class is 10.6+.
+@interface NSObject (SnowLeopardMethods)
+- (BOOL)handleEvent:(NSEvent *)theEvent;
+@end
+
+static NSString* const NSTextInputContextKeyboardSelectionDidChangeNotification =
+ @"NSTextInputContextKeyboardSelectionDidChangeNotification";
+#endif
+
+#define kInputWindowHeight 20
+
+@implementation ComplexTextInputPanel
+
++ (ComplexTextInputPanel*)sharedComplexTextInputPanel
+{
+ static ComplexTextInputPanel *sComplexTextInputPanel;
+ if (!sComplexTextInputPanel)
+ sComplexTextInputPanel = [[ComplexTextInputPanel alloc] init];
+ return sComplexTextInputPanel;
+}
+
+- (id)init
+{
+ // In the original Apple code the style mask is given by a function which is not open source.
+ // What could possibly be worth hiding in that function, I do not know.
+ // Courtesy of gdb: stylemask: 011000011111, 0x61f
+ self = [super initWithContentRect:NSZeroRect styleMask:0x61f backing:NSBackingStoreBuffered defer:YES];
+ if (!self)
+ return nil;
+
+ // Set the frame size.
+ NSRect visibleFrame = [[NSScreen mainScreen] visibleFrame];
+ NSRect frame = NSMakeRect(visibleFrame.origin.x, visibleFrame.origin.y, visibleFrame.size.width, kInputWindowHeight);
+
+ [self setFrame:frame display:NO];
+
+ mInputTextView = [[NSTextView alloc] initWithFrame:[self.contentView frame]];
+ mInputTextView.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable | NSViewMaxXMargin | NSViewMinXMargin | NSViewMaxYMargin | NSViewMinYMargin;
+
+ NSScrollView* scrollView = [[NSScrollView alloc] initWithFrame:[self.contentView frame]];
+ scrollView.documentView = mInputTextView;
+ self.contentView = scrollView;
+ [scrollView release];
+
+ [self setFloatingPanel:YES];
+
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(keyboardInputSourceChanged:)
+ name:NSTextInputContextKeyboardSelectionDidChangeNotification
+ object:nil];
+
+ return self;
+}
+
+- (void)dealloc
+{
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
+
+ [mInputTextView release];
+
+ [super dealloc];
+}
+
+- (void)keyboardInputSourceChanged:(NSNotification *)notification
+{
+ [mInputTextView setString:@""];
+ [self orderOut:nil];
+}
+
+- (BOOL)interpretKeyEvent:(NSEvent*)event string:(NSString**)string
+{
+ BOOL hadMarkedText = [mInputTextView hasMarkedText];
+
+ *string = nil;
+
+ if (![[mInputTextView inputContext] handleEvent:event])
+ return NO;
+
+ if ([mInputTextView hasMarkedText]) {
+ // Don't show the input method window for dead keys
+ if ([[event characters] length] > 0)
+ [self orderFront:nil];
+
+ return YES;
+ } else {
+ [self orderOut:nil];
+
+ NSString *text = [[mInputTextView textStorage] string];
+ if ([text length] > 0)
+ *string = [[text copy] autorelease];
+ }
+
+ [mInputTextView setString:@""];
+ return hadMarkedText;
+}
+
+- (void)cancelInput
+{
+ [self orderOut:nil];
+ [mInputTextView setString:@""];
+}
+
+- (NSTextInputContext*)inputContext
+{
+ return [mInputTextView inputContext];
+}
+
+@end
diff --git a/third_party/mozilla/README.chromium b/third_party/mozilla/README.chromium
index fe93bb8..8c66389 100644
--- a/third_party/mozilla/README.chromium
+++ b/third_party/mozilla/README.chromium
@@ -20,3 +20,14 @@ Local modifications:
-[NSPasteboard getURLs:andTitles:] to determine whether or not filenames in
the drag should be converted to file URLs.
-[NSPasteboard htmlFromRtf] added to do rtf->html conversion.
+
+-----------------------------------------------------------------
+
+Also includes IME panel from Gecko, which is based on WebKit's implementation.
+Although it comes from Mozilla (http://mxr.mozilla.org), it uses the original
+WebKit license.
+
+Local modifitations:
+- Added a cancelInput method.
+- Add #ifdef'd definifitions of a few symbols to support 10.5 SDK.
+