tdf#150177 Limit minimum blink cursor rate
This bug occurs when the values for NSTextInsertionPointBlinkPeriodOn or
NSTextInsertionPointBlinkPeriodOff are set to zero or close to zero.
LibreOffice becomes very sluggish opening documents when either is set
at 100 milliseconds or less so set the blink rate to the maximum of
500 milliseconds, NSTextInsertionPointBlinkPeriodOn, and
NSTextInsertionPointBlinkPeriodOff.
Change-Id: I953bddda757f8514221ac5cd9c04bd749a994fda
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/144775
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Tested-by: Noel Grandin <noel.grandin@collabora.co.uk>
diff --git a/vcl/osx/salframe.cxx b/vcl/osx/salframe.cxx
index 330a6c0..90dd387 100644
--- a/vcl/osx/salframe.cxx
+++ b/vcl/osx/salframe.cxx
@@ -56,6 +56,8 @@
#include <postmac.h>
const int nMinBlinkCursorDelay = 500;
AquaSalFrame* AquaSalFrame::s_pCaptureFrame = nullptr;
AquaSalFrame::AquaSalFrame( SalFrame* pParent, SalFrameStyleFlags salFrameStyle ) :
@@ -85,7 +87,7 @@ AquaSalFrame::AquaSalFrame( SalFrame* pParent, SalFrameStyleFlags salFrameStyle
mnTrackingRectTag( 0 ),
mrClippingPath( nullptr ),
mnICOptions( InputContextFlags::NONE ),
mnBlinkCursorDelay ( 500 )
mnBlinkCursorDelay ( nMinBlinkCursorDelay )
{
mpParent = dynamic_cast<AquaSalFrame*>(pParent);
@@ -94,17 +96,24 @@ AquaSalFrame::AquaSalFrame( SalFrame* pParent, SalFrameStyleFlags salFrameStyle
SalData* pSalData = GetSalData();
pSalData->mpInstance->insertFrame( this );
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
// tdf#150177 Limit minimum blink cursor rate
// This bug occurs when the values for NSTextInsertionPointBlinkPeriodOn or
// NSTextInsertionPointBlinkPeriodOff are set to zero or close to zero.
// LibreOffice becomes very sluggish opening documents when either is set
// at 100 milliseconds or less so set the blink rate to the maximum of
// nMinBlinkCursorDelay, NSTextInsertionPointBlinkPeriodOn, and
// NSTextInsertionPointBlinkPeriodOff.
mnBlinkCursorDelay = nMinBlinkCursorDelay;
if (userDefaults != nil)
{
id setting = [userDefaults objectForKey: @"NSTextInsertionPointBlinkPeriodOn"];
if (setting)
mnBlinkCursorDelay = [setting intValue];
else
{
setting = [userDefaults objectForKey: @"NSTextInsertionPointBlinkPeriodOff"];
if (setting)
mnBlinkCursorDelay = [setting intValue];
}
if (setting && [setting isKindOfClass:[NSNumber class]])
mnBlinkCursorDelay = std::max(mnBlinkCursorDelay, [setting intValue]);
setting = [userDefaults objectForKey: @"NSTextInsertionPointBlinkPeriodOff"];
if (setting && [setting isKindOfClass:[NSNumber class]])
mnBlinkCursorDelay = std::max(mnBlinkCursorDelay, [setting intValue]);
}
}