+2009-05-05 Claudio Saavedra <csaavedra@igalia.com>
+
+ * hildon/hildon-touch-selector.c
+ (+on_row_changed): Emit HildonTouchSelector:changed when the
+ contents of a selected row change.
+ (_create_new_column), (_hildon_touch_selector_set_model): connect
+ to GtkTreeModel:row-changed on a newly set model.
+
+ Fixes: NB#114253 (HildonPickerButton not refreshing its value)
+
2009-05-05 Alberto Garcia <agarcia@igalia.com>
Based on a patch by Mox Soini (ext-mox.soini@nokia.com)
on_realize_cb (GtkWidget *widget,
gpointer data);
static void
+on_row_changed (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ gpointer userdata);
+
+static void
hildon_touch_selector_scroll_to (HildonTouchSelectorColumn *column,
GtkTreeView *tv,
GtkTreePath *path);
GTK_WIDGET_UNSET_FLAGS (GTK_WIDGET (tv), GTK_CAN_FOCUS);
gtk_tree_view_set_model (tv, model);
+ g_signal_connect (model, "row-changed",
+ G_CALLBACK (on_row_changed), selector);
gtk_tree_view_set_rules_hint (tv, TRUE);
gtk_tree_view_append_column (GTK_TREE_VIEW (tv), tree_column);
}
static void
+on_row_changed (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ gpointer userdata)
+{
+ HildonTouchSelector *selector;
+ HildonTouchSelectorColumn *current_column;
+
+ gint column = 0;
+ GSList *col;
+
+ selector = HILDON_TOUCH_SELECTOR (userdata);
+
+ for (col = selector->priv->columns; col != NULL; col = col->next) {
+ current_column = HILDON_TOUCH_SELECTOR_COLUMN (col->data);
+ if (current_column->priv->model == model &&
+ gtk_tree_selection_path_is_selected (gtk_tree_view_get_selection (current_column->priv->tree_view),
+ path)) {
+ hildon_touch_selector_emit_value_changed (selector, column);
+ }
+ column ++;
+ }
+}
+
+static void
_hildon_touch_selector_set_model (HildonTouchSelector * selector,
gint column, GtkTreeModel * model)
{
current_column =
HILDON_TOUCH_SELECTOR_COLUMN (g_slist_nth_data (selector->priv->columns, column));
+ if (current_column->priv->model) {
+ g_signal_handlers_disconnect_by_func (current_column->priv->model,
+ on_row_changed, selector);
+ }
current_column->priv->model = model;
gtk_tree_view_set_model (current_column->priv->tree_view,
current_column->priv->model);
+ g_signal_connect (model, "row-changed",
+ G_CALLBACK (on_row_changed), selector);
}
/**