diff options
Diffstat (limited to 'third_party')
-rw-r--r-- | third_party/mozilla/ComplexTextInputPanel.h | 49 | ||||
-rw-r--r-- | third_party/mozilla/ComplexTextInputPanel.mm | 143 | ||||
-rw-r--r-- | third_party/mozilla/README.chromium | 11 |
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. + |