diff options
author | Michael Meeks <michael.meeks@suse.com> | 2013-06-18 18:01:30 +0100 |
---|---|---|
committer | Michael Meeks <michael.meeks@suse.com> | 2013-06-18 18:03:05 +0100 |
commit | 46ee3bd7bd2afc2f05c3ff8650f2f4507e72fe64 (patch) | |
tree | 91b1adc00eb23e6533cc46ad1b2fbc26a4995f87 /vcl/unx/gtk | |
parent | 70522aead1494af62d619d4eb6f90fca5f012aef (diff) |
fdo#60565 - re-read font data on GtkSettings fontconfig-timestamp notify.
Change-Id: If1c4d3a7754cc35208e40494828a799f94f26afc
Diffstat (limited to 'vcl/unx/gtk')
-rw-r--r-- | vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx | 37 |
1 files changed, 31 insertions, 6 deletions
diff --git a/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx b/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx index bdc5ede7682a..ffdd0ba8f9b6 100644 --- a/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx +++ b/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx @@ -3752,14 +3752,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" ) && getenv ("DOFIX") ) + 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 ); @@ -3768,9 +3770,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 ); |