[maemo-commits] [maemo-commits] r15734 - in projects/haf/trunk/gtk+: . gtk

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Thu Jul 3 16:54:35 EEST 2008
Author: kris
Date: 2008-07-03 16:54:20 +0300 (Thu, 03 Jul 2008)
New Revision: 15734

Modified:
   projects/haf/trunk/gtk+/ChangeLog
   projects/haf/trunk/gtk+/gtk/gtktreeprivate.h
   projects/haf/trunk/gtk+/gtk/gtktreeview.c
Log:
2008-07-03  Kristian Rietveld  <kris at imendio.com>

	* gtk/gtktreeprivate.h: update fields.

	* gtk/gtktreeview.c (gtk_tree_view_init),
	(gtk_tree_view_button_press), (gtk_tree_view_button_release),
	(gtk_tree_view_bin_expose),
	(free_queued_select_row), (free_queued_activate_row): keep track
	of highlighted row via a (tree, node) pair instead of selection
	state on the node (there can only be on highlighted node at the
	time anyway), only draw tick marks for selected rows,
	(gtk_tree_view_focus_to_cursor): direct bail out in Fremantle
	mode, it was possible to change the selection using keyboard.



Modified: projects/haf/trunk/gtk+/ChangeLog
===================================================================
--- projects/haf/trunk/gtk+/ChangeLog	2008-07-03 11:41:30 UTC (rev 15733)
+++ projects/haf/trunk/gtk+/ChangeLog	2008-07-03 13:54:20 UTC (rev 15734)
@@ -1,5 +1,19 @@
 2008-07-03  Kristian Rietveld  <kris at imendio.com>
 
+	* gtk/gtktreeprivate.h: update fields.
+
+	* gtk/gtktreeview.c (gtk_tree_view_init),
+	(gtk_tree_view_button_press), (gtk_tree_view_button_release),
+	(gtk_tree_view_bin_expose),
+	(free_queued_select_row), (free_queued_activate_row): keep track
+	of highlighted row via a (tree, node) pair instead of selection
+	state on the node (there can only be on highlighted node at the
+	time anyway), only draw tick marks for selected rows,
+	(gtk_tree_view_focus_to_cursor): direct bail out in Fremantle
+	mode, it was possible to change the selection using keyboard.
+
+2008-07-03  Kristian Rietveld  <kris at imendio.com>
+
 	* gtk/gtkstyle.h: change old MAEMO START comments into #ifdefs.
 
 2008-06-25  Kristian Rietveld  <kris at imendio.com>

Modified: projects/haf/trunk/gtk+/gtk/gtktreeprivate.h
===================================================================
--- projects/haf/trunk/gtk+/gtk/gtktreeprivate.h	2008-07-03 11:41:30 UTC (rev 15733)
+++ projects/haf/trunk/gtk+/gtk/gtktreeprivate.h	2008-07-03 13:54:20 UTC (rev 15734)
@@ -279,13 +279,15 @@
   GtkTreeRowReference *queued_expand_row;
   GtkTreeRowReference *queued_activate_row;
 
+  GtkRBNode *highlighted_node;
+  GtkRBTree *highlighted_tree;
+
   GtkTreeCellDataHint cell_data_hint;
 
   HildonUIMode hildon_ui_mode;
 
   guint queued_shift_pressed : 1;
   guint queued_ctrl_pressed : 1;
-  guint queued_select_was_selected : 1;
 #endif /* MAEMO_CHANGES */
 };
 

Modified: projects/haf/trunk/gtk+/gtk/gtktreeview.c
===================================================================
--- projects/haf/trunk/gtk+/gtk/gtktreeview.c	2008-07-03 11:41:30 UTC (rev 15733)
+++ projects/haf/trunk/gtk+/gtk/gtktreeview.c	2008-07-03 13:54:20 UTC (rev 15734)
@@ -1463,6 +1463,9 @@
   tree_view->priv->queued_expand_row = NULL;
   tree_view->priv->queued_activate_row = NULL;
 
+  tree_view->priv->highlighted_node = NULL;
+  tree_view->priv->highlighted_tree = NULL;
+
   tree_view->priv->queued_ctrl_pressed = FALSE;
   tree_view->priv->queued_shift_pressed = FALSE;
 
@@ -2915,7 +2918,8 @@
               tree_view->priv->queued_activate_row = gtk_tree_row_reference_new (tree_view->priv->model, path);
 
               /* Mark the node as selected to create a highlight effect */
-              GTK_RBNODE_SET_FLAG (node, GTK_RBNODE_IS_SELECTED);
+              tree_view->priv->highlighted_tree = tree;
+              tree_view->priv->highlighted_node = node;
               gtk_tree_view_queue_draw_path (tree_view, path, NULL);
             }
           else if (mode == HILDON_DIABLO
@@ -2987,10 +2991,9 @@
 	      if (tree_view->priv->queued_select_row)
 		gtk_tree_row_reference_free (tree_view->priv->queued_select_row);
 	      tree_view->priv->queued_select_row = NULL;
-              tree_view->priv->queued_select_was_selected = node_selected;
 
-              if (!node_selected)
-                GTK_RBNODE_SET_FLAG (node, GTK_RBNODE_IS_SELECTED);
+              tree_view->priv->highlighted_node = node;
+              tree_view->priv->highlighted_tree = tree;
 
               tree_view->priv->queued_select_row =
                   gtk_tree_row_reference_new (tree_view->priv->model, path);
@@ -3366,12 +3369,16 @@
       if (mode == HILDON_FREMANTLE
           && tree_view->priv->hildon_ui_mode == HILDON_UI_MODE_NORMAL)
         {
-          GtkRBTree *tree;
-          GtkRBNode *node;
+          if (tree_view->priv->highlighted_node)
+            {
+              _gtk_tree_view_queue_draw_node (tree_view,
+                                              tree_view->priv->highlighted_tree,
+                                              tree_view->priv->highlighted_node,
+                                              NULL);
 
-          _gtk_tree_view_find_node (tree_view, path, &tree, &node);
-          GTK_RBNODE_UNSET_FLAG (node, GTK_RBNODE_IS_SELECTED);
-          gtk_tree_view_queue_draw_path (tree_view, path, NULL);
+              tree_view->priv->highlighted_tree = NULL;
+              tree_view->priv->highlighted_node = NULL;
+            }
 
           gtk_tree_view_row_activated (tree_view, path,
                                        tree_view->priv->focus_column);
@@ -4885,7 +4892,12 @@
       if (GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_PRELIT))
 	flags |= GTK_CELL_RENDERER_PRELIT;
 
+#ifdef MAEMO_CHANGES
+      if (GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_SELECTED)
+          || node == tree_view->priv->highlighted_node)
+#else /* !MAEMO_CHANGES */
       if (GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_SELECTED))
+#endif /* !MAEMO_CHANGES */
         flags |= GTK_CELL_RENDERER_SELECTED;
 
       parity = _gtk_rbtree_node_find_parity (tree, node);
@@ -10375,7 +10387,17 @@
 
 {
   GtkTreePath *cursor_path;
+#ifdef MAEMO_CHANGES
+  HildonMode mode;
 
+  gtk_widget_style_get (GTK_WIDGET (tree_view),
+                        "hildon-mode", &mode,
+                        NULL);
+
+  if (mode == HILDON_FREMANTLE)
+    return;
+#endif /* MAEMO_CHANGES */
+
   if ((tree_view->priv->tree == NULL) ||
       (! GTK_WIDGET_REALIZED (tree_view)))
     return;
@@ -10414,14 +10436,6 @@
 
       if (cursor_path)
 	{
-#ifdef MAEMO_CHANGES
-          HildonMode mode;
-
-          gtk_widget_style_get (GTK_WIDGET (tree_view),
-                                "hildon-mode", &mode,
-                                NULL);
-#endif /* MAEMO_CHANGES */
-
 	  if (tree_view->priv->selection->type == GTK_SELECTION_MULTIPLE
 #ifdef MAEMO_CHANGES
               && mode == HILDON_DIABLO
@@ -16707,21 +16721,18 @@
    * was previously *not* selected.
    */
   if (mode == HILDON_FREMANTLE
-      && tree_view->priv->queued_select_row
-      && !tree_view->priv->queued_select_was_selected)
+      && tree_view->priv->queued_select_row)
     {
-      GtkRBTree *tree;
-      GtkRBNode *node;
-      GtkTreePath *path;
+      if (tree_view->priv->highlighted_node)
+        {
+          _gtk_tree_view_queue_draw_node (tree_view,
+                                          tree_view->priv->highlighted_tree,
+                                          tree_view->priv->highlighted_node,
+                                          NULL);
 
-      path = gtk_tree_row_reference_get_path (tree_view->priv->queued_select_row);
-      if (path)
-        {
-          _gtk_tree_view_find_node (tree_view, path, &tree, &node);
-          GTK_RBNODE_UNSET_FLAG (node, GTK_RBNODE_IS_SELECTED);
-          gtk_tree_view_queue_draw_path (tree_view, path, NULL);
+          tree_view->priv->highlighted_tree = NULL;
+          tree_view->priv->highlighted_node = NULL;
         }
-      gtk_tree_path_free (path);
     }
 
   gtk_tree_row_reference_free (tree_view->priv->queued_select_row);
@@ -16741,18 +16752,16 @@
       && tree_view->priv->hildon_ui_mode == HILDON_UI_MODE_NORMAL
       && tree_view->priv->queued_activate_row)
     {
-      GtkRBTree *tree;
-      GtkRBNode *node;
-      GtkTreePath *path;
+      if (tree_view->priv->highlighted_node)
+        {
+          _gtk_tree_view_queue_draw_node (tree_view,
+                                          tree_view->priv->highlighted_tree,
+                                          tree_view->priv->highlighted_node,
+                                          NULL);
 
-      path = gtk_tree_row_reference_get_path (tree_view->priv->queued_activate_row);
-      if (path)
-        {
-          _gtk_tree_view_find_node (tree_view, path, &tree, &node);
-          GTK_RBNODE_UNSET_FLAG (node, GTK_RBNODE_IS_SELECTED);
-          gtk_tree_view_queue_draw_path (tree_view, path, NULL);
+          tree_view->priv->highlighted_tree = NULL;
+          tree_view->priv->highlighted_node = NULL;
         }
-      gtk_tree_path_free (path);
     }
 
   gtk_tree_row_reference_free (tree_view->priv->queued_activate_row);


More information about the maemo-commits mailing list