[maemo-commits] [maemo-commits] r9575 - in projects/haf/branches/gtk+/maemo-gtk-2-10: . gtk
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Fri Feb 2 16:46:52 EET 2007
- Previous message: [maemo-commits] r9574 - in projects/haf/trunk/osso-gnome-vfs2/debian: . patches
- Next message: [maemo-commits] r9576 - projects/haf/tags/osso-gnome-vfs2
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: kris Date: 2007-02-02 16:46:49 +0200 (Fri, 02 Feb 2007) New Revision: 9575 Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtktreeprivate.h projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtktreeview.c Log: 2007-02-02 Kristian Rietveld <kris at imendio.com> * gtk/gtktreeprivate.h (struct _GtkTreePrivate): add queued_expand_row and queued_activate_row fields. * gtk/gtktreeview.c (gtk_tree_view_init), (gtk_tree_view_destroy), (gtk_tree_view_set_model): bookkeeping for new queued rows, (gtk_tree_view_button_press), (gtk_tree_view_button_release): handle row activation when tapping on a selected cursor row, handle expand/collapse on tap, disable double clicks, (gtk_tree_view_motion_bin_window): dequeue expand, activate and select rows. Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog =================================================================== --- projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog 2007-02-02 14:46:45 UTC (rev 9574) +++ projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog 2007-02-02 14:46:49 UTC (rev 9575) @@ -1,3 +1,16 @@ +2007-02-02 Kristian Rietveld <kris at imendio.com> + + * gtk/gtktreeprivate.h (struct _GtkTreePrivate): add + queued_expand_row and queued_activate_row fields. + + * gtk/gtktreeview.c (gtk_tree_view_init), (gtk_tree_view_destroy), + (gtk_tree_view_set_model): bookkeeping for new queued rows, + (gtk_tree_view_button_press), (gtk_tree_view_button_release): handle + row activation when tapping on a selected cursor row, handle + expand/collapse on tap, disable double clicks, + (gtk_tree_view_motion_bin_window): dequeue expand, activate and + select rows. + 2007-02-01 Michael Natterer <mitch at imendio.com> Merge from upstream trunk: Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtktreeprivate.h =================================================================== --- projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtktreeprivate.h 2007-02-02 14:46:45 UTC (rev 9574) +++ projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtktreeprivate.h 2007-02-02 14:46:49 UTC (rev 9575) @@ -267,6 +267,8 @@ #ifdef MAEMO_CHANGES /* Fields for Maemo specific functionality */ GtkTreeRowReference *queued_select_row; + GtkTreeRowReference *queued_expand_row; + GtkTreeRowReference *queued_activate_row; #endif /* MAEMO_CHANGES */ }; Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtktreeview.c =================================================================== --- projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtktreeview.c 2007-02-02 14:46:45 UTC (rev 9574) +++ projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtktreeview.c 2007-02-02 14:46:49 UTC (rev 9575) @@ -1355,6 +1355,8 @@ tree_view->priv->level_indentation = 10; tree_view->priv->queued_select_row = NULL; + tree_view->priv->queued_expand_row = NULL; + tree_view->priv->queued_activate_row = NULL; #endif /* MAEMO_CHANGES */ #ifdef MAEMO_CHANGES @@ -1614,6 +1616,18 @@ gtk_tree_row_reference_free (tree_view->priv->queued_select_row); tree_view->priv->queued_select_row = NULL; } + + if (tree_view->priv->queued_expand_row != NULL) + { + gtk_tree_row_reference_free (tree_view->priv->queued_expand_row); + tree_view->priv->queued_expand_row = NULL; + } + + if (tree_view->priv->queued_activate_row != NULL) + { + gtk_tree_row_reference_free (tree_view->priv->queued_activate_row); + tree_view->priv->queued_activate_row = NULL; + } #endif /* MAEMO_CHANGES */ if (tree_view->priv->column_drop_func_data && @@ -2695,7 +2709,23 @@ gtk_tree_view_column_focus_cell (column, focus_cell); #ifdef MAEMO_CHANGES + if (node_selected + && gtk_tree_row_reference_valid (tree_view->priv->cursor)) + { + GtkTreePath *cursor_path; + + cursor_path = gtk_tree_row_reference_get_path (tree_view->priv->cursor); + if (!gtk_tree_path_compare (cursor_path, path)) + { + gtk_tree_row_reference_free (tree_view->priv->queued_activate_row); + tree_view->priv->queued_activate_row = gtk_tree_row_reference_new (tree_view->priv->model, path); + } + + gtk_tree_path_free (cursor_path); + } + if (node_is_selectable + && !tree_view->priv->queued_activate_row && tree_view->priv->rubber_band_status == RUBBER_BAND_OFF && gtk_tree_selection_get_mode (tree_view->priv->selection) == GTK_SELECTION_MULTIPLE) { @@ -2747,7 +2777,14 @@ } else { +#ifdef MAEMO_CHANGES + if (tree_view->priv->queued_activate_row) + gtk_tree_view_real_set_cursor (tree_view, path, FALSE, TRUE); + else + gtk_tree_view_real_set_cursor (tree_view, path, TRUE, TRUE); +#else /* !MAEMO_CHANGES */ gtk_tree_view_real_set_cursor (tree_view, path, TRUE, TRUE); +#endif /* !MAEMO_CHANGES */ } tree_view->priv->ctrl_pressed = FALSE; @@ -2792,6 +2829,29 @@ } #endif /* !MAEMO_CHANGES */ +#ifdef MAEMO_CHANGES + if (event->button == 1) + { + if (GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_PARENT)) + { + /* The behavior is as follows: + * - For a tap on a collapsed node: always expand (and the + * cursor moves to it. + * - For a tap on an expxanded node: collapse if and only + * if the node is currently the cursor node. + */ + if (!node->children + || (node_selected && node->children)) + { + gtk_tree_row_reference_free (tree_view->priv->queued_expand_row); + tree_view->priv->queued_expand_row = + gtk_tree_row_reference_new (tree_view->priv->model, path); + } + } + } +#endif /* MAEMO_CHANGES */ + +#ifndef MAEMO_CHANGES /* Test if a double click happened on the same row. */ if (event->button == 1) { @@ -2839,14 +2899,17 @@ if (tree_view->priv->pressed_button == event->button) tree_view->priv->pressed_button = -1; } +#endif /* !MAEMO_CHANGES */ gtk_tree_path_free (path); +#ifndef MAEMO_CHANGES /* If we activated the row through a double click we don't want to grab * focus back, as moving focus to another widget is pretty common. */ if (!row_double_click) grab_focus_and_unset_draw_keyfocus (tree_view); +#endif /* !MAEMO_CHANGES */ return TRUE; } @@ -3026,6 +3089,58 @@ gtk_tree_row_reference_free (tree_view->priv->queued_select_row); tree_view->priv->queued_select_row = NULL; } + + if (gtk_tree_row_reference_valid (tree_view->priv->queued_activate_row)) + { + if (gtk_tree_row_reference_valid (tree_view->priv->cursor)) + { + GtkTreePath *path, *cursor_path; + + path = gtk_tree_row_reference_get_path (tree_view->priv->queued_activate_row); + cursor_path = gtk_tree_row_reference_get_path (tree_view->priv->cursor); + + if (!gtk_tree_path_compare (cursor_path, path)) + { + gtk_tree_view_row_activated (tree_view, cursor_path, + tree_view->priv->focus_column); + } + + gtk_tree_path_free (path); + gtk_tree_path_free (cursor_path); + } + + gtk_tree_row_reference_free (tree_view->priv->queued_activate_row); + tree_view->priv->queued_activate_row = NULL; + } + + if (gtk_tree_row_reference_valid (tree_view->priv->queued_expand_row)) + { + GtkTreePath *path, *cursor_path; + + path = gtk_tree_row_reference_get_path (tree_view->priv->queued_expand_row); + cursor_path = gtk_tree_row_reference_get_path (tree_view->priv->cursor); + + if (!gtk_tree_path_compare (cursor_path, path)) + { + GtkRBTree *tree; + GtkRBNode *node; + + _gtk_tree_view_find_node (tree_view, path, &tree, &node); + + if (!node->children) + gtk_tree_view_real_expand_row (tree_view, path, + tree, node, FALSE, TRUE); + else + gtk_tree_view_real_collapse_row (tree_view, path, + tree, node, TRUE); + } + + gtk_tree_path_free (path); + gtk_tree_path_free (cursor_path); + + gtk_tree_row_reference_free (tree_view->priv->queued_expand_row); + tree_view->priv->queued_expand_row = NULL; + } #endif /* MAEMO_CHANGES */ if (tree_view->priv->button_pressed_node == NULL) @@ -4086,6 +4201,26 @@ if (tree_view->priv->rubber_band_status == RUBBER_BAND_MAYBE_START) { +#ifdef MAEMO_CHANGES + 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_activate_row); + tree_view->priv->queued_activate_row = NULL; + + if (gtk_tree_row_reference_valid (tree_view->priv->queued_select_row)) + { + GtkTreePath *path; + + path = gtk_tree_row_reference_get_path (tree_view->priv->queued_select_row); + gtk_tree_view_real_set_cursor (tree_view, path, FALSE, FALSE); + + gtk_tree_path_free (path); + gtk_tree_row_reference_free (tree_view->priv->queued_select_row); + tree_view->priv->queued_select_row = NULL; + } +#endif /* MAEMO_CHANGES */ + gtk_grab_add (GTK_WIDGET (tree_view)); gtk_tree_view_update_rubber_band (tree_view); @@ -10889,6 +11024,10 @@ #ifdef MAEMO_CHANGES gtk_tree_row_reference_free (tree_view->priv->queued_select_row); tree_view->priv->queued_select_row = NULL; + gtk_tree_row_reference_free (tree_view->priv->queued_activate_row); + 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; #endif /* MAEMO_CHANGES */ tree_view->priv->scroll_to_column = NULL;
- Previous message: [maemo-commits] r9574 - in projects/haf/trunk/osso-gnome-vfs2/debian: . patches
- Next message: [maemo-commits] r9576 - projects/haf/tags/osso-gnome-vfs2
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]