vcl/osx/salframe.cxx |   38 ++++++++++++++++++++++++++++++++++++--
 1 file changed, 36 insertions(+), 2 deletions(-)

New commits:
commit 9c0803edd1f42b2d29115674795c7c674fea1a35
Author:     Patrick Luby <plub...@neooffice.org>
AuthorDate: Thu Nov 2 20:05:21 2023 -0400
Commit:     Patrick Luby <plub...@neooffice.org>
CommitDate: Fri Nov 3 20:55:04 2023 +0100

    tdf#155266 flush when scrolling or dragging
    
    Delaying flushing until the dispatch level returns to zero causes
    scrolling via the scrollwheel or mouse drag to appear laggy and
    jerky.
    
    Change-Id: Ib70e7766435baa765dd0d1d704ba2fac87f7fccc
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158853
    Tested-by: Jenkins
    Reviewed-by: Patrick Luby <plub...@neooffice.org>

diff --git a/vcl/osx/salframe.cxx b/vcl/osx/salframe.cxx
index d20e6e3d8422..211b288f3b79 100644
--- a/vcl/osx/salframe.cxx
+++ b/vcl/osx/salframe.cxx
@@ -1018,7 +1018,24 @@ void AquaSalFrame::Flush()
     // outside of the application's event loop (e.g. IntroWindow)
     // nothing would trigger paint event handling
     // => fall back to synchronous painting
-    if( ImplGetSVData()->maAppData.mnDispatchLevel <= 0 )
+    bool bFlush = ( ImplGetSVData()->maAppData.mnDispatchLevel <= 0 );
+
+    // tdf#155266 flush when scrolling or dragging
+    // Delaying flushing until the dispatch level returns to zero causes
+    // scrolling via the scrollwheel or mouse drag to appear laggy and
+    // jerky.
+    if( !bFlush )
+    {
+        NSEvent *pEvent = [NSApp currentEvent];
+        if ( pEvent )
+        {
+            NSEventType nType = [pEvent type];
+            if ( nType == NSEventTypeScrollWheel || nType == 
NSEventTypeLeftMouseDragged )
+                bFlush = true;
+        }
+    }
+
+    if( bFlush )
     {
         mpGraphics->Flush();
         [mpNSView display];
@@ -1039,7 +1056,24 @@ void AquaSalFrame::Flush( const tools::Rectangle& rRect )
     // outside of the application's event loop (e.g. IntroWindow)
     // nothing would trigger paint event handling
     // => fall back to synchronous painting
-    if( ImplGetSVData()->maAppData.mnDispatchLevel <= 0 )
+    bool bFlush = ( ImplGetSVData()->maAppData.mnDispatchLevel <= 0 );
+
+    // tdf#155266 flush when scrolling or dragging
+    // Delaying flushing until the dispatch level returns to zero causes
+    // scrolling via the scrollwheel or mouse drag to appear laggy and
+    // jerky.
+    if( !bFlush )
+    {
+        NSEvent *pEvent = [NSApp currentEvent];
+        if ( pEvent )
+        {
+            NSEventType nType = [pEvent type];
+            if ( nType == NSEventTypeScrollWheel || nType == 
NSEventTypeLeftMouseDragged )
+                bFlush = true;
+        }
+    }
+
+    if( bFlush )
     {
         mpGraphics->Flush( rRect );
         [mpNSView display];

Reply via email to