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

Reply via email to