gtk+ r20237 - in trunk: . gtk



Author: jap
Date: Thu May 29 18:09:01 2008
New Revision: 20237
URL: http://svn.gnome.org/viewvc/gtk+?rev=20237&view=rev

Log:
2008-05-29  Jan Arne Petersen  <jpetersen jpetersen org>

	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:
   trunk/ChangeLog
   trunk/gtk/gtklabel.c

Modified: trunk/gtk/gtklabel.c
==============================================================================
--- trunk/gtk/gtklabel.c	(original)
+++ trunk/gtk/gtklabel.c	Thu May 29 18:09:01 2008
@@ -1558,6 +1558,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
@@ -1576,11 +1578,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);  
@@ -1671,19 +1674,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));
 }
@@ -1799,18 +1796,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));
 }
@@ -3007,13 +3001,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 : ""));
@@ -3023,9 +3014,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));
 
@@ -3052,8 +3046,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 : ""));
@@ -3062,8 +3054,6 @@
   
   gtk_label_recalculate (label);
 
-  gtk_label_setup_mnemonic (label, last_keyval);
-
   g_object_thaw_notify (G_OBJECT (label));
 }
 
@@ -4010,8 +4000,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]