From d55d62685382d2b368af1319aa4012d6a4465de4 Mon Sep 17 00:00:00 2001 From: Michael Meeks Date: Tue, 18 Jun 2013 18:01:30 +0100 Subject: fdo#60565 - re-read font data on GtkSettings fontconfig-timestamp notify. Change-Id: If1c4d3a7754cc35208e40494828a799f94f26afc Reviewed-on: https://gerrit.libreoffice.org/4347 Reviewed-by: Noel Power Tested-by: Noel Power Reviewed-on: https://gerrit.libreoffice.org/4376 --- vcl/inc/unx/gtk/gtkgdi.hxx | 4 ++++ vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx | 37 ++++++++++++++++++++++++++------ 2 files changed, 35 insertions(+), 6 deletions(-) (limited to 'vcl') diff --git a/vcl/inc/unx/gtk/gtkgdi.hxx b/vcl/inc/unx/gtk/gtkgdi.hxx index 86003edd94b6..7239d431675f 100644 --- a/vcl/inc/unx/gtk/gtkgdi.hxx +++ b/vcl/inc/unx/gtk/gtkgdi.hxx @@ -55,6 +55,8 @@ public: Rectangle &rNativeBoundingRegion, Rectangle &rNativeContentRegion ); void updateSettings( AllSettings& rSettings ); + static void refreshFontconfig( GtkSettings *pSettings ); + static void signalSettingsNotify( GObject*, GParamSpec *pSpec, gpointer ); private: GtkWidget *mpWindow; static GtkStyleContext *mpButtonStyle; @@ -139,6 +141,8 @@ public: //helper methods for frame's UpdateSettings void updateSettings( AllSettings& rSettings ); + static void refreshFontconfig( GtkSettings *pSettings ); + static void signalSettingsNotify( GObject*, GParamSpec *pSpec, gpointer ); virtual bool setClipRegion( const Region& ); virtual void ResetClipRegion(); diff --git a/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx b/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx index 145585031d74..e4bd038d6007 100644 --- a/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx +++ b/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx @@ -3710,14 +3710,16 @@ void printStyleColors( GtkStyle* pStyle ) } #endif -void GtkSalGraphics::updateSettings( AllSettings& rSettings ) +void GtkSalGraphics::signalSettingsNotify( GObject *pSettings, GParamSpec *pSpec, gpointer ) { - GdkScreen* pScreen = gtk_widget_get_screen( m_pWindow ); - gtk_widget_ensure_style( m_pWindow ); - GtkStyle* pStyle = gtk_widget_get_style( m_pWindow ); - GtkSettings* pSettings = gtk_widget_get_settings( m_pWindow ); - StyleSettings aStyleSet = rSettings.GetStyleSettings(); + g_return_if_fail( pSpec != NULL ); + if( !strcmp( pSpec->name, "gtk-fontconfig-timestamp" ) ) + GtkSalGraphics::refreshFontconfig( GTK_SETTINGS( pSettings ) ); +} + +void GtkSalGraphics::refreshFontconfig( GtkSettings *pSettings ) +{ guint latest_fontconfig_timestamp = 0; static guint our_fontconfig_timestamp = 0; g_object_get( pSettings, "gtk-fontconfig-timestamp", &latest_fontconfig_timestamp, (char *)NULL ); @@ -3726,9 +3728,32 @@ void GtkSalGraphics::updateSettings( AllSettings& rSettings ) bool bFirstTime = our_fontconfig_timestamp == 0; our_fontconfig_timestamp = latest_fontconfig_timestamp; if (!bFirstTime) + { psp::PrintFontManager::get().initialize(); + } + } +} + +void GtkSalGraphics::updateSettings( AllSettings& rSettings ) +{ + GdkScreen* pScreen = gtk_widget_get_screen( m_pWindow ); + gtk_widget_ensure_style( m_pWindow ); + GtkStyle* pStyle = gtk_widget_get_style( m_pWindow ); + GtkSettings* pSettings = gtk_widget_get_settings( m_pWindow ); + StyleSettings aStyleSet = rSettings.GetStyleSettings(); + + // Listen for font changes + if( !g_object_get_data( G_OBJECT( pSettings ), "libo:listening" ) ) + { + g_object_set_data( G_OBJECT( pSettings ), "libo:listening", + GUINT_TO_POINTER( 1 ) ); + g_signal_connect_data( G_OBJECT( pSettings ), "notify", + G_CALLBACK( signalSettingsNotify ), + NULL, NULL, G_CONNECT_AFTER ); } + refreshFontconfig( pSettings ); + // get the widgets in place NWEnsureGTKMenu( m_nXScreen ); NWEnsureGTKMenubar( m_nXScreen ); -- cgit