Revision: 14388
http://sourceforge.net/p/skim-app/code/14388
Author: hofman
Date: 2024-07-19 14:30:10 +0000 (Fri, 19 Jul 2024)
Log Message:
-----------
Use device independent modifiers instead of standad modifiers, filter out num
eric pad, function, and caps lock when needed
Modified Paths:
--------------
trunk/NSEvent_SKExtensions.h
trunk/NSEvent_SKExtensions.m
trunk/SKMainWindow.m
trunk/SKPDFView.m
trunk/SKSecondaryPDFView.m
trunk/SKSnapshotPDFView.m
trunk/SKTextNoteEditor.m
Modified: trunk/NSEvent_SKExtensions.h
===================================================================
--- trunk/NSEvent_SKExtensions.h 2024-07-18 22:50:01 UTC (rev 14387)
+++ trunk/NSEvent_SKExtensions.h 2024-07-19 14:30:10 UTC (rev 14388)
@@ -47,9 +47,7 @@
@interface NSEvent (SKExtensions)
-@property (class, nonatomic, readonly) NSUInteger standardModifierFlags;
@property (nonatomic, readonly) NSUInteger deviceIndependentModifierFlags;
-@property (nonatomic, readonly) NSUInteger standardModifierFlags;
@property (class, nonatomic) NSPointingDeviceType currentPointingDeviceType;
Modified: trunk/NSEvent_SKExtensions.m
===================================================================
--- trunk/NSEvent_SKExtensions.m 2024-07-18 22:50:01 UTC (rev 14387)
+++ trunk/NSEvent_SKExtensions.m 2024-07-19 14:30:10 UTC (rev 14388)
@@ -42,18 +42,10 @@
static NSPointingDeviceType currentPointingDeviceType =
NSPointingDeviceTypeUnknown;
-+ (NSUInteger)standardModifierFlags {
- return [self modifierFlags] &
NSEventModifierFlagDeviceIndependentFlagsMask & ~(NSEventModifierFlagNumericPad
| NSEventModifierFlagFunction);
-}
-
- (NSUInteger)deviceIndependentModifierFlags {
return [self modifierFlags] &
NSEventModifierFlagDeviceIndependentFlagsMask;
}
-- (NSUInteger)standardModifierFlags {
- return [self modifierFlags] &
NSEventModifierFlagDeviceIndependentFlagsMask & ~(NSEventModifierFlagNumericPad
| NSEventModifierFlagFunction);
-}
-
+ (NSPointingDeviceType)currentPointingDeviceType {
return currentPointingDeviceType;
}
Modified: trunk/SKMainWindow.m
===================================================================
--- trunk/SKMainWindow.m 2024-07-18 22:50:01 UTC (rev 14387)
+++ trunk/SKMainWindow.m 2024-07-19 14:30:10 UTC (rev 14388)
@@ -81,7 +81,7 @@
}
- (void)keyDown:(NSEvent *)event {
- if ([event standardModifierFlags] == (NSEventModifierFlagCommand |
NSEventModifierFlagOption)) {
+ if (([event deviceIndependentModifierFlags] &
~NSEventModifierFlagNumericPad) == (NSEventModifierFlagCommand |
NSEventModifierFlagOption)) {
unichar eventChar = [event firstCharacter];
if (eventChar >= '1' && eventChar <= '9') {
NSArray *windows = [self tabbedWindows];
Modified: trunk/SKPDFView.m
===================================================================
--- trunk/SKPDFView.m 2024-07-18 22:50:01 UTC (rev 14387)
+++ trunk/SKPDFView.m 2024-07-19 14:30:10 UTC (rev 14388)
@@ -1751,8 +1751,9 @@
- (void)keyDown:(NSEvent *)theEvent
{
unichar eventChar = [theEvent firstCharacter];
- NSUInteger modifiers = [theEvent standardModifierFlags];
-
+ NSUInteger modifiers = [theEvent deviceIndependentModifierFlags] &
~NSEventModifierFlagCapsLock;
+ NSUInteger standardModifiers = modifiers & ~NSEventModifierFlagNumericPad
& ~NSEventModifierFlagFunction;
+
if (pdfvFlags.presentationMode) {
// Presentation mode
if ([[self scrollView] hasHorizontalScroller] == NO &&
@@ -1759,7 +1760,7 @@
(eventChar == NSRightArrowFunctionKey) && (modifiers == 0)) {
[self goToNextPage:self];
} else if ([[self scrollView] hasHorizontalScroller] == NO &&
- (eventChar == NSLeftArrowFunctionKey) && (modifiers == 0))
{
+ (eventChar == NSLeftArrowFunctionKey) &&
(standardModifiers == 0)) {
[self goToPreviousPage:self];
} else if ((eventChar == 'p') && (modifiers == 0)) {
if ([[self delegate]
respondsToSelector:@selector(PDFViewTogglePages:)])
@@ -1790,32 +1791,32 @@
} else {
// Normal or fullscreen mode
if ((eventChar == NSDeleteCharacter || eventChar ==
NSDeleteFunctionKey) &&
- (modifiers == 0)) {
+ (standardModifiers == 0)) {
[self delete:self];
- } else if (([self toolMode] == SKToolModeText || [self toolMode] ==
SKToolModeNote) && currentAnnotation && editor == nil && IS_ENTER(eventChar) &&
(modifiers == 0)) {
+ } else if (([self toolMode] == SKToolModeText || [self toolMode] ==
SKToolModeNote) && currentAnnotation && editor == nil && IS_ENTER(eventChar) &&
(standardModifiers == 0)) {
[self editCurrentAnnotation:self];
} else if (([self toolMode] == SKToolModeText || [self toolMode] ==
SKToolModeNote) &&
- (eventChar == SKEscapeCharacter) && (modifiers ==
NSEventModifierFlagOption)) {
+ (eventChar == SKEscapeCharacter) && (standardModifiers ==
NSEventModifierFlagOption)) {
[self setCurrentAnnotation:nil];
} else if (([self toolMode] == SKToolModeText || [self toolMode] ==
SKToolModeNote) &&
- (eventChar == NSTabCharacter) && (modifiers ==
NSEventModifierFlagOption)) {
+ (eventChar == NSTabCharacter) && (standardModifiers ==
NSEventModifierFlagOption)) {
[self selectNextCurrentAnnotation:self];
// backtab is a bit inconsistent, it seems Shift+Tab gives a
Shift-BackTab key event, I would have expected either Shift-Tab (as for the raw
event) or BackTab (as for most shift-modified keys)
} else if (([self toolMode] == SKToolModeText || [self toolMode] ==
SKToolModeNote) &&
- (((eventChar == NSBackTabCharacter) && ((modifiers &
~NSEventModifierFlagShift) == NSEventModifierFlagOption)) ||
- ((eventChar == NSTabCharacter) && (modifiers ==
(NSEventModifierFlagOption | NSEventModifierFlagShift))))) {
+ (((eventChar == NSBackTabCharacter) && ((standardModifiers
& ~NSEventModifierFlagShift) == NSEventModifierFlagOption)) ||
+ ((eventChar == NSTabCharacter) && (standardModifiers ==
(NSEventModifierFlagOption | NSEventModifierFlagShift))))) {
[self selectPreviousCurrentAnnotation:self];
- } else if ([self hasReadingBar] && IS_ARROW(eventChar) && (modifiers
== moveReadingBarModifiers)) {
+ } else if ([self hasReadingBar] && IS_ARROW(eventChar) &&
(standardModifiers == moveReadingBarModifiers)) {
[self doMoveReadingBarForKey:eventChar];
- } else if ([self hasReadingBar] && IS_UP_DOWN_ARROW(eventChar) &&
(modifiers == resizeReadingBarModifiers)) {
+ } else if ([self hasReadingBar] && IS_UP_DOWN_ARROW(eventChar) &&
(standardModifiers == resizeReadingBarModifiers)) {
[self doResizeReadingBarForKey:eventChar];
- } else if (IS_LEFT_RIGHT_ARROW(eventChar) && (modifiers ==
(NSEventModifierFlagOption | NSEventModifierFlagCommand))) {
+ } else if (IS_LEFT_RIGHT_ARROW(eventChar) && (standardModifiers ==
(NSEventModifierFlagOption | NSEventModifierFlagCommand))) {
[self setToolMode:(toolMode + (eventChar ==
NSRightArrowFunctionKey ? 1 : TOOL_MODE_COUNT - 1)) % TOOL_MODE_COUNT];
- } else if (IS_UP_DOWN_ARROW(eventChar) && (modifiers ==
(NSEventModifierFlagOption | NSEventModifierFlagCommand))) {
+ } else if (IS_UP_DOWN_ARROW(eventChar) && (standardModifiers ==
(NSEventModifierFlagOption | NSEventModifierFlagCommand))) {
[self setAnnotationMode:(annotationMode + (eventChar ==
NSDownArrowFunctionKey ? 1 : ANNOTATION_MODE_COUNT - 1)) %
ANNOTATION_MODE_COUNT];
- } else if ([currentAnnotation isMovable] && IS_ARROW(eventChar) &&
((modifiers & ~NSEventModifierFlagShift) == 0)) {
+ } else if ([currentAnnotation isMovable] && IS_ARROW(eventChar) &&
((standardModifiers & ~NSEventModifierFlagShift) == 0)) {
[self doMoveCurrentAnnotationForKey:eventChar byAmount:(modifiers
& NSEventModifierFlagShift) ? 10.0 : 1.0];
- } else if ([currentAnnotation isResizable] && IS_ARROW(eventChar) &&
(modifiers == (NSEventModifierFlagOption | NSEventModifierFlagControl) ||
modifiers == (NSEventModifierFlagShift | NSEventModifierFlagControl))) {
+ } else if ([currentAnnotation isResizable] && IS_ARROW(eventChar) &&
(standardModifiers == (NSEventModifierFlagOption | NSEventModifierFlagControl)
|| standardModifiers == (NSEventModifierFlagShift |
NSEventModifierFlagControl))) {
[self doResizeCurrentAnnotationForKey:eventChar
byAmount:(modifiers & NSEventModifierFlagShift) ? 10.0 : 1.0];
// with some keyboard layouts, e.g. Japanese, the '=' character
requires Shift
} else if ([currentAnnotation isResizable] && [currentAnnotation
isLine] == NO && [currentAnnotation isInk] == NO && (eventChar == '=') &&
((modifiers & ~(NSEventModifierFlagOption | NSEventModifierFlagShift)) ==
NSEventModifierFlagControl)) {
@@ -1858,7 +1859,7 @@
if ([[[self window] firstResponder] isDescendantOf:self] == NO)
[[self window] makeFirstResponder:self];
- NSUInteger modifiers = [theEvent standardModifierFlags];
+ NSUInteger modifiers = [theEvent deviceIndependentModifierFlags] &
~NSEventModifierFlagCapsLock;
PDFAreaOfInterest area = [self areaOfInterestForMouse:theEvent];
PDFAnnotation *wasCurrentAnnotation = currentAnnotation;
@@ -5263,7 +5264,7 @@
- (PDFAreaOfInterest)areaOfInterestForMouse:(NSEvent *)theEvent {
PDFAreaOfInterest area = [super areaOfInterestForMouse:theEvent];
NSPoint p = [theEvent locationInWindow];
- NSInteger modifiers = [theEvent standardModifierFlags];
+ NSInteger modifiers = [theEvent deviceIndependentModifierFlags] &
NSEventModifierFlagCapsLock;
if ([[self document] isLocked]) {
} else if (NSPointInRect(p, [self convertRect:[self visibleContentRect]
toView:nil]) == NO || ([navWindow isVisible] && NSPointInRect([theEvent
locationOnScreen], [navWindow frame])) || ([cursorWindow isVisible] &&
NSPointInRect([theEvent locationOnScreen], [cursorWindow frame]))) {
@@ -5382,7 +5383,7 @@
if (theEvent == nil)
theEvent = [NSEvent mouseEventWithType:NSEventTypeMouseMoved
location:[[self window]
mouseLocationOutsideOfEventStream]
- modifierFlags:[NSEvent standardModifierFlags]
+ modifierFlags:[NSEvent modifierFlags] &
NSEventModifierFlagDeviceIndependentFlagsMask
timestamp:0
windowNumber:[[self window] windowNumber]
context:nil
Modified: trunk/SKSecondaryPDFView.m
===================================================================
--- trunk/SKSecondaryPDFView.m 2024-07-18 22:50:01 UTC (rev 14387)
+++ trunk/SKSecondaryPDFView.m 2024-07-19 14:30:10 UTC (rev 14388)
@@ -627,7 +627,7 @@
}
- (void)keyDown:(NSEvent *)theEvent {
- if ([theEvent firstCharacter] == '?' && ([theEvent standardModifierFlags]
& ~NSEventModifierFlagShift) == 0) {
+ if ([theEvent firstCharacter] == '?' && ([theEvent
deviceIndependentModifierFlags] & ~NSEventModifierFlagShift) == 0) {
[[self class] cancelPreviousPerformRequestsWithTarget:self
selector:@selector(showControlView) object:nil];
if ([controlView superview]) {
[controlView removeFromSuperview];
@@ -672,7 +672,7 @@
[[self class] cancelPreviousPerformRequestsWithTarget:self
selector:@selector(showControlView) object:nil];
[[self window] makeFirstResponder:self];
- NSUInteger modifiers = [theEvent standardModifierFlags];
+ NSUInteger modifiers = [theEvent deviceIndependentModifierFlags];
if (modifiers == NSEventModifierFlagCommand) {
@@ -716,7 +716,7 @@
- (PDFAreaOfInterest)areaOfInterestForMouse:(NSEvent *)theEvent {
PDFAreaOfInterest area = [super areaOfInterestForMouse:theEvent];
- NSInteger modifiers = [theEvent standardModifierFlags];
+ NSInteger modifiers = [theEvent deviceIndependentModifierFlags];
if ([controlView superview] && NSMouseInRect([theEvent
locationInView:controlView], [controlView bounds], [controlView isFlipped])) {
area = kPDFNoArea;
Modified: trunk/SKSnapshotPDFView.m
===================================================================
--- trunk/SKSnapshotPDFView.m 2024-07-18 22:50:01 UTC (rev 14387)
+++ trunk/SKSnapshotPDFView.m 2024-07-19 14:30:10 UTC (rev 14388)
@@ -589,7 +589,7 @@
}
- (void)keyDown:(NSEvent *)theEvent {
- if ([theEvent firstCharacter] == '?' && ([theEvent standardModifierFlags]
& ~NSEventModifierFlagShift) == 0) {
+ if ([theEvent firstCharacter] == '?' && ([theEvent
deviceIndependentModifierFlags] & ~NSEventModifierFlagShift) == 0) {
[[self class] cancelPreviousPerformRequestsWithTarget:self
selector:@selector(showControlView) object:nil];
if ([controlView superview]) {
transientControlView = NO;
@@ -635,7 +635,7 @@
[[self class] cancelPreviousPerformRequestsWithTarget:self
selector:@selector(showControlView) object:nil];
[[self window] makeFirstResponder:self];
- if ([theEvent standardModifierFlags] == NSEventModifierFlagCommand) {
+ if ([theEvent deviceIndependentModifierFlags] ==
NSEventModifierFlagCommand) {
[[NSCursor arrowCursor] push];
@@ -656,7 +656,7 @@
[[self delegate] PDFView:self
goToExternalDestination:[[PDFDestination alloc] initWithPage:page
atPoint:location]];
}
- } else if ([theEvent standardModifierFlags] == (NSEventModifierFlagCommand
| NSEventModifierFlagShift)) {
+ } else if ([theEvent deviceIndependentModifierFlags] ==
(NSEventModifierFlagCommand | NSEventModifierFlagShift)) {
[self doPdfsyncWithEvent:theEvent];
@@ -669,7 +669,7 @@
- (PDFAreaOfInterest)areaOfInterestForMouse:(NSEvent *)theEvent {
PDFAreaOfInterest area = [super areaOfInterestForMouse:theEvent];
- NSInteger modifiers = [theEvent standardModifierFlags];
+ NSInteger modifiers = [theEvent deviceIndependentModifierFlags];
if ([controlView superview] && NSMouseInRect([theEvent
locationInView:controlView], [controlView bounds], [controlView isFlipped])) {
area = kPDFNoArea;
Modified: trunk/SKTextNoteEditor.m
===================================================================
--- trunk/SKTextNoteEditor.m 2024-07-18 22:50:01 UTC (rev 14387)
+++ trunk/SKTextNoteEditor.m 2024-07-19 14:30:10 UTC (rev 14388)
@@ -321,8 +321,8 @@
- (void)keyDown:(NSEvent *)theEvent {
unichar eventChar = [theEvent firstCharacter];
- NSUInteger modifiers = [theEvent standardModifierFlags];
- if ((eventChar == '=' || eventChar == NSUpArrowFunctionKey || eventChar ==
NSDownArrowFunctionKey || eventChar == NSLeftArrowFunctionKey || eventChar ==
NSRightArrowFunctionKey) && (modifiers & ~(NSEventModifierFlagOption |
NSEventModifierFlagShift)) == NSEventModifierFlagControl)
+ NSUInteger modifiers = [theEvent deviceIndependentModifierFlags];
+ if ((eventChar == '=' || eventChar == NSUpArrowFunctionKey || eventChar ==
NSDownArrowFunctionKey || eventChar == NSLeftArrowFunctionKey || eventChar ==
NSRightArrowFunctionKey) && (modifiers & ~(NSEventModifierFlagOption |
NSEventModifierFlagShift | NSEventModifierFlagNumericPad |
NSEventModifierFlagFunction)) == NSEventModifierFlagControl)
[[self nextResponder] keyDown:theEvent];
else
[super keyDown:theEvent];
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit