[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.org
Date: Fri Feb 2 16:46:52 EET 2007
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;


More information about the maemo-commits mailing list