summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Meeks <michael.meeks@suse.com>2013-06-18 18:01:30 +0100
committerMichael Meeks <michael.meeks@suse.com>2013-06-18 18:03:05 +0100
commit46ee3bd7bd2afc2f05c3ff8650f2f4507e72fe64 (patch)
tree91b1adc00eb23e6533cc46ad1b2fbc26a4995f87
parent70522aead1494af62d619d4eb6f90fca5f012aef (diff)
fdo#60565 - re-read font data on GtkSettings fontconfig-timestamp notify.
Change-Id: If1c4d3a7754cc35208e40494828a799f94f26afc
-rw-r--r--vcl/inc/unx/gtk/gtkgdi.hxx4
-rw-r--r--vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx37
2 files changed, 35 insertions, 6 deletions
diff --git a/vcl/inc/unx/gtk/gtkgdi.hxx b/vcl/inc/unx/gtk/gtkgdi.hxx
index 6c9fea6f9545..4d5ff7c5821e 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 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 );