diff options
author | Sorokin Alexei <[email protected]> | 2016-06-01 01:56:59 +0300 |
---|---|---|
committer | Sorokin Alexei <[email protected]> | 2016-06-01 01:56:59 +0300 |
commit | ff8e6e29e6db8f4ef8e5bd79f123e7e207f5be80 (patch) | |
tree | 5d9ddbd525d53a3330f68b91c99190abe986d19a /libmatekbd/matekbd-indicator-config.c | |
parent | 8595becf479f699e5adaf07d747b3146cbd89fa8 (diff) | |
download | libmatekbd-ff8e6e29e6db8f4ef8e5bd79f123e7e207f5be80.tar.bz2 libmatekbd-ff8e6e29e6db8f4ef8e5bd79f123e7e207f5be80.tar.xz |
GTK+3: use GtkStyleContext
this fixes #28 on supported themes
Diffstat (limited to 'libmatekbd/matekbd-indicator-config.c')
-rw-r--r-- | libmatekbd/matekbd-indicator-config.c | 81 |
1 files changed, 61 insertions, 20 deletions
diff --git a/libmatekbd/matekbd-indicator-config.c b/libmatekbd/matekbd-indicator-config.c index 287189e..91f6179 100644 --- a/libmatekbd/matekbd-indicator-config.c +++ b/libmatekbd/matekbd-indicator-config.c @@ -38,7 +38,6 @@ * MatekbdIndicatorConfig: */ #define MATEKBD_INDICATOR_CONFIG_SCHEMA MATEKBD_CONFIG_SCHEMA ".indicator" -#define GTK_STYLE_PATH "*PanelWidget*" const gchar MATEKBD_INDICATOR_CONFIG_KEY_SHOW_FLAGS[] = "show-flags"; const gchar MATEKBD_INDICATOR_CONFIG_KEY_SECONDARIES[] = "secondary"; @@ -62,17 +61,41 @@ matekbd_indicator_config_load_font (MatekbdIndicatorConfig * ind_config) if (ind_config->font_family == NULL || ind_config->font_family[0] == '\0') { PangoFontDescription *fd = NULL; +#if GTK_CHECK_VERSION (3, 0, 0) + GtkWidgetPath *widget_path = gtk_widget_path_new (); + GtkStyleContext *context = gtk_style_context_new (); + + gtk_widget_path_append_type (widget_path, GTK_TYPE_WINDOW); + gtk_widget_path_iter_set_name (widget_path, -1 , "PanelWidget"); + + gtk_style_context_set_path (context, widget_path); + gtk_style_context_set_screen (context, gdk_screen_get_default ()); + gtk_style_context_set_state (context, GTK_STATE_FLAG_NORMAL); + gtk_style_context_add_class (context, GTK_STYLE_CLASS_DEFAULT); + gtk_style_context_add_class (context, "gnome-panel-menu-bar"); + gtk_style_context_add_class (context, "mate-panel-menu-bar"); + + gtk_style_context_get (context, GTK_STATE_FLAG_NORMAL, + GTK_STYLE_PROPERTY_FONT, &fd, NULL); +#else GtkStyle *style = gtk_rc_get_style_by_paths (gtk_settings_get_default (), - GTK_STYLE_PATH, - GTK_STYLE_PATH, + "*PanelWidget*", + "*PanelWidget*", GTK_TYPE_LABEL); if (style != NULL) fd = style->font_desc; +#endif + if (fd != NULL) { ind_config->font_family = g_strdup (pango_font_description_to_string(fd)); } + +#if GTK_CHECK_VERSION (3, 0, 0) + g_object_unref (G_OBJECT (context)); + gtk_widget_path_unref (widget_path); +#endif } xkl_debug (150, "font: [%s]\n", ind_config->font_family); @@ -83,32 +106,50 @@ matekbd_indicator_config_load_colors (MatekbdIndicatorConfig * ind_config) { ind_config->foreground_color = g_settings_get_string (ind_config->settings, - MATEKBD_INDICATOR_CONFIG_KEY_FOREGROUND_COLOR); + MATEKBD_INDICATOR_CONFIG_KEY_FOREGROUND_COLOR); if (ind_config->foreground_color == NULL || ind_config->foreground_color[0] == '\0') { +#if GTK_CHECK_VERSION (3, 0, 0) + GtkWidgetPath *widget_path = gtk_widget_path_new (); + GtkStyleContext *context = gtk_style_context_new (); + GdkRGBA fg_color; + + gtk_widget_path_append_type (widget_path, GTK_TYPE_WINDOW); + gtk_widget_path_iter_set_name (widget_path, -1 , "PanelWidget"); + + gtk_style_context_set_path (context, widget_path); + gtk_style_context_set_screen (context, gdk_screen_get_default ()); + gtk_style_context_set_state (context, GTK_STATE_FLAG_NORMAL); + gtk_style_context_add_class (context, GTK_STYLE_CLASS_DEFAULT); + gtk_style_context_add_class (context, "gnome-panel-menu-bar"); + gtk_style_context_add_class (context, "mate-panel-menu-bar"); + + gtk_style_context_get_color (context, + GTK_STATE_FLAG_NORMAL, &fg_color); + ind_config->foreground_color = + g_strdup_printf ("%g %g %g", + fg_color.red, + fg_color.green, + fg_color.blue); + + g_object_unref (G_OBJECT (context)); + gtk_widget_path_unref (widget_path); +#else GtkStyle *style = gtk_rc_get_style_by_paths (gtk_settings_get_default (), - GTK_STYLE_PATH, - GTK_STYLE_PATH, + "*PanelWidget*", + "*PanelWidget*", GTK_TYPE_LABEL); if (style != NULL) { + GdkColor fg_color = style->fg[GTK_STATE_NORMAL]; ind_config->foreground_color = - g_strdup_printf ("%g %g %g", ((double) - style-> - fg - [GTK_STATE_NORMAL].red) - / 0x10000, ((double) - style-> - fg - [GTK_STATE_NORMAL].green) - / 0x10000, ((double) - style-> - fg - [GTK_STATE_NORMAL].blue) - / 0x10000); + g_strdup_printf ("%g %g %g", + ((double) fg_color.red) / 0xFFFF, + ((double) fg_color.green) / 0xFFFF, + ((double) fg_color.blue) / 0xFFFF); } - +#endif } ind_config->background_color = |