[gtk/matthiasc/for-master: 1/2] label: Avoid short-circuiting




commit d347df431d6754b65c2ef9f8aad4beb36e1fcf6b
Author: Matthias Clasen <mclasen redhat com>
Date:   Fri Nov 13 15:35:51 2020 -0500

    label: Avoid short-circuiting
    
    Commit 0db504edde63eb77e made a mistake described here:
    https://en.wikipedia.org/wiki/Short-circuit_evaluation#Possible_problems
    
    Fixes: #3359

 gtk/gtklabel.c | 46 +++++++++++++++++++++++++++++++---------------
 1 file changed, 31 insertions(+), 15 deletions(-)
---
diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c
index 3d82096bfb..3e6cd97bb9 100644
--- a/gtk/gtklabel.c
+++ b/gtk/gtklabel.c
@@ -1802,13 +1802,17 @@ void
 gtk_label_set_text (GtkLabel    *self,
                     const char *str)
 {
+  gboolean changed;
+
   g_return_if_fail (GTK_IS_LABEL (self));
 
   g_object_freeze_notify (G_OBJECT (self));
 
-  if (gtk_label_set_label_internal (self, str) ||
-      gtk_label_set_use_markup_internal (self, FALSE) ||
-      gtk_label_set_use_underline_internal (self, FALSE))
+  changed = gtk_label_set_label_internal (self, str);
+  changed = gtk_label_set_use_markup_internal (self, FALSE) || changed;
+  changed = gtk_label_set_use_underline_internal (self, FALSE) || changed;
+
+  if (changed)
     gtk_label_recalculate (self);
 
   g_object_thaw_notify (G_OBJECT (self));
@@ -2412,13 +2416,17 @@ void
 gtk_label_set_markup (GtkLabel    *self,
                       const char *str)
 {
+  gboolean changed;
+
   g_return_if_fail (GTK_IS_LABEL (self));
 
   g_object_freeze_notify (G_OBJECT (self));
 
-  if (gtk_label_set_label_internal (self, str) ||
-      gtk_label_set_use_markup_internal (self, TRUE) ||
-      gtk_label_set_use_underline_internal (self, FALSE))
+  changed = gtk_label_set_label_internal (self, str);
+  changed = gtk_label_set_use_markup_internal (self, TRUE) || changed;
+  changed = gtk_label_set_use_underline_internal (self, FALSE) || changed;
+
+  if (changed)
     gtk_label_recalculate (self);
 
   g_object_thaw_notify (G_OBJECT (self));
@@ -2443,13 +2451,17 @@ void
 gtk_label_set_markup_with_mnemonic (GtkLabel    *self,
                                     const char *str)
 {
+  gboolean changed;
+
   g_return_if_fail (GTK_IS_LABEL (self));
 
   g_object_freeze_notify (G_OBJECT (self));
 
-  if (gtk_label_set_label_internal (self, str) ||
-      gtk_label_set_use_markup_internal (self, TRUE) ||
-      gtk_label_set_use_underline_internal (self, TRUE))
+  changed = gtk_label_set_label_internal (self, str);
+  changed = gtk_label_set_use_markup_internal (self, TRUE) || changed;
+  changed = gtk_label_set_use_underline_internal (self, TRUE) || changed;
+
+  if (changed)
     gtk_label_recalculate (self);
 
   g_object_thaw_notify (G_OBJECT (self));
@@ -3553,25 +3565,29 @@ gtk_label_snapshot (GtkWidget   *widget,
  * gtk_label_set_text_with_mnemonic:
  * @self: a #GtkLabel
  * @str: a string
- * 
+ *
  * Sets the label’s text from the string @str.
  * If characters in @str are preceded by an underscore, they are underlined
  * indicating that they represent a keyboard accelerator called a mnemonic.
- * The mnemonic key can be used to activate another widget, chosen 
+ * The mnemonic key can be used to activate another widget, chosen
  * automatically, or explicitly using gtk_label_set_mnemonic_widget().
  **/
 void
 gtk_label_set_text_with_mnemonic (GtkLabel    *self,
-                                 const char *str)
+                                  const char *str)
 {
+  gboolean changed;
+
   g_return_if_fail (GTK_IS_LABEL (self));
   g_return_if_fail (str != NULL);
 
   g_object_freeze_notify (G_OBJECT (self));
 
-  if (gtk_label_set_label_internal (self, str) ||
-      gtk_label_set_use_markup_internal (self, FALSE) ||
-      gtk_label_set_use_underline_internal (self, TRUE))
+  changed = gtk_label_set_label_internal (self, str);
+  changed = gtk_label_set_use_markup_internal (self, FALSE) || changed;
+  changed = gtk_label_set_use_underline_internal (self, TRUE) || changed;
+
+  if (changed)
     gtk_label_recalculate (self);
 
   g_object_thaw_notify (G_OBJECT (self));


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