X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtklabel.c;h=b228d05672136e5d738763a82b8fdd9f59da3e83;hb=b9e189150bfd62c9e956e29324622058672600f0;hp=5f0591dfa384c60f7f5f83745e70afb5751e04ef;hpb=5230cfe805b8f0046896c029612180fc9d4cc5df;p=~andy%2Fgtk diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c index 5f0591dfa..b228d0567 100644 --- a/gtk/gtklabel.c +++ b/gtk/gtklabel.c @@ -384,9 +384,6 @@ static void gtk_label_size_allocate (GtkWidget *widget, GtkAllocation *allocation); static void gtk_label_state_flags_changed (GtkWidget *widget, GtkStateFlags prev_state); -static void gtk_label_style_updated (GtkWidget *widget); -static void gtk_label_direction_changed (GtkWidget *widget, - GtkTextDirection previous_dir); static gint gtk_label_draw (GtkWidget *widget, cairo_t *cr); static gboolean gtk_label_focus (GtkWidget *widget, @@ -566,9 +563,7 @@ gtk_label_class_init (GtkLabelClass *class) widget_class->destroy = gtk_label_destroy; widget_class->size_allocate = gtk_label_size_allocate; widget_class->state_flags_changed = gtk_label_state_flags_changed; - widget_class->style_updated = gtk_label_style_updated; widget_class->query_tooltip = gtk_label_query_tooltip; - widget_class->direction_changed = gtk_label_direction_changed; widget_class->draw = gtk_label_draw; widget_class->realize = gtk_label_realize; widget_class->unrealize = gtk_label_unrealize; @@ -1852,6 +1847,9 @@ gtk_label_screen_changed (GtkWidget *widget, GtkSettings *settings; gboolean shortcuts_connected; + /* The PangoContext is replaced when the screen changes, so clear the layouts */ + gtk_label_clear_layout (GTK_LABEL (widget)); + if (!gtk_widget_has_screen (widget)) return; @@ -1982,15 +1980,17 @@ gtk_label_set_text_internal (GtkLabel *label, gchar *str) { GtkLabelPrivate *priv = label->priv; - gboolean text_changed; - text_changed = g_strcmp0 (priv->text, str) != 0; + if (g_strcmp0 (priv->text, str) == 0) + { + g_free (str); + return; + } g_free (priv->text); priv->text = str; - if (text_changed) - gtk_label_select_region_index (label, 0, 0); + gtk_label_select_region_index (label, 0, 0); } static void @@ -3136,23 +3136,6 @@ gtk_label_clear_layout (GtkLabel *label) } } -static PangoFontMetrics * -get_font_metrics (PangoContext *context, GtkWidget *widget) -{ - GtkStyleContext *style_context; - const PangoFontDescription *font; - PangoFontMetrics *retval; - - style_context = gtk_widget_get_style_context (widget); - font = gtk_style_context_get_font (style_context, GTK_STATE_FLAG_NORMAL); - - retval = pango_context_get_metrics (context, - font, - pango_context_get_language (context)); - - return retval; -} - /** * gtk_label_get_measuring_layout: * @label: the label @@ -3485,7 +3468,9 @@ get_char_pixels (GtkWidget *label, gint char_width, digit_width; context = pango_layout_get_context (layout); - metrics = get_font_metrics (context, GTK_WIDGET (label)); + metrics = pango_context_get_metrics (context, + pango_context_get_font_description (context), + pango_context_get_language (context)); char_width = pango_font_metrics_get_approximate_char_width (metrics); digit_width = pango_font_metrics_get_approximate_digit_width (metrics); pango_font_metrics_unref (metrics); @@ -3826,37 +3811,10 @@ gtk_label_state_flags_changed (GtkWidget *widget, gtk_label_update_cursor (label); } - /* We have to clear the layout, fonts etc. may have changed */ - gtk_label_clear_layout (label); - if (GTK_WIDGET_CLASS (gtk_label_parent_class)->state_flags_changed) GTK_WIDGET_CLASS (gtk_label_parent_class)->state_flags_changed (widget, prev_state); } -static void -gtk_label_style_updated (GtkWidget *widget) -{ - GtkLabel *label = GTK_LABEL (widget); - - GTK_WIDGET_CLASS (gtk_label_parent_class)->style_updated (widget); - - /* We have to clear the layout, fonts etc. may have changed */ - gtk_label_clear_layout (label); -} - -static void -gtk_label_direction_changed (GtkWidget *widget, - GtkTextDirection previous_dir) -{ - GtkLabel *label = GTK_LABEL (widget); - GtkLabelPrivate *priv = label->priv; - - if (priv->layout) - pango_layout_context_changed (priv->layout); - - GTK_WIDGET_CLASS (gtk_label_parent_class)->direction_changed (widget, previous_dir); -} - static void get_layout_location (GtkLabel *label, gint *xp, @@ -5026,7 +4984,7 @@ gtk_label_create_window (GtkLabel *label) priv->select_info->window = gdk_window_new (gtk_widget_get_window (widget), &attributes, attributes_mask); - gdk_window_set_user_data (priv->select_info->window, widget); + gtk_widget_register_window (widget, priv->select_info->window); if (attributes_mask & GDK_WA_CURSOR) g_object_unref (attributes.cursor); @@ -5042,7 +5000,7 @@ gtk_label_destroy_window (GtkLabel *label) if (priv->select_info->window == NULL) return; - gdk_window_set_user_data (priv->select_info->window, NULL); + gtk_widget_unregister_window (GTK_WIDGET (label), priv->select_info->window); gdk_window_destroy (priv->select_info->window); priv->select_info->window = NULL; }