diff options
author | Ashod Nakashian <ashod.nakashian@collabora.co.uk> | 2018-06-02 23:57:04 -0400 |
---|---|---|
committer | Ashod Nakashian <ashod.nakashian@collabora.co.uk> | 2018-06-09 16:53:46 -0400 |
commit | c5a524588fc4ec44fc0008517751bb1041b25deb (patch) | |
tree | 9472bd78c924600cfcd7a081f9c42158d601ac28 | |
parent | 121ba866e0d4cc9d4e7e51546aeda561f4267cd3 (diff) |
vcl: refresh font cache only on real change
GTK3 emits way too many style-updated, which triggers font cache updates. The
avoidance of unecessary font cache updates was first implemented in 29c55564.
Unfortuantely, it seems that the current font-options was never set as
last-seen font-options, so still to many fonts-changed were emitted
Change-Id: I01a47d4d7fb033e335b1a49ffa6e1bb98f7fd28d
Reviewed-on: https://gerrit.libreoffice.org/55287
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
(cherry picked from commit 08814a34e3a3841c316dfb27a07583049abc5195)
-rw-r--r-- | vcl/inc/unx/gtk/gtkinst.hxx | 2 | ||||
-rw-r--r-- | vcl/unx/gtk/gtkinst.cxx | 9 | ||||
-rw-r--r-- | vcl/unx/gtk/gtksalframe.cxx | 2 | ||||
-rw-r--r-- | vcl/unx/gtk3/gtk3gtkframe.cxx | 2 |
4 files changed, 8 insertions, 7 deletions
diff --git a/vcl/inc/unx/gtk/gtkinst.hxx b/vcl/inc/unx/gtk/gtkinst.hxx index 514b13f62580..e973e7d370d9 100644 --- a/vcl/inc/unx/gtk/gtkinst.hxx +++ b/vcl/inc/unx/gtk/gtkinst.hxx @@ -243,7 +243,7 @@ public: virtual const cairo_font_options_t* GetCairoFontOptions() override; const cairo_font_options_t* GetLastSeenCairoFontOptions(); - void ResetLastSeenCairoFontOptions(); + void ResetLastSeenCairoFontOptions(const cairo_font_options_t* pOptions); void RemoveTimer (SalTimer *pTimer); diff --git a/vcl/unx/gtk/gtkinst.cxx b/vcl/unx/gtk/gtkinst.cxx index e01a267b6131..e6bdb9104349 100644 --- a/vcl/unx/gtk/gtkinst.cxx +++ b/vcl/unx/gtk/gtkinst.cxx @@ -203,7 +203,7 @@ GtkInstance::~GtkInstance() while( !m_aTimers.empty() ) delete *m_aTimers.begin(); DeInitAtkBridge(); - ResetLastSeenCairoFontOptions(); + ResetLastSeenCairoFontOptions(nullptr); } SalFrame* GtkInstance::CreateFrame( SalFrame* pParent, SalFrameStyleFlags nStyle ) @@ -504,13 +504,14 @@ const cairo_font_options_t* GtkInstance::GetLastSeenCairoFontOptions() return m_pLastCairoFontOptions; } -void GtkInstance::ResetLastSeenCairoFontOptions() +void GtkInstance::ResetLastSeenCairoFontOptions(const cairo_font_options_t* pCairoFontOptions) { if (m_pLastCairoFontOptions) - { cairo_font_options_destroy(m_pLastCairoFontOptions); + if (pCairoFontOptions) + m_pLastCairoFontOptions = cairo_font_options_copy(pCairoFontOptions); + else m_pLastCairoFontOptions = nullptr; - } } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/unx/gtk/gtksalframe.cxx b/vcl/unx/gtk/gtksalframe.cxx index b10994d7d4d0..ab4010a19f1c 100644 --- a/vcl/unx/gtk/gtksalframe.cxx +++ b/vcl/unx/gtk/gtksalframe.cxx @@ -3221,7 +3221,7 @@ void GtkSalFrame::signalStyleSet( GtkWidget*, GtkStyle* pPrevious, gpointer fram bFontSettingsChanged = false; if (bFontSettingsChanged) { - pInstance->ResetLastSeenCairoFontOptions(); + pInstance->ResetLastSeenCairoFontOptions(pCurrentCairoFontOptions); GtkSalFrame::getDisplay()->SendInternalEvent( pThis, nullptr, SalEvent::FontChanged ); } } diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx index a7b277a64e98..1c62ee30a839 100644 --- a/vcl/unx/gtk3/gtk3gtkframe.cxx +++ b/vcl/unx/gtk3/gtk3gtkframe.cxx @@ -3208,7 +3208,7 @@ void GtkSalFrame::signalStyleUpdated(GtkWidget*, gpointer frame) bFontSettingsChanged = false; if (bFontSettingsChanged) { - pInstance->ResetLastSeenCairoFontOptions(); + pInstance->ResetLastSeenCairoFontOptions(pCurrentCairoFontOptions); GtkSalFrame::getDisplay()->SendInternalEvent( pThis, nullptr, SalEvent::FontChanged ); } } |