gtk+ r20286 - in branches/gtk-2-12: . gtk



Author: matthiasc
Date: Mon Jun  2 22:14:41 2008
New Revision: 20286
URL: http://svn.gnome.org/viewvc/gtk+?rev=20286&view=rev

Log:
        Bug 56355 â GtkLabel - Not all changes propagate correctly

        * gtk/gtklabel.c: (gtk_label_recalculate), (gtk_label_set_label),
        (gtk_label_set_markup_with_mnemonic), (gtk_label_parse_uline),
        (gtk_label_set_text_with_mnemonic), (gtk_label_set_use_underline):
        Call gtk_label_setup_mnemonic from gtk_label_recalculate. Add
        notifications of mnemonic-keyval changes.



Modified:
   branches/gtk-2-12/ChangeLog
   branches/gtk-2-12/gtk/gtklabel.c

Modified: branches/gtk-2-12/gtk/gtklabel.c
==============================================================================
--- branches/gtk-2-12/gtk/gtklabel.c	(original)
+++ branches/gtk-2-12/gtk/gtklabel.c	Mon Jun  2 22:14:41 2008
@@ -1213,6 +1213,8 @@
 static void
 gtk_label_recalculate (GtkLabel *label)
 {
+  guint keyval = label->mnemonic_keyval;
+
   if (label->use_markup)
     set_markup (label, label->label, label->use_underline);
   else
@@ -1231,11 +1233,12 @@
     }
 
   if (!label->use_underline)
-    {
-      guint keyval = label->mnemonic_keyval;
+    label->mnemonic_keyval = GDK_VoidSymbol;
 
-      label->mnemonic_keyval = GDK_VoidSymbol;
+  if (keyval != label->mnemonic_keyval)
+    {
       gtk_label_setup_mnemonic (label, keyval);
+      g_object_notify (G_OBJECT (label), "mnemonic-keyval");
     }
 
   gtk_label_clear_layout (label);  
@@ -1326,19 +1329,13 @@
 gtk_label_set_label (GtkLabel    *label,
 		     const gchar *str)
 {
-  guint last_keyval;
-
   g_return_if_fail (GTK_IS_LABEL (label));
   g_return_if_fail (str != NULL);
 
   g_object_freeze_notify (G_OBJECT (label));
 
-  last_keyval = label->mnemonic_keyval;
-
   gtk_label_set_label_internal (label, g_strdup (str));
   gtk_label_recalculate (label);
-  if (last_keyval != label->mnemonic_keyval)
-    gtk_label_setup_mnemonic (label, last_keyval);
 
   g_object_thaw_notify (G_OBJECT (label));
 }
@@ -1454,18 +1451,15 @@
 gtk_label_set_markup_with_mnemonic (GtkLabel    *label,
 				    const gchar *str)
 {
-  guint last_keyval;
   g_return_if_fail (GTK_IS_LABEL (label));
 
   g_object_freeze_notify (G_OBJECT (label));
 
-  last_keyval = label->mnemonic_keyval;
   gtk_label_set_label_internal (label, g_strdup (str ? str : ""));
   gtk_label_set_use_markup_internal (label, TRUE);
   gtk_label_set_use_underline_internal (label, TRUE);
   
   gtk_label_recalculate (label);
-  gtk_label_setup_mnemonic (label, last_keyval);
 
   g_object_thaw_notify (G_OBJECT (label));
 }
@@ -2672,13 +2666,10 @@
 		       const gchar *str)
 {
   guint keyval;
-  guint orig_keyval;
   
   g_return_val_if_fail (GTK_IS_LABEL (label), GDK_VoidSymbol);
   g_return_val_if_fail (str != NULL, GDK_VoidSymbol);
 
-  orig_keyval = label->mnemonic_keyval;
-
   g_object_freeze_notify (G_OBJECT (label));
   
   gtk_label_set_label_internal (label, g_strdup (str ? str : ""));
@@ -2688,9 +2679,12 @@
   gtk_label_recalculate (label);
 
   keyval = label->mnemonic_keyval;
-  label->mnemonic_keyval = GDK_VoidSymbol;
-  
-  gtk_label_setup_mnemonic (label, orig_keyval);
+  if (keyval != GDK_VoidSymbol)
+    {
+      label->mnemonic_keyval = GDK_VoidSymbol;
+      gtk_label_setup_mnemonic (label, keyval);
+      g_object_notify (G_OBJECT (label), "mnemonic-keyval");
+    }
   
   g_object_thaw_notify (G_OBJECT (label));
 
@@ -2717,8 +2711,6 @@
   g_return_if_fail (GTK_IS_LABEL (label));
   g_return_if_fail (str != NULL);
 
-  last_keyval = label->mnemonic_keyval;
-
   g_object_freeze_notify (G_OBJECT (label));
 
   gtk_label_set_label_internal (label, g_strdup (str ? str : ""));
@@ -2727,8 +2719,6 @@
   
   gtk_label_recalculate (label);
 
-  gtk_label_setup_mnemonic (label, last_keyval);
-
   g_object_thaw_notify (G_OBJECT (label));
 }
 
@@ -3672,8 +3662,6 @@
 
   gtk_label_set_use_underline_internal (label, setting);
   gtk_label_recalculate (label);
-  if (label->use_underline)
-    gtk_label_setup_mnemonic (label, label->mnemonic_keyval);
 }
 
 /**



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]