[maemo-commits] [maemo-commits] r17094 - in projects/haf/trunk/gtk+: . gtk tests
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Mon Jan 12 13:38:20 EET 2009
- Previous message: [maemo-commits] r17093 - in projects/haf/trunk/sapwood: . engine
- Next message: [maemo-commits] r17095 - in projects/haf/trunk/libmatchbox2: . matchbox/comp-mgr
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: kris Date: 2009-01-12 13:38:18 +0200 (Mon, 12 Jan 2009) New Revision: 17094 Modified: projects/haf/trunk/gtk+/ChangeLog projects/haf/trunk/gtk+/gtk/gtktreeprivate.h projects/haf/trunk/gtk+/gtk/gtktreeview.c projects/haf/trunk/gtk+/tests/testhildontreeview.c Log: 2009-01-12 Kristian Rietveld <kris at imendio.com> Fixes: NB#91657 - HildonPickerDialog closes immediatly when used with some dynamic tree model * gtk/gtktreeview.c (gtk_tree_view_class_init): add "hildon-row-tapped" signal, (gtk_tree_view_button_press): set queued_tapped_row to the last row pressed, (gtk_tree_view_button_release): emit "hildon-row-tapped" if the queued_tapped_row row reference still exists, (gtk_tree_view_init), (gtk_tree_view_destroy), (gtk_tree_view_bin_motion), (gtk_tree_view_set_model), (gtk_tree_view_maybe_begin_dragging_row), (gtk_tree_view_grab_notify): maintain queued_tapped_row. * gtk/gtktreeprivate.h: add queued_tapped_row. * tests/testhildontreeview.c (hildon_row_tapped): display message as soon as a "hildon-row-tapped" signal is received. Modified: projects/haf/trunk/gtk+/ChangeLog =================================================================== --- projects/haf/trunk/gtk+/ChangeLog 2009-01-12 10:53:31 UTC (rev 17093) +++ projects/haf/trunk/gtk+/ChangeLog 2009-01-12 11:38:18 UTC (rev 17094) @@ -1,3 +1,24 @@ +2009-01-12 Kristian Rietveld <kris at imendio.com> + + Fixes: NB#91657 - HildonPickerDialog closes immediatly when used + with some dynamic tree model + + * gtk/gtktreeview.c (gtk_tree_view_class_init): add + "hildon-row-tapped" signal, + (gtk_tree_view_button_press): set queued_tapped_row to the + last row pressed, + (gtk_tree_view_button_release): emit "hildon-row-tapped" if + the queued_tapped_row row reference still exists, + (gtk_tree_view_init), (gtk_tree_view_destroy), + (gtk_tree_view_bin_motion), (gtk_tree_view_set_model), + (gtk_tree_view_maybe_begin_dragging_row), + (gtk_tree_view_grab_notify): maintain queued_tapped_row. + + * gtk/gtktreeprivate.h: add queued_tapped_row. + + * tests/testhildontreeview.c (hildon_row_tapped): display + message as soon as a "hildon-row-tapped" signal is received. + 2009-01-12 Claudio Saavedra <csaavedra at igalia.com> Merged from trunk: Modified: projects/haf/trunk/gtk+/gtk/gtktreeprivate.h =================================================================== --- projects/haf/trunk/gtk+/gtk/gtktreeprivate.h 2009-01-12 10:53:31 UTC (rev 17093) +++ projects/haf/trunk/gtk+/gtk/gtktreeprivate.h 2009-01-12 11:38:18 UTC (rev 17094) @@ -278,6 +278,7 @@ GtkTreeRowReference *queued_select_row; GtkTreeRowReference *queued_expand_row; GtkTreeRowReference *queued_activate_row; + GtkTreeRowReference *queued_tapped_row; GtkRBNode *highlighted_node; GtkRBTree *highlighted_tree; Modified: projects/haf/trunk/gtk+/gtk/gtktreeview.c =================================================================== --- projects/haf/trunk/gtk+/gtk/gtktreeview.c 2009-01-12 10:53:31 UTC (rev 17093) +++ projects/haf/trunk/gtk+/gtk/gtktreeview.c 2009-01-12 11:38:18 UTC (rev 17094) @@ -128,6 +128,7 @@ START_INTERACTIVE_SEARCH, #ifdef MAEMO_CHANGES ROW_INSENSITIVE, + HILDON_ROW_TAPPED, #endif /* MAEMO_CHANGES */ LAST_SIGNAL }; @@ -1218,6 +1219,16 @@ _gtk_marshal_VOID__OBJECT, G_TYPE_NONE, 1, GTK_TYPE_TREE_PATH); + + tree_view_signals[HILDON_ROW_TAPPED] = + g_signal_new ("hildon_row_tapped", + G_TYPE_FROM_CLASS (o_class), + G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, + 0, + NULL, NULL, + _gtk_marshal_VOID__BOXED, + G_TYPE_NONE, 1, + GTK_TYPE_TREE_PATH); #endif /* MAEMO_CHANGES */ /* Key bindings */ @@ -1496,6 +1507,7 @@ tree_view->priv->queued_select_row = NULL; tree_view->priv->queued_expand_row = NULL; tree_view->priv->queued_activate_row = NULL; + tree_view->priv->queued_tapped_row = NULL; tree_view->priv->highlighted_node = NULL; tree_view->priv->highlighted_tree = NULL; @@ -1799,6 +1811,12 @@ gtk_tree_row_reference_free (tree_view->priv->queued_activate_row); tree_view->priv->queued_activate_row = NULL; } + + if (tree_view->priv->queued_tapped_row != NULL) + { + gtk_tree_row_reference_free (tree_view->priv->queued_tapped_row); + tree_view->priv->queued_tapped_row = NULL; + } #endif /* MAEMO_CHANGES */ if (tree_view->priv->column_drop_func_data && @@ -3007,6 +3025,14 @@ gtk_tree_view_column_focus_cell (column, focus_cell); #ifdef MAEMO_CHANGES + /* The most reliable way is to use another row reference, + * instead of trying to get it done with the intricate + * logic below. + */ + gtk_tree_row_reference_free (tree_view->priv->queued_tapped_row); + tree_view->priv->queued_tapped_row = + gtk_tree_row_reference_new (tree_view->priv->model, path); + if (mode == HILDON_FREMANTLE && tree_view->priv->hildon_ui_mode == HILDON_UI_MODE_NORMAL) { @@ -3528,6 +3554,24 @@ gtk_tree_row_reference_free (tree_view->priv->queued_expand_row); tree_view->priv->queued_expand_row = NULL; } + + /* The hildon-row-tapped signal is executed as the last, so that + * any action (selection change, activation, expansion/collapse) + * has already been processed. + */ + if (gtk_tree_row_reference_valid (tree_view->priv->queued_tapped_row)) + { + GtkTreePath *path; + + path = gtk_tree_row_reference_get_path (tree_view->priv->queued_tapped_row); + g_signal_emit (tree_view, tree_view_signals[HILDON_ROW_TAPPED], + 0, path); + + gtk_tree_path_free (path); + + gtk_tree_row_reference_free (tree_view->priv->queued_tapped_row); + tree_view->priv->queued_tapped_row = NULL; + } #endif /* MAEMO_CHANGES */ if (tree_view->priv->button_pressed_node == NULL) @@ -4621,6 +4665,9 @@ gtk_tree_row_reference_free (tree_view->priv->queued_expand_row); tree_view->priv->queued_expand_row = NULL; + gtk_tree_row_reference_free (tree_view->priv->queued_tapped_row); + tree_view->priv->queued_tapped_row = NULL; + free_queued_activate_row (tree_view); if (mode == HILDON_DIABLO @@ -4664,6 +4711,9 @@ free_queued_activate_row (tree_view); else if (tree_view->priv->hildon_ui_mode == HILDON_UI_MODE_EDIT) free_queued_select_row (tree_view); + + gtk_tree_row_reference_free (tree_view->priv->queued_tapped_row); + tree_view->priv->queued_tapped_row = NULL; } #endif /* MAEMO_CHANGES */ @@ -8081,6 +8131,12 @@ tree_view->priv->queued_expand_row = NULL; } + if (tree_view->priv->queued_tapped_row) + { + gtk_tree_row_reference_free (tree_view->priv->queued_tapped_row); + tree_view->priv->queued_tapped_row = NULL; + } + free_queued_select_row (tree_view); free_queued_activate_row (tree_view); #endif /* MAEMO_CHANGES */ @@ -12101,6 +12157,8 @@ tree_view->priv->queued_activate_row = NULL; gtk_tree_row_reference_free (tree_view->priv->queued_expand_row); tree_view->priv->queued_expand_row = NULL; + gtk_tree_row_reference_free (tree_view->priv->queued_tapped_row); + tree_view->priv->queued_tapped_row = NULL; #endif /* MAEMO_CHANGES */ tree_view->priv->scroll_to_column = NULL; @@ -16603,6 +16661,12 @@ tree_view->priv->queued_expand_row = NULL; } + if (tree_view->priv->queued_tapped_row) + { + gtk_tree_row_reference_free (tree_view->priv->queued_tapped_row); + tree_view->priv->queued_tapped_row = NULL; + } + free_queued_activate_row (tree_view); #endif /* MAEMO_CHANGES */ } Modified: projects/haf/trunk/gtk+/tests/testhildontreeview.c =================================================================== --- projects/haf/trunk/gtk+/tests/testhildontreeview.c 2009-01-12 10:53:31 UTC (rev 17093) +++ projects/haf/trunk/gtk+/tests/testhildontreeview.c 2009-01-12 11:38:18 UTC (rev 17094) @@ -49,10 +49,22 @@ GtkTreeViewColumn *column, gpointer user_data) { - g_print ("row-activated emitted.\n"); + gchar *str = gtk_tree_path_to_string (path); + g_print ("row-activated emitted at %s.\n", str); + g_free (str); } static void +hildon_row_tapped (GtkWidget *tree_view, + GtkTreePath *path, + gpointer user_data) +{ + gchar *str = gtk_tree_path_to_string (path); + g_print ("hildon-row-tapped emitted at %s.\n", str); + g_free (str); +} + +static void row_insensitive_callback (GtkWidget *tree_view, GtkTreePath *path, gpointer user_data) @@ -164,6 +176,8 @@ G_CALLBACK (row_activated_callback), NULL); g_signal_connect (tree_view, "row-insensitive", G_CALLBACK (row_insensitive_callback), NULL); + g_signal_connect (tree_view, "hildon-row-tapped", + G_CALLBACK (hildon_row_tapped), NULL); gtk_widget_set_size_request (tree_view, 480, 800); gtk_container_add (GTK_CONTAINER (sw), tree_view);
- Previous message: [maemo-commits] r17093 - in projects/haf/trunk/sapwood: . engine
- Next message: [maemo-commits] r17095 - in projects/haf/trunk/libmatchbox2: . matchbox/comp-mgr
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]