зеркало из https://github.com/mozilla/gecko-dev.git
Bug 753256 Use [NSEvent modifierFlags] or convert the result of GetCurrentKeyModifiers() to cocoa flags at getting current modifier state r=smichaud
This commit is contained in:
Родитель
f036a5ce86
Коммит
7c56539c8f
|
@ -174,6 +174,7 @@ extern "C" long TSMProcessRawKeyEvent(EventRef carbonEvent);
|
|||
MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_6
|
||||
@interface NSEvent (SnowLeopardEventFeatures)
|
||||
+ (NSUInteger)pressedMouseButtons;
|
||||
+ (NSUInteger)modifierFlags;
|
||||
@end
|
||||
#endif
|
||||
|
||||
|
|
|
@ -220,6 +220,11 @@ class nsCocoaUtils
|
|||
NSEvent* aNativeEvent);
|
||||
static void InitInputEvent(nsInputEvent &aInputEvent,
|
||||
NSUInteger aModifiers);
|
||||
|
||||
/**
|
||||
* GetCurrentModifiers() returns Cocoa modifier flags for current state.
|
||||
*/
|
||||
static NSUInteger GetCurrentModifiers();
|
||||
};
|
||||
|
||||
#endif // nsCocoaUtils_h_
|
||||
|
|
|
@ -426,7 +426,7 @@ nsCocoaUtils::InitInputEvent(nsInputEvent &aInputEvent,
|
|||
NS_OBJC_BEGIN_TRY_ABORT_BLOCK;
|
||||
|
||||
NSUInteger modifiers =
|
||||
aNativeEvent ? [aNativeEvent modifierFlags] : ::GetCurrentKeyModifiers();
|
||||
aNativeEvent ? [aNativeEvent modifierFlags] : GetCurrentModifiers();
|
||||
InitInputEvent(aInputEvent, modifiers);
|
||||
|
||||
aInputEvent.time = PR_IntervalNow();
|
||||
|
@ -477,3 +477,42 @@ nsCocoaUtils::InitInputEvent(nsInputEvent &aInputEvent,
|
|||
// not by the flag.
|
||||
|
||||
}
|
||||
|
||||
// static
|
||||
NSUInteger
|
||||
nsCocoaUtils::GetCurrentModifiers()
|
||||
{
|
||||
// NOTE: [[NSApp currentEvent] modifiers] isn't useful because it sometime 0
|
||||
// and we cannot check if it's actual state.
|
||||
if (nsToolkit::OnSnowLeopardOrLater()) {
|
||||
// XXX [NSEvent modifierFlags] returns "current" modifier state, so,
|
||||
// it's not event-queue-synchronized. GetCurrentEventKeyModifiers()
|
||||
// might be better, but it's Carbon API, we shouldn't use it as far as
|
||||
// possible.
|
||||
return [NSEvent modifierFlags];
|
||||
}
|
||||
|
||||
// If [NSEvent modifierFlags] isn't available, use carbon API.
|
||||
// GetCurrentEventKeyModifiers() might be better?
|
||||
// It's event-queue-synchronized.
|
||||
UInt32 carbonModifiers = ::GetCurrentKeyModifiers();
|
||||
NSUInteger cocoaModifiers = 0;
|
||||
|
||||
if (carbonModifiers & alphaLock) {
|
||||
cocoaModifiers |= NSAlphaShiftKeyMask;
|
||||
}
|
||||
if (carbonModifiers & (controlKey | rightControlKey)) {
|
||||
cocoaModifiers |= NSControlKeyMask;
|
||||
}
|
||||
if (carbonModifiers & (optionKey | rightOptionKey)) {
|
||||
cocoaModifiers |= NSAlternateKeyMask;
|
||||
}
|
||||
if (carbonModifiers & (shiftKey | rightShiftKey)) {
|
||||
cocoaModifiers |= NSShiftKeyMask;
|
||||
}
|
||||
if (carbonModifiers & cmdKey) {
|
||||
cocoaModifiers |= NSCommandKeyMask;
|
||||
}
|
||||
|
||||
return cocoaModifiers;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче