vcl/osx/salframeview.mm |   12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

New commits:
commit ef558d0aab44421ad5cd8362724ff1410af1b480
Author:     Patrick Luby <plub...@neooffice.org>
AuthorDate: Tue Jan 17 16:26:00 2023 -0500
Commit:     Patrick Luby <plub...@neooffice.org>
CommitDate: Tue Jan 17 22:21:04 2023 +0000

    Related: tdf#42437 Skip special press-and-hold handling for action keys
    
    Pressing and holding action keys such as arrow keys must not be handled
    like pressing and holding a character key as it will insert unexpected
    text.
    
    Change-Id: I6beaff265e6cae30337b025791692ff67b760ff8
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145689
    Tested-by: Jenkins
    Reviewed-by: Patrick Luby <plub...@neooffice.org>

diff --git a/vcl/osx/salframeview.mm b/vcl/osx/salframeview.mm
index 98765c761969..b36cd23721ea 100644
--- a/vcl/osx/salframeview.mm
+++ b/vcl/osx/salframeview.mm
@@ -1115,7 +1115,11 @@ static AquaSalFrame* getMouseContainerFrame()
             // Handle repeat key events by explicitly inserting the text if
             // -[NSResponder interpretKeyEvents:] does not insert or mark any
             // text. Note: do not do this step if there is uncommitted text.
-            if ( !mpLastMarkedText && mpLastEvent && [mpLastEvent type] == 
NSEventTypeKeyDown && [mpLastEvent isARepeat] )
+            // Related: tdf#42437 Skip special press-and-hold handling for 
action keys
+            // Pressing and holding action keys such as arrow keys must not be
+            // handled like pressing and holding a character key as it will
+            // insert unexpected text.
+            if ( !mbKeyHandled && !mpLastMarkedText && mpLastEvent && 
[mpLastEvent type] == NSEventTypeKeyDown && [mpLastEvent isARepeat] )
             {
                 NSString *pChars = [mpLastEvent characters];
                 [self insertText:pChars replacementRange:NSMakeRange( 0, 
[pChars length] )];
@@ -1264,9 +1268,13 @@ static AquaSalFrame* getMouseContainerFrame()
                 mpFrame->CallCallback( SalEvent::EndExtTextInput, nullptr );
 
         }
-        mbKeyHandled = true;
         [self unmarkText];
     }
+
+    // Mark event as handled even if the frame isn't valid like is done in
+    // [self setMarkedText:selectedRange:replacementRange:] and
+    // [self doCommandBySelector:]
+    mbKeyHandled = true;
 }
 
 -(void)insertTab: (id)aSender

Reply via email to