[gtk/stringlist] dropdown: Avoid need for an expression



commit d55a13cc0ed4f22d6c625f146b0c433372f7acfc
Author: Matthias Clasen <mclasen redhat com>
Date:   Mon Jun 22 22:10:52 2020 -0400

    dropdown: Avoid need for an expression
    
    Make gtk_drop_down_set_from_string work without
    a special expression, This will make it easier
    to set up dropdowns from ui files.

 gtk/gtkdropdown.c | 25 +++++++++++++------------
 1 file changed, 13 insertions(+), 12 deletions(-)
---
diff --git a/gtk/gtkdropdown.c b/gtk/gtkdropdown.c
index 3e8cbff0fe..7cdaea644b 100644
--- a/gtk/gtkdropdown.c
+++ b/gtk/gtkdropdown.c
@@ -578,20 +578,26 @@ bind_item (GtkSignalListItemFactory *factory,
   GtkWidget *label;
   GValue value = G_VALUE_INIT;
 
-  if (self->expression == NULL)
-    {
-      g_critical ("Either GtkDropDown:factory or GtkDropDown:expression must be set");
-      return;
-    }
-
   item = gtk_list_item_get_item (list_item);
   label = gtk_list_item_get_child (list_item);
 
-  if (gtk_expression_evaluate (self->expression, item, &value))
+  if (self->expression &&
+      gtk_expression_evaluate (self->expression, item, &value))
     {
       gtk_label_set_label (GTK_LABEL (label), g_value_get_string (&value));
       g_value_unset (&value);
     }
+  else if (GTK_IS_STRING_OBJECT (item))
+    {
+      const char *string;
+
+      string = gtk_string_object_get_string (GTK_STRING_OBJECT (item));
+      gtk_label_set_label (GTK_LABEL (label), string);
+    }
+  else
+    {
+      g_critical ("Either GtkDropDown:factory or GtkDropDown:expression must be set");
+    }
 }
 
 static void
@@ -956,7 +962,6 @@ void
 gtk_drop_down_set_from_strings (GtkDropDown       *self,
                                 const char *const *texts)
 {
-  GtkExpression *expression;
   GListModel *model;
 
   g_return_if_fail (GTK_IS_DROP_DOWN (self));
@@ -964,10 +969,6 @@ gtk_drop_down_set_from_strings (GtkDropDown       *self,
 
   set_default_factory (self);
 
-  expression = gtk_property_expression_new (GTK_TYPE_STRING_OBJECT, NULL, "string");
-  gtk_drop_down_set_expression (self, expression);
-  gtk_expression_unref (expression);
-
   model = G_LIST_MODEL (gtk_string_list_new_from_strv ((const char **)texts));
   gtk_drop_down_set_model (self, model);
   g_object_unref (model);


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