diff options
author | Matěj Cepl <mcepl@redhat.com> | 2009-10-23 18:00:13 +0800 |
---|---|---|
committer | Jonny Lamb <jonnylamb@gnome.org> | 2009-10-23 20:15:51 +0800 |
commit | 7c5ac57b9aafe95d159c2a96410a0afa76408678 (patch) | |
tree | 4baa5189999e22846e1f2454078bf04f1e9ef496 | |
parent | 4dce79a6d7b56185edfe19cf2803f1b71c8ddc74 (diff) | |
download | gsoc2013-empathy-7c5ac57b9aafe95d159c2a96410a0afa76408678.tar gsoc2013-empathy-7c5ac57b9aafe95d159c2a96410a0afa76408678.tar.gz gsoc2013-empathy-7c5ac57b9aafe95d159c2a96410a0afa76408678.tar.bz2 gsoc2013-empathy-7c5ac57b9aafe95d159c2a96410a0afa76408678.tar.lz gsoc2013-empathy-7c5ac57b9aafe95d159c2a96410a0afa76408678.tar.xz gsoc2013-empathy-7c5ac57b9aafe95d159c2a96410a0afa76408678.tar.zst gsoc2013-empathy-7c5ac57b9aafe95d159c2a96410a0afa76408678.zip |
Set default font from Gnome system if not set in the style.
If the font family and font size is not set in the style, we set style
based on the Gnome default settings.
Signed-off-by: Matěj Cepl <mcepl@redhat.com>
Signed-off-by: Jonny Lamb <jonnylamb@gnome.org>
-rw-r--r-- | libempathy-gtk/empathy-theme-adium.c | 82 |
1 files changed, 73 insertions, 9 deletions
diff --git a/libempathy-gtk/empathy-theme-adium.c b/libempathy-gtk/empathy-theme-adium.c index 49a76c24c..35c216d68 100644 --- a/libempathy-gtk/empathy-theme-adium.c +++ b/libempathy-gtk/empathy-theme-adium.c @@ -28,6 +28,9 @@ #include <telepathy-glib/dbus.h> #include <telepathy-glib/util.h> +#include <gconf/gconf-client.h> +#include <pango/pango.h> +#include <gdk/gdk.h> #include <libempathy/empathy-time.h> #include <libempathy/empathy-utils.h> @@ -43,6 +46,10 @@ #define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyThemeAdium) +/* GConf key containing current value of font */ +#define EMPATHY_GCONF_FONT_KEY_NAME "/desktop/gnome/interface/font_name" +#define BORING_DPI_DEFAULT 96 + /* "Join" consecutive messages with timestamps within five minutes */ #define MESSAGE_JOIN_PERIOD 5*60 @@ -970,6 +977,67 @@ theme_adium_inspect_web_view_cb (WebKitWebInspector *inspector, return NULL; } +static PangoFontDescription * +theme_adium_get_default_font (void) +{ + GConfClient *gconf_client; + PangoFontDescription *pango_fd; + gchar *gconf_font_family; + + gconf_client = gconf_client_get_default (); + if (gconf_client == NULL) { + return NULL; + } + gconf_font_family = gconf_client_get_string (gconf_client, + EMPATHY_GCONF_FONT_KEY_NAME, + NULL); + if (gconf_font_family == NULL) { + g_object_unref (gconf_client); + return NULL; + } + pango_fd = pango_font_description_from_string (gconf_font_family); + g_free (gconf_font_family); + g_object_unref (gconf_client); + return pango_fd; +} + +static void +theme_adium_set_webkit_font (WebKitWebSettings *w_settings, + const gchar *name, + gint size) +{ + g_object_set (w_settings, "default-font-family", name, NULL); + g_object_set (w_settings, "default-font-size", size, NULL); +} + +static void +theme_adium_set_default_font (WebKitWebSettings *w_settings) +{ + PangoFontDescription *default_font_desc; + GdkScreen *current_screen; + gdouble dpi = 0; + gint pango_font_size = 0; + + default_font_desc = theme_adium_get_default_font (); + if (default_font_desc == NULL) + return ; + pango_font_size = pango_font_description_get_size (default_font_desc) + / PANGO_SCALE ; + if (pango_font_description_get_size_is_absolute (default_font_desc)) { + current_screen = gdk_screen_get_default (); + if (current_screen != NULL) { + dpi = gdk_screen_get_resolution (current_screen); + } else { + dpi = BORING_DPI_DEFAULT; + } + pango_font_size = (gint) (pango_font_size / (dpi / 72)); + } + theme_adium_set_webkit_font (w_settings, + pango_font_description_get_family (default_font_desc), + pango_font_size); + pango_font_description_free (default_font_desc); +} + static void theme_adium_constructed (GObject *object) { @@ -985,15 +1053,11 @@ theme_adium_constructed (GObject *object) font_family = tp_asv_get_string (priv->data->info, "DefaultFontFamily"); font_size = tp_asv_get_int32 (priv->data->info, "DefaultFontSize", NULL); webkit_settings = webkit_web_view_get_settings (webkit_view); - if (font_family) { - g_object_set (webkit_settings, - "default-font-family", font_family, - NULL); - } - if (font_size) { - g_object_set (webkit_settings, - "default-font-size", font_size, - NULL); + + if (font_family && font_size) { + theme_adium_set_webkit_font (webkit_settings, font_family, font_size); + } else { + theme_adium_set_default_font (webkit_settings); } /* Setup webkit inspector */ |