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

New commits:
commit d6958883a48d5ed4774b558f5e1fe9f878b7d2f5
Author:     Patrick Luby <[email protected]>
AuthorDate: Tue Jan 17 16:26:00 2023 -0500
Commit:     Patrick Luby <[email protected]>
CommitDate: Thu Jan 19 13:47:47 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/+/145592
    Reviewed-by: Adolfo Jayme Barrientos <[email protected]>
    Reviewed-by: Patrick Luby <[email protected]>
    Tested-by: Patrick Luby <[email protected]>

diff --git a/vcl/osx/salframeview.mm b/vcl/osx/salframeview.mm
index 355fc84a76b4..09643b5c307d 100644
--- a/vcl/osx/salframeview.mm
+++ b/vcl/osx/salframeview.mm
@@ -1028,7 +1028,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] )];
@@ -1177,9 +1181,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