- 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 in the selector. Nothing to show.");
+ } else {
+ g_signal_connect (priv->dialog, "response",
+ G_CALLBACK (hildon_picker_button_on_dialog_response),
+ button);
+ g_signal_connect (priv->dialog, "delete-event",
+ G_CALLBACK (gtk_widget_hide_on_delete),
+ NULL);
+ gtk_window_present (GTK_WINDOW (priv->dialog));
+ }
+}
+
+static void
+hildon_picker_button_selector_selection_changed (HildonTouchSelector * selector,
+ gint column,
+ gpointer user_data)
+
+{
+ gchar *value;
+ HildonPickerButton *button = HILDON_PICKER_BUTTON (user_data);
+ HildonPickerButtonPrivate *priv = GET_PRIVATE (button);
+
+ if (!GTK_IS_WINDOW (priv->dialog) ||
+ !GTK_WIDGET_VISIBLE (GTK_WINDOW (priv->dialog))) {
+ value = hildon_touch_selector_get_current_text (HILDON_TOUCH_SELECTOR (priv->selector));
+ if (value) {
+ hildon_button_set_value (HILDON_BUTTON (button), value);
+ g_free (value);
+ g_signal_emit (HILDON_PICKER_BUTTON (button),
+ picker_button_signals[VALUE_CHANGED], 0);
+ }