applying Andrew's patch, closes #13440, fine now that we have raised the minimum deployment to 10.5
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70763 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -137,13 +137,90 @@ NSRect wxOSXGetFrameForControl( wxWindowMac* window , const wxPoint& pos , const
|
|||||||
- (void)setImagePosition:(NSCellImagePosition)aPosition;
|
- (void)setImagePosition:(NSCellImagePosition)aPosition;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
// in case we want to use the native tooltip callbacks
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
|
||||||
|
@interface NSView(wxToolTip)
|
||||||
|
- (NSString *)view:(NSView *)view stringForToolTip:(NSToolTipTag)tag point:(NSPoint)point userData:(void *)userData;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation NSView(wxToolTip)
|
||||||
|
|
||||||
|
- (NSString *)view:(NSView *)view stringForToolTip:(NSToolTipTag)tag point:(NSPoint)point userData:(void *)userData {
|
||||||
|
wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( view );
|
||||||
|
if (impl == NULL)
|
||||||
|
return nil;
|
||||||
|
|
||||||
|
return @"Tag";
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// The following code is a combination of the code listed here:
|
||||||
|
// http://lists.apple.com/archives/cocoa-dev/2008/Apr/msg01582.html
|
||||||
|
// (which can't be used because KLGetCurrentKeyboardLayout etc aren't 64-bit)
|
||||||
|
// and the code here:
|
||||||
|
// http://inquisitivecocoa.com/category/objective-c/
|
||||||
|
@interface NSEvent (OsGuiUtilsAdditions)
|
||||||
|
- (NSString*) charactersIgnoringModifiersIncludingShift;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation NSEvent (OsGuiUtilsAdditions)
|
||||||
|
- (NSString*) charactersIgnoringModifiersIncludingShift {
|
||||||
|
// First try -charactersIgnoringModifiers and look for keys which UCKeyTranslate translates
|
||||||
|
// differently than AppKit.
|
||||||
|
NSString* c = [self charactersIgnoringModifiers];
|
||||||
|
if ([c length] == 1) {
|
||||||
|
unichar codepoint = [c characterAtIndex:0];
|
||||||
|
if ((codepoint >= 0xF700 && codepoint <= 0xF8FF) || codepoint == 0x7F) {
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// This is not a "special" key, so ask UCKeyTranslate to give us the character with no
|
||||||
|
// modifiers attached. Actually, that's not quite accurate; we attach the Command modifier
|
||||||
|
// which hints the OS to use Latin characters where possible, which is generally what we want.
|
||||||
|
NSString* result = @"";
|
||||||
|
TISInputSourceRef currentKeyboard = TISCopyCurrentKeyboardInputSource();
|
||||||
|
CFDataRef uchr = (CFDataRef)TISGetInputSourceProperty(currentKeyboard, kTISPropertyUnicodeKeyLayoutData);
|
||||||
|
CFRelease(currentKeyboard);
|
||||||
|
if (uchr == NULL) {
|
||||||
|
// this can happen for some non-U.S. input methods (eg. Romaji or Hiragana)
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
const UCKeyboardLayout *keyboardLayout = (const UCKeyboardLayout*)CFDataGetBytePtr(uchr);
|
||||||
|
if (keyboardLayout) {
|
||||||
|
UInt32 deadKeyState = 0;
|
||||||
|
UniCharCount maxStringLength = 255;
|
||||||
|
UniCharCount actualStringLength = 0;
|
||||||
|
UniChar unicodeString[maxStringLength];
|
||||||
|
|
||||||
|
OSStatus status = UCKeyTranslate(keyboardLayout,
|
||||||
|
[self keyCode],
|
||||||
|
kUCKeyActionDown,
|
||||||
|
cmdKey >> 8, // force the Command key to "on"
|
||||||
|
LMGetKbdType(),
|
||||||
|
kUCKeyTranslateNoDeadKeysMask,
|
||||||
|
&deadKeyState,
|
||||||
|
maxStringLength,
|
||||||
|
&actualStringLength,
|
||||||
|
unicodeString);
|
||||||
|
|
||||||
|
if(status == noErr)
|
||||||
|
result = [NSString stringWithCharacters:unicodeString length:(NSInteger)actualStringLength];
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
long wxOSXTranslateCocoaKey( NSEvent* event, int eventType )
|
long wxOSXTranslateCocoaKey( NSEvent* event, int eventType )
|
||||||
{
|
{
|
||||||
long retval = 0;
|
long retval = 0;
|
||||||
|
|
||||||
if ([event type] != NSFlagsChanged)
|
if ([event type] != NSFlagsChanged)
|
||||||
{
|
{
|
||||||
NSString* s = [event charactersIgnoringModifiers];
|
NSString* s = [event charactersIgnoringModifiersIncludingShift];
|
||||||
// backspace char reports as delete w/modifiers for some reason
|
// backspace char reports as delete w/modifiers for some reason
|
||||||
if ([s length] == 1)
|
if ([s length] == 1)
|
||||||
{
|
{
|
||||||
@@ -319,7 +396,7 @@ void wxWidgetCocoaImpl::SetupKeyEvent(wxKeyEvent &wxevent , NSEvent * nsEvent, N
|
|||||||
wxString chars;
|
wxString chars;
|
||||||
if ( eventType != NSFlagsChanged )
|
if ( eventType != NSFlagsChanged )
|
||||||
{
|
{
|
||||||
NSString* nschars = [[nsEvent charactersIgnoringModifiers] uppercaseString];
|
NSString* nschars = [[nsEvent charactersIgnoringModifiersIncludingShift] uppercaseString];
|
||||||
if ( charString )
|
if ( charString )
|
||||||
{
|
{
|
||||||
// if charString is set, it did not come from key up / key down
|
// if charString is set, it did not come from key up / key down
|
||||||
@@ -2261,15 +2338,31 @@ void wxWidgetCocoaImpl::SetFont(wxFont const& font, wxColour const&col, long, bo
|
|||||||
alpha:(CGFloat) (col.Alpha() / 255.0)]];
|
alpha:(CGFloat) (col.Alpha() / 255.0)]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NSToolTipTag tt = 0;
|
||||||
|
|
||||||
void wxWidgetCocoaImpl::SetToolTip(wxToolTip* tooltip)
|
void wxWidgetCocoaImpl::SetToolTip(wxToolTip* tooltip)
|
||||||
{
|
{
|
||||||
if (tooltip)
|
if (tooltip)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
if ( tt != 0 )
|
||||||
|
{
|
||||||
|
[m_osxView removeToolTip:tt];
|
||||||
|
tt = 0;
|
||||||
|
}
|
||||||
|
*/
|
||||||
wxCFStringRef cf( tooltip->GetTip() , m_wxPeer->GetFont().GetEncoding() );
|
wxCFStringRef cf( tooltip->GetTip() , m_wxPeer->GetFont().GetEncoding() );
|
||||||
[m_osxView setToolTip: cf.AsNSString()];
|
[m_osxView setToolTip: cf.AsNSString()];
|
||||||
|
// tt = [m_osxView addToolTipRect:[m_osxView bounds] owner:m_osxView userData:nil];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
[m_osxView setToolTip: nil];
|
{
|
||||||
|
if ( tt != 0 )
|
||||||
|
{
|
||||||
|
[m_osxView removeToolTip:tt];
|
||||||
|
tt = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user