X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkmodifierstyle.c;h=4d3cc35194a7afa6b0e0a49ddd6e6e94d7408704;hb=a41b73fbc71f613e4ca90ae8b9dd3bd317d026d6;hp=8d4a18cb89108fc317f30903bf993935a411f4a6;hpb=49433673fcda54322feb11c710081b234bb481bc;p=~andy%2Fgtk diff --git a/gtk/gtkmodifierstyle.c b/gtk/gtkmodifierstyle.c index 8d4a18cb8..4d3cc3519 100644 --- a/gtk/gtkmodifierstyle.c +++ b/gtk/gtkmodifierstyle.c @@ -12,19 +12,17 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * License along with this library. If not, see . */ #include "config.h" #include "gtkmodifierstyle.h" +#include "gtkstyleproviderprivate.h" #include "gtkintl.h" -typedef struct GtkModifierStylePrivate GtkModifierStylePrivate; typedef struct StylePropertyValue StylePropertyValue; -struct GtkModifierStylePrivate +struct _GtkModifierStylePrivate { GtkStyleProperties *style; GHashTable *color_properties; @@ -37,12 +35,15 @@ enum { static guint signals [LAST_SIGNAL] = { 0 }; -static void gtk_modifier_style_provider_init (GtkStyleProviderIface *iface); -static void gtk_modifier_style_finalize (GObject *object); +static void gtk_modifier_style_provider_init (GtkStyleProviderIface *iface); +static void gtk_modifier_style_provider_private_init (GtkStyleProviderPrivateInterface *iface); +static void gtk_modifier_style_finalize (GObject *object); G_DEFINE_TYPE_EXTENDED (GtkModifierStyle, _gtk_modifier_style, G_TYPE_OBJECT, 0, G_IMPLEMENT_INTERFACE (GTK_TYPE_STYLE_PROVIDER, - gtk_modifier_style_provider_init)); + gtk_modifier_style_provider_init) + G_IMPLEMENT_INTERFACE (GTK_TYPE_STYLE_PROVIDER_PRIVATE, + gtk_modifier_style_provider_private_init)); static void _gtk_modifier_style_class_init (GtkModifierStyleClass *klass) @@ -80,16 +81,6 @@ _gtk_modifier_style_init (GtkModifierStyle *modifier_style) priv->style = gtk_style_properties_new (); } -static GtkStyleProperties * -gtk_modifier_style_get_style (GtkStyleProvider *provider, - GtkWidgetPath *path) -{ - GtkModifierStylePrivate *priv; - - priv = GTK_MODIFIER_STYLE (provider)->priv; - return g_object_ref (priv->style); -} - static gboolean gtk_modifier_style_get_style_property (GtkStyleProvider *provider, GtkWidgetPath *path, @@ -128,10 +119,48 @@ gtk_modifier_style_get_style_property (GtkStyleProvider *provider, static void gtk_modifier_style_provider_init (GtkStyleProviderIface *iface) { - iface->get_style = gtk_modifier_style_get_style; iface->get_style_property = gtk_modifier_style_get_style_property; } +static GtkCssValue * +gtk_modifier_style_provider_get_color (GtkStyleProviderPrivate *provider, + const char *name) +{ + GtkModifierStyle *style = GTK_MODIFIER_STYLE (provider); + + return _gtk_style_provider_private_get_color (GTK_STYLE_PROVIDER_PRIVATE (style->priv->style), name); +} + +static void +gtk_modifier_style_provider_lookup (GtkStyleProviderPrivate *provider, + const GtkCssMatcher *matcher, + GtkCssLookup *lookup) +{ + GtkModifierStyle *style = GTK_MODIFIER_STYLE (provider); + + _gtk_style_provider_private_lookup (GTK_STYLE_PROVIDER_PRIVATE (style->priv->style), + matcher, + lookup); +} + +static GtkCssChange +gtk_modifier_style_provider_get_change (GtkStyleProviderPrivate *provider, + const GtkCssMatcher *matcher) +{ + GtkModifierStyle *style = GTK_MODIFIER_STYLE (provider); + + return _gtk_style_provider_private_get_change (GTK_STYLE_PROVIDER_PRIVATE (style->priv->style), + matcher); +} + +static void +gtk_modifier_style_provider_private_init (GtkStyleProviderPrivateInterface *iface) +{ + iface->get_color = gtk_modifier_style_provider_get_color; + iface->lookup = gtk_modifier_style_provider_lookup; + iface->get_change = gtk_modifier_style_provider_get_change; +} + static void gtk_modifier_style_finalize (GObject *object) { @@ -157,21 +186,10 @@ modifier_style_set_color (GtkModifierStyle *style, const GdkRGBA *color) { GtkModifierStylePrivate *priv; - GdkRGBA *old_color; g_return_if_fail (GTK_IS_MODIFIER_STYLE (style)); priv = style->priv; - gtk_style_properties_get (priv->style, state, - prop, &old_color, - NULL); - - if ((!color && !old_color) || - (color && old_color && gdk_rgba_equal (color, old_color))) - { - gdk_rgba_free (old_color); - return; - } if (color) gtk_style_properties_set (priv->style, state, @@ -181,7 +199,7 @@ modifier_style_set_color (GtkModifierStyle *style, gtk_style_properties_unset_property (priv->style, prop, state); g_signal_emit (style, signals[CHANGED], 0); - gdk_rgba_free (old_color); + _gtk_style_provider_private_changed (GTK_STYLE_PROVIDER_PRIVATE (style)); } void @@ -209,24 +227,10 @@ _gtk_modifier_style_set_font (GtkModifierStyle *style, const PangoFontDescription *font_desc) { GtkModifierStylePrivate *priv; - PangoFontDescription *old_font; g_return_if_fail (GTK_IS_MODIFIER_STYLE (style)); priv = style->priv; - gtk_style_properties_get (priv->style, 0, - "font", &old_font, - NULL); - - if ((!old_font && !font_desc) || - (old_font && font_desc && - pango_font_description_equal (old_font, font_desc))) - { - if (old_font) - pango_font_description_free (old_font); - - return; - } if (font_desc) gtk_style_properties_set (priv->style, 0, @@ -235,10 +239,8 @@ _gtk_modifier_style_set_font (GtkModifierStyle *style, else gtk_style_properties_unset_property (priv->style, "font", 0); - if (old_font) - pango_font_description_free (old_font); - g_signal_emit (style, signals[CHANGED], 0); + _gtk_style_provider_private_changed (GTK_STYLE_PROVIDER_PRIVATE (style)); } void @@ -254,13 +256,18 @@ _gtk_modifier_style_map_color (GtkModifierStyle *style, priv = style->priv; + G_GNUC_BEGIN_IGNORE_DEPRECATIONS; + if (color) symbolic_color = gtk_symbolic_color_new_literal (color); gtk_style_properties_map_color (priv->style, name, symbolic_color); + G_GNUC_END_IGNORE_DEPRECATIONS; + g_signal_emit (style, signals[CHANGED], 0); + _gtk_style_provider_private_changed (GTK_STYLE_PROVIDER_PRIVATE (style)); } void @@ -301,4 +308,5 @@ _gtk_modifier_style_set_color_property (GtkModifierStyle *style, } g_signal_emit (style, signals[CHANGED], 0); + _gtk_style_provider_private_changed (GTK_STYLE_PROVIDER_PRIVATE (style)); }