* hildon-widgets/hildon-grid-item.c (hildon_grid_item_set_property), (hildon_grid_ite...
authorMarius Vollmer <marius.vollmer@nokia.com>
Mon, 24 Apr 2006 17:26:08 +0000 (17:26 +0000)
committerMarius Vollmer <marius.vollmer@nokia.com>
Mon, 24 Apr 2006 17:26:08 +0000 (17:26 +0000)
ChangeLog
hildon-widgets/hildon-grid-item.c
hildon-widgets/hildon-grid-item.h
ut/hildon-widgets_tests.c

index 99852c2..30deefe 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
        static helper function.
        * ut/hildon-widgets_tests.c (test46): New.
 
+       * hildon-widgets/hildon-grid-item.c
+       (hildon_grid_item_set_property), (hildon_grid_item_get_property),
+       (hildon_grid_item_class_init): Add icon-basename property.
+       (hildon_grid_item_new, hildon_grid_item_new_with_label): Move code
+       from here to hildon_grid_item_init(), so we can just call
+       g_object_new().
+       (hildon_grid_item_set_label): Convert NULL label to empty string.
+       Bug fix: don't cast the label widget to a string and compare it
+       against the new label text, use gtk_label_get_label instead.
+       Expect priv->label to always be non-NULL.
+       (update_icon): Don't pass NULL icon name to
+       gtk_icon_theme_load_icon, use default icon instead in that case.
+       * hildon-widgets/hildon-grid-item.h: Make
+       _hildon_grid_item_set_label into public
+       hildon_grid_item_set_label(), so that language bindings can use
+       it.
+       * ut/hildon-widgets_tests.c (VALID_ICON): Use existing icon.
+       (test33a2, test33b4, test33b4): Expect them to succeed now that a
+       HildonGridItem can handle NULL icons.
+       
 2006-04-21  Luc Pionchon  <luc.pionchon@nokia.com>
 
        * configure.ac: 0.12.11
index dc9c9a0..0a4dee4 100644 (file)
@@ -108,7 +108,8 @@ struct _HildonGridItemPrivate {
 
 enum{
     PROP_NONE = 0,
-    PROP_EMBLEM_TYPE
+    PROP_EMBLEM_TYPE,
+    PROP_ICON_BASENAME
 };
 
 /* Prototypes. */
@@ -162,6 +163,14 @@ hildon_grid_item_set_property(GObject * object,
   case PROP_EMBLEM_TYPE:
     hildon_grid_item_set_emblem_type(item, g_value_get_string(value));
     break;
+  case PROP_ICON_BASENAME:
+    if(priv->icon_basename)
+      g_free(priv->icon_basename);
+
+    priv->icon_basename = g_strdup(g_value_get_string(value));
+    update_icon(item);
+
+    break;
   default:
     G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
     break;
@@ -184,6 +193,9 @@ hildon_grid_item_get_property(GObject * object,
       string = hildon_grid_item_get_emblem_type(item);
       g_value_set_string(value, string);
       break;
+    case PROP_ICON_BASENAME:
+      g_value_set_string(value, priv->icon_basename);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
       break;
@@ -251,6 +263,15 @@ hildon_grid_item_class_init(HildonGridItemClass *klass)
                            "The emblem's basename",
                            NULL,
                            G_PARAM_WRITABLE));
+
+    g_object_class_install_property 
+      (gobject_class, 
+       PROP_ICON_BASENAME, 
+       g_param_spec_string ("icon-basename",
+          "Icon Basename",
+          "The icon's basename",
+          NULL,
+          G_PARAM_WRITABLE));
   
 }
 
@@ -280,6 +301,18 @@ hildon_grid_item_init(HildonGridItem *item)
     priv->pending_icon_width = priv->icon_width = 64;
     priv->pending_icon_height = priv->icon_height = 54;
     priv->pending_label_height = priv->label_height = 30;
+
+
+    GTK_WIDGET_SET_FLAGS(GTK_WIDGET(item), GTK_CAN_FOCUS);
+
+    priv->label = gtk_label_new(NULL);
+    gtk_widget_set_name(priv->label, "hildon-grid-item-label");
+    gtk_widget_set_parent(priv->label, GTK_WIDGET(item));
+
+    update_icon(item);
+    set_label_justify(item);
+
+    gtk_widget_show(priv->label);
 }
 
 /**
@@ -294,22 +327,8 @@ GtkWidget *
 hildon_grid_item_new(const gchar *icon_basename)
 {
     HildonGridItem *item;
-    HildonGridItemPrivate *priv;
-
-    item = g_object_new(HILDON_TYPE_GRID_ITEM, NULL);
-    GTK_WIDGET_SET_FLAGS(GTK_WIDGET(item), GTK_CAN_FOCUS);
-
-    priv = HILDON_GRID_ITEM_GET_PRIVATE(item);
-    priv->icon_basename = g_strdup(icon_basename);
 
-    priv->label = gtk_label_new("");
-    gtk_widget_set_parent(priv->label, GTK_WIDGET(item));
-    gtk_widget_set_name(priv->label, "hildon-grid-item-label");
-
-    update_icon(item);
-    set_label_justify(item);
-
-    gtk_widget_show(priv->label);
+    item = g_object_new(HILDON_TYPE_GRID_ITEM, "icon-basename", icon_basename, NULL);
 
     return GTK_WIDGET(item);
 }
@@ -328,23 +347,10 @@ hildon_grid_item_new_with_label(const gchar *icon_basename,
                                 const gchar *label)
 {
     HildonGridItem *item;
-    HildonGridItemPrivate *priv;
-
-
-    item = g_object_new(HILDON_TYPE_GRID_ITEM, NULL);
-    GTK_WIDGET_SET_FLAGS(GTK_WIDGET(item), GTK_CAN_FOCUS);
-
-    priv = HILDON_GRID_ITEM_GET_PRIVATE(item);
-    priv->icon_basename = g_strdup(icon_basename);
-
-    priv->label = gtk_label_new(label != NULL ? label : "");
-    gtk_widget_set_name(priv->label, "hildon-grid-item-label");
-    gtk_widget_set_parent(priv->label, GTK_WIDGET(item));
 
-    update_icon(item);
-    set_label_justify(item);
+    item = g_object_new(HILDON_TYPE_GRID_ITEM,  "icon-basename", icon_basename, NULL);
 
-    gtk_widget_show(priv->label);
+    hildon_grid_item_set_label(item, label);
 
     return GTK_WIDGET(item);
 }
@@ -369,16 +375,22 @@ update_icon(HildonGridItem *item)
 
     icon_theme = gtk_icon_theme_get_default();
 
-    /* Load icon. Fall to default it loading fails. */
-    error = NULL;
-    icon = gtk_icon_theme_load_icon(icon_theme,
-                                    priv->icon_basename,
-                                    priv->icon_size, 0, &error);
-    if (icon == NULL) {
-        g_warning("Couldn't load icon \"%s\": %s", priv->icon_basename,
-                  error->message);
-        g_error_free(error);
+    /* Load icon. Fall to default if loading fails. */
+    icon = NULL;
+    if (priv->icon_basename)
+      {
+       error = NULL;
+       icon = gtk_icon_theme_load_icon(icon_theme,
+                                       priv->icon_basename,
+                                       priv->icon_size, 0, &error);
+       if (icon == NULL) {
+         g_warning("Couldn't load icon \"%s\": %s", priv->icon_basename,
+                   error->message);
+         g_error_free(error);
+       }
+      }
 
+    if (icon == NULL) {
         error = NULL;
         icon = gtk_icon_theme_load_icon(icon_theme,
                                         DEFAULT_ICON_BASENAME,
@@ -449,18 +461,18 @@ update_icon(HildonGridItem *item)
 }
 
 void
-_hildon_grid_item_set_label(HildonGridItem *item, const gchar *label)
+hildon_grid_item_set_label(HildonGridItem *item, const gchar *label)
 {
     HildonGridItemPrivate *priv;
 
     g_return_if_fail(HILDON_IS_GRID_ITEM(item));
 
+    if (label == NULL)
+      label = "";
+
     priv = HILDON_GRID_ITEM_GET_PRIVATE(item);
-    if ((priv->label == NULL && label == NULL) ||
-        (priv->label != NULL && label != NULL &&
-         strcmp((char *) priv->label, (char *) label) == 0)) {
-        return;
-    }
+    if (strcmp (gtk_label_get_label (GTK_LABEL (priv->label)), label) == 0)
+      return;
     gtk_label_set_label(GTK_LABEL(priv->label), label);
 }
 
index fa3c5de..ca09525 100644 (file)
@@ -85,6 +85,7 @@ GtkWidget *hildon_grid_item_new_with_label(const gchar * icon_basename,
 void hildon_grid_item_set_emblem_type(HildonGridItem * item,
                                       const gchar * emblem_basename);
 const gchar *hildon_grid_item_get_emblem_type(HildonGridItem * item);
+void hildon_grid_item_set_label(HildonGridItem *item, const gchar *label);
 
 
 G_END_DECLS
index 9ae483e..ae93bd1 100644 (file)
@@ -54,7 +54,7 @@
 #include <outo.h>
 
 /* Icon which must exist (HildonGridItem). */
-#define VALID_ICON  "Help"
+#define VALID_ICON  "qgn_list_gene_default_app"
 
 /*prototypes to keep the compiler happy*/
 testcase *get_tests(void);
@@ -3148,11 +3148,11 @@ testcase tcases[] =
     {*test32a, "hildon_rename_dialog: ok", EXPECT_OK},
     {*test32b, "hildon_rename_dialog: NULL(ok)", EXPECT_OK},
     {*test33a1, "grid_item_new (\"foo\")", EXPECT_OK},
-    {*test33a2, "grid_item_new (NULL)", EXPECT_ASSERT},
+    {*test33a2, "grid_item_new (NULL)", EXPECT_OK},
     {*test33b1, "grid_item_new_label (\"foo\", \"bar\")", EXPECT_OK},
     {*test33b2, "grid_item_new_label (\"foo\", NULL)", EXPECT_OK},
-    {*test33b3, "grid_item_new_label (NULL, \"bar\")", EXPECT_ASSERT},
-    {*test33b4, "grid_item_new_label (NULL, NULL)", EXPECT_ASSERT},
+    {*test33b3, "grid_item_new_label (NULL, \"bar\")", EXPECT_OK},
+    {*test33b4, "grid_item_new_label (NULL, NULL)", EXPECT_OK},
     {*test33c1, "grid_item_set_emblem (foo, \"bar\")", EXPECT_OK},
     {*test33c2, "grid_item_set_emblem (foo, NULL)", EXPECT_OK},
     {*test33c3, "grid_item_set_emblem (NULL, \"bar\")", EXPECT_ASSERT},