+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,
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)
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
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.
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);
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;
}
}
-
-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,