first attempt at adding the minimal set needed for dead-key support, see #15345

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74613 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Csomor
2013-07-28 17:36:23 +00:00
parent f7105c8fe2
commit a672d82a64

View File

@@ -109,6 +109,22 @@ NSRect wxOSXGetFrameForControl( wxWindowMac* window , const wxPoint& pos , const
@end // wxNSView
@interface wxNSView(TextInput) <NSTextInputClient>
- (void)insertText:(id)aString replacementRange:(NSRange)replacementRange;
- (void)doCommandBySelector:(SEL)aSelector;
- (void)setMarkedText:(id)aString selectedRange:(NSRange)selectedRange replacementRange:(NSRange)replacementRange;
- (void)unmarkText;
- (NSRange)selectedRange;
- (NSRange)markedRange;
- (BOOL)hasMarkedText;
- (NSAttributedString *)attributedSubstringForProposedRange:(NSRange)aRange actualRange:(NSRangePointer)actualRange;
- (NSArray*)validAttributesForMarkedText;
- (NSRect)firstRectForCharacterRange:(NSRange)aRange actualRange:(NSRangePointer)actualRange;
- (NSUInteger)characterIndexForPoint:(NSPoint)aPoint;
@end
@interface NSView(PossibleMethods)
- (void)setTitle:(NSString *)aString;
- (void)setStringValue:(NSString *)aString;
@@ -836,6 +852,71 @@ void wxWidgetCocoaImpl::SetupMouseEvent( wxMouseEvent &wxevent , NSEvent * nsEve
@end // wxNSView
// We need to adopt NSTextInputClient protocol in order to interpretKeyEvents: to work.
// Currently, only insertText:(replacementRange:) is
// implemented here, and the rest of the methods are stubs.
// It is hoped that someday IME-related functionality is implemented in
// wxWidgets and the methods of this protocol are fully working.
@implementation wxNSView(TextInput)
void wxOSX_insertText(NSView* self, SEL _cmd, NSString* text);
- (void)insertText:(id)aString replacementRange:(NSRange)replacementRange
{
wxOSX_insertText(self, @selector(insertText:), aString);
}
- (void)doCommandBySelector:(SEL)aSelector
{
// these are already caught in the keyEvent handler
}
- (void)setMarkedText:(id)aString selectedRange:(NSRange)selectedRange replacementRange:(NSRange)replacementRange
{
}
- (void)unmarkText
{
}
- (NSRange)selectedRange
{
return NSMakeRange(NSNotFound, 0);
}
- (NSRange)markedRange
{
return NSMakeRange(NSNotFound, 0);
}
- (BOOL)hasMarkedText
{
return NO;
}
- (NSAttributedString *)attributedSubstringForProposedRange:(NSRange)aRange actualRange:(NSRangePointer)actualRange
{
return nil;
}
- (NSArray*)validAttributesForMarkedText
{
return nil;
}
- (NSRect)firstRectForCharacterRange:(NSRange)aRange actualRange:(NSRangePointer)actualRange
{
return NSMakeRect(0, 0, 0, 0);
}
- (NSUInteger)characterIndexForPoint:(NSPoint)aPoint
{
return NSNotFound;
}
@end // wxNSView(TextInput)
//
// event handlers
//
@@ -2554,10 +2635,18 @@ void wxWidgetCocoaImpl::InstallEventHandler( WXWidget control )
bool wxWidgetCocoaImpl::DoHandleCharEvent(NSEvent *event, NSString *text)
{
wxKeyEvent wxevent(wxEVT_CHAR);
SetupKeyEvent( wxevent, event, text );
bool result = false;
for (NSUInteger i = 0; i < [text length]; ++i)
{
wxKeyEvent wxevent(wxEVT_CHAR);
unichar c = [text characterAtIndex:i];
SetupKeyEvent( wxevent, event, [NSString stringWithCharacters:&c length:1]);
return GetWXPeer()->OSXHandleKeyEvent(wxevent);
result = GetWXPeer()->OSXHandleKeyEvent(wxevent) || result;
}
return result;
}
bool wxWidgetCocoaImpl::DoHandleKeyEvent(NSEvent *event)