2008-10-09 Alejandro Pinheiro <apinheiro@igalia.com>
authorAlejandro Piñeiro <apinheiro@igalia.com>
Thu, 9 Oct 2008 14:36:43 +0000 (14:36 +0000)
committerAlejandro Piñeiro <apinheiro@igalia.com>
Thu, 9 Oct 2008 14:36:43 +0000 (14:36 +0000)
* src/hildon-picker-dialog.c
(hildon_picker_dialog_realize): Removed as not required
(hildon_picker_dialog_class_init): Avoid to redefine widget->realize
* src/hildon-picker-button.c
(_current_selector_empty): New function, checks if the selector is empty
(hildon_picker_button_clicked): Now it checks (using _current_selector_empty)
if the current selector is empty, in order to avoid to show the dialog
close the dialog in this case (and shows a g_warning).

Fixes: NB#88946 (Hildon Picker button should disable itself if there are no values)

ChangeLog
src/hildon-picker-button.c
src/hildon-picker-dialog.c

index 80f7cb6..353896c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2008-10-09  Alejandro Pinheiro  <apinheiro@igalia.com>
+
+       * src/hildon-picker-dialog.c
+       (hildon_picker_dialog_realize): Removed as not required
+       (hildon_picker_dialog_class_init): Avoid to redefine widget->realize
+       * src/hildon-picker-button.c
+       (_current_selector_empty): New function, checks if the selector is empty
+       (hildon_picker_button_clicked): Now it checks (using _current_selector_empty)
+       if the current selector is empty, in order to avoid to show the dialog
+       close the dialog in this case (and shows a g_warning).
+
+       Fixes: NB#88946 (Hildon Picker button should disable itself if there are no values)
+
 2008-10-09  Alejandro G. Castro         <alex@igalia.com>
 
        * src/hildon-pannable-area.c,
index 6b3e2b0..7a87778 100644 (file)
@@ -64,6 +64,11 @@ enum
 
 static guint picker_button_signals[LAST_SIGNAL] = { 0 };
 
+static gboolean
+_current_selector_empty                         (HildonPickerButton *button);
+
+
+
 static void
 hildon_picker_button_get_property (GObject * object, guint property_id,
                                    GValue * value, GParamSpec * pspec)
@@ -152,17 +157,21 @@ hildon_picker_button_clicked (GtkButton * button)
                           hildon_button_get_title (HILDON_BUTTON (button)));
   }
 
-  response = gtk_dialog_run (GTK_DIALOG (priv->dialog));
-  switch (response) {
-  case GTK_RESPONSE_OK:
-    hildon_button_set_value (HILDON_BUTTON (button),
-                             hildon_touch_selector_get_current_text
-                             (HILDON_TOUCH_SELECTOR (priv->selector)));
-    g_signal_emit (HILDON_PICKER_BUTTON (button),
-                   picker_button_signals[VALUE_CHANGED], 0);
-    break;
+  if (_current_selector_empty (HILDON_PICKER_BUTTON (button))) {
+    g_warning ("There are no elements to selects!! Not showing the dialog!!");
+  } else {
+    response = gtk_dialog_run (GTK_DIALOG (priv->dialog));
+    switch (response) {
+    case GTK_RESPONSE_OK:
+      hildon_button_set_value (HILDON_BUTTON (button),
+                               hildon_touch_selector_get_current_text
+                               (HILDON_TOUCH_SELECTOR (priv->selector)));
+      g_signal_emit (HILDON_PICKER_BUTTON (button),
+                     picker_button_signals[VALUE_CHANGED], 0);
+      break;
+    }
+    gtk_widget_hide (priv->dialog);
   }
-  gtk_widget_hide (priv->dialog);
 }
 
 static void
@@ -222,6 +231,34 @@ hildon_picker_button_init (HildonPickerButton * self)
   priv->done_button_text = NULL;
 }
 
+static gboolean
+_current_selector_empty (HildonPickerButton *button)
+{
+  HildonPickerButtonPrivate *priv;
+  HildonTouchSelector *selector = NULL;
+  GtkTreeModel *model = NULL;
+  GtkTreeIter iter;
+  gint i = 0;
+
+  priv = GET_PRIVATE (button);
+  selector = HILDON_TOUCH_SELECTOR (priv->selector);
+
+  g_return_val_if_fail (HILDON_IS_TOUCH_SELECTOR (selector), TRUE);
+
+  if (hildon_touch_selector_has_multiple_selection (selector)) {
+    return FALSE;
+  } else {
+    for (i=0; i < hildon_touch_selector_get_num_columns (selector); i++) {
+      model = hildon_touch_selector_get_model (selector, i);
+
+      if (gtk_tree_model_get_iter_first (model, &iter)) {
+        return FALSE;
+      }
+    }
+    return TRUE;
+  }
+}
+
 /**
  * hildon_picker_button_new:
  * @size: One of #HildonSizeType, specifying the size of the new button.
index 0137c7c..2a7bea8 100644 (file)
@@ -82,7 +82,6 @@ hildon_picker_dialog_get_property (GObject * object,
                                    guint prop_id,
                                    GValue * value, GParamSpec * pspec);
 /* gtkwidget */
-static void hildon_picker_dialog_realize (GtkWidget * widget);
 
 /* private functions */
 static gboolean requires_done_button (HildonPickerDialog * dialog);
@@ -117,7 +116,6 @@ hildon_picker_dialog_class_init (HildonPickerDialogClass * class)
   gobject_class->get_property = hildon_picker_dialog_get_property;
 
   /* GtkWidget */
-  widget_class->realize = hildon_picker_dialog_realize;
 
   /* HildonPickerDialog */
   class->set_selector = _hildon_picker_dialog_set_selector;
@@ -205,15 +203,6 @@ hildon_picker_dialog_get_property (GObject * object,
   }
 }
 
-
-static void
-hildon_picker_dialog_realize (GtkWidget * widget)
-{
-  GTK_WIDGET_CLASS (hildon_picker_dialog_parent_class)->realize (widget);
-
-/*   gdk_window_set_decorations (widget->window, GDK_DECOR_BORDER); */
-}
-
 /* ------------------------------ PRIVATE METHODS ---------------------------- */
 static void
 _select_on_selector_changed_cb (HildonTouchSelector * selector,