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];