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

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Wed Mar 5 16:54:56 EET 2008
Author: kris
Date: 2008-03-05 16:54:52 +0200 (Wed, 05 Mar 2008)
New Revision: 15258

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

	Introduce CellDataFunc hint functionality for NB#78800.

	* gtk/gtktreeviewcolumn.[ch]
	(gtk_tree_view_column_set_cell_data_with_hint),
	(gtk_tree_view_column_get_cell_data_hint): new functions,
	(gtk_tree_view_column_set_cell_data): always set hint to ALL.

	* gtk/gtktreeprivate.h: add cell_data_hint field.

	* gtk/gtktreeview.c (gtk_tree_view_bin_expose),
	(gtk_tree_view_move_cursor_left_right): set cell data with hint
	where it makes sense.

	* gtk/gtktreeselection.c (tree_column_is_sensitive): likewise.

	* gtk/gtk.symbols: updated.



Modified: projects/haf/trunk/gtk+/ChangeLog
===================================================================
--- projects/haf/trunk/gtk+/ChangeLog	2008-03-05 14:02:33 UTC (rev 15257)
+++ projects/haf/trunk/gtk+/ChangeLog	2008-03-05 14:54:52 UTC (rev 15258)
@@ -1,5 +1,24 @@
 2008-03-05  Kristian Rietveld  <kris at imendio.com>
 
+	Introduce CellDataFunc hint functionality for NB#78800.
+
+	* gtk/gtktreeviewcolumn.[ch]
+	(gtk_tree_view_column_set_cell_data_with_hint),
+	(gtk_tree_view_column_get_cell_data_hint): new functions,
+	(gtk_tree_view_column_set_cell_data): always set hint to ALL.
+
+	* gtk/gtktreeprivate.h: add cell_data_hint field.
+
+	* gtk/gtktreeview.c (gtk_tree_view_bin_expose),
+	(gtk_tree_view_move_cursor_left_right): set cell data with hint
+	where it makes sense.
+
+	* gtk/gtktreeselection.c (tree_column_is_sensitive): likewise.
+
+	* gtk/gtk.symbols: updated.
+
+2008-03-05  Kristian Rietveld  <kris at imendio.com>
+
 	* gtk/makegtkalias.pl: update the regexp handling #ifdef to be
 	able to handle the MAEMO_CHANGES defines.
 

Modified: projects/haf/trunk/gtk+/gtk/gtk.symbols
===================================================================
--- projects/haf/trunk/gtk+/gtk/gtk.symbols	2008-03-05 14:02:33 UTC (rev 15257)
+++ projects/haf/trunk/gtk+/gtk/gtk.symbols	2008-03-05 14:54:52 UTC (rev 15258)
@@ -4239,11 +4239,17 @@
 gtk_tree_view_column_cell_get_size
 gtk_tree_view_column_cell_is_visible
 gtk_tree_view_column_cell_set_cell_data
+#ifdef MAEMO_CHANGES
+gtk_tree_view_column_cell_set_cell_data_with_hint
+#endif
 gtk_tree_view_column_clear
 gtk_tree_view_column_clear_attributes
 gtk_tree_view_column_clicked
 gtk_tree_view_column_focus_cell
 gtk_tree_view_column_get_alignment
+#ifdef MAEMO_CHANGES
+gtk_tree_view_column_get_cell_data_hint
+#endif
 gtk_tree_view_column_get_cell_renderers
 gtk_tree_view_column_get_clickable
 gtk_tree_view_column_get_expand

Modified: projects/haf/trunk/gtk+/gtk/gtktreeprivate.h
===================================================================
--- projects/haf/trunk/gtk+/gtk/gtktreeprivate.h	2008-03-05 14:02:33 UTC (rev 15257)
+++ projects/haf/trunk/gtk+/gtk/gtktreeprivate.h	2008-03-05 14:54:52 UTC (rev 15258)
@@ -274,6 +274,8 @@
   GtkTreeRowReference *queued_expand_row;
   GtkTreeRowReference *queued_activate_row;
 
+  GtkTreeCellDataHint cell_data_hint;
+
   guint queued_shift_pressed : 1;
   guint queued_ctrl_pressed : 1;
 #endif /* MAEMO_CHANGES */

Modified: projects/haf/trunk/gtk+/gtk/gtktreeselection.c
===================================================================
--- projects/haf/trunk/gtk+/gtk/gtktreeselection.c	2008-03-05 14:02:33 UTC (rev 15257)
+++ projects/haf/trunk/gtk+/gtk/gtktreeselection.c	2008-03-05 14:54:52 UTC (rev 15258)
@@ -1260,8 +1260,14 @@
   gboolean sensitive;
   gboolean visible;
 
+#ifdef MAEMO_CHANGES
+  gtk_tree_view_column_cell_set_cell_data_with_hint (column, model,
+                                                     iter, FALSE, FALSE,
+                                                     GTK_TREE_CELL_DATA_HINT_SENSITIVITY);
+#else /* !MAEMO_CHANGES */
   gtk_tree_view_column_cell_set_cell_data (column, model,
 					   iter, FALSE, FALSE);
+#endif /* !MAEMO_CHANGES */
 
   cells = gtk_tree_view_column_get_cell_renderers (column);
 

Modified: projects/haf/trunk/gtk+/gtk/gtktreeview.c
===================================================================
--- projects/haf/trunk/gtk+/gtk/gtktreeview.c	2008-03-05 14:02:33 UTC (rev 15257)
+++ projects/haf/trunk/gtk+/gtk/gtktreeview.c	2008-03-05 14:54:52 UTC (rev 15258)
@@ -4656,11 +4656,20 @@
 	   list = (rtl ? list->prev : list->next))
         {
 	  GtkTreeViewColumn *column = list->data;
+#ifdef MAEMO_CHANGES
+	  gtk_tree_view_column_cell_set_cell_data_with_hint (column,
+                                                             tree_view->priv->model,
+                                                             &iter,
+                                                             GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_PARENT),
+                                                             node->children?TRUE:FALSE,
+                                                             GTK_TREE_CELL_DATA_HINT_KEY_FOCUS);
+#else /* !MAEMO_CHANGES */
 	  gtk_tree_view_column_cell_set_cell_data (column,
 						   tree_view->priv->model,
 						   &iter,
 						   GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_PARENT),
 						   node->children?TRUE:FALSE);
+#endif /* !MAEMO_CHANGES */
         }
 
       has_special_cell = gtk_tree_view_has_special_cell (tree_view);
@@ -10436,11 +10445,20 @@
       if (column->visible == FALSE)
 	goto loop_end;
 
+#ifdef MAEMO_CHANGES
+      gtk_tree_view_column_cell_set_cell_data_with_hint (column,
+                                                         tree_view->priv->model,
+                                                         &iter,
+                                                         GTK_RBNODE_FLAG_SET (cursor_node, GTK_RBNODE_IS_PARENT),
+                                                         cursor_node->children?TRUE:FALSE,
+                                                         GTK_TREE_CELL_DATA_HINT_KEY_FOCUS);
+#else /* !MAEMO_CHANGES */
       gtk_tree_view_column_cell_set_cell_data (column,
 					       tree_view->priv->model,
 					       &iter,
 					       GTK_RBNODE_FLAG_SET (cursor_node, GTK_RBNODE_IS_PARENT),
 					       cursor_node->children?TRUE:FALSE);
+#endif /* !MAEMO_CHANGES */
 
       if (rtl)
         {

Modified: projects/haf/trunk/gtk+/gtk/gtktreeviewcolumn.c
===================================================================
--- projects/haf/trunk/gtk+/gtk/gtktreeviewcolumn.c	2008-03-05 14:02:33 UTC (rev 15257)
+++ projects/haf/trunk/gtk+/gtk/gtktreeviewcolumn.c	2008-03-05 14:54:52 UTC (rev 15258)
@@ -2502,7 +2502,103 @@
   return tree_column->sort_order;
 }
 
+#ifdef MAEMO_CHANGES
 /**
+ * gtk_tree_view_column_cell_set_cell_data_with_hint:
+ * @tree_column: A #GtkTreeViewColumn.
+ * @tree_model: The #GtkTreeModel to to get the cell renderers attributes from.
+ * @iter: The #GtkTreeIter to to get the cell renderer's attributes from.
+ * @is_expander: %TRUE, if the row has children
+ * @is_expanded: %TRUE, if the row has visible children
+ * @hint: A #GtkTreeCellDataHint for the CellDataFunc.
+ * 
+ * Sets the cell renderer based on the @tree_model and @iter.  That is, for
+ * every attribute mapping in @tree_column, it will get a value from the set
+ * column on the @iter, and use that value to set the attribute on the cell
+ * renderer.  The @hint is a hint for the CellDataFunc so that it does not
+ * have to set all cell renderer properties, possible leading to some
+ * optimizations.  This is used primarily by the #GtkTreeView.
+ *
+ * Since: maemo 4.0
+ * Stability: Unstable
+ **/
+void
+gtk_tree_view_column_cell_set_cell_data_with_hint (GtkTreeViewColumn   *tree_column,
+                                                   GtkTreeModel        *tree_model,
+                                                   GtkTreeIter         *iter,
+                                                   gboolean             is_expander,
+                                                   gboolean             is_expanded,
+                                                   GtkTreeCellDataHint  hint)
+{
+  GSList *list;
+  GValue value = { 0, };
+  GList *cell_list;
+
+  g_return_if_fail (GTK_IS_TREE_VIEW_COLUMN (tree_column));
+
+  if (tree_model == NULL)
+    return;
+
+  GTK_TREE_VIEW (tree_column->tree_view)->priv->cell_data_hint = hint;
+
+  for (cell_list = tree_column->cell_list; cell_list; cell_list = cell_list->next)
+    {
+      GtkTreeViewColumnCellInfo *info = (GtkTreeViewColumnCellInfo *) cell_list->data;
+      GObject *cell = (GObject *) info->cell;
+
+      list = info->attributes;
+
+      g_object_freeze_notify (cell);
+
+      if (info->cell->is_expander != is_expander)
+	g_object_set (cell, "is-expander", is_expander, NULL);
+
+      if (info->cell->is_expanded != is_expanded)
+	g_object_set (cell, "is-expanded", is_expanded, NULL);
+
+      while (list && list->next)
+	{
+	  gtk_tree_model_get_value (tree_model, iter,
+				    GPOINTER_TO_INT (list->next->data),
+				    &value);
+	  g_object_set_property (cell, (gchar *) list->data, &value);
+	  g_value_unset (&value);
+	  list = list->next->next;
+	}
+
+      if (info->func)
+	(* info->func) (tree_column, info->cell, tree_model, iter, info->func_data);
+      g_object_thaw_notify (G_OBJECT (info->cell));
+    }
+}
+
+/**
+ * gtk_tree_view_column_get_cell_data_hint:
+ * @tree_column: A #GtkTreeViewColumn.
+ * 
+ * Returns the current value of the cell data hint as a
+ * GtkTreeCellDataHint.  Note that the value returned is only
+ * valid when called from a GtkTreeCellDataFunc.  The value of the hint
+ * tells you why the GtkTreeView is calling the GtkTreeCellDataFunc.
+ * Based on this hint, you can omit to generate the data and set certain
+ * cell renderer properties to improve performance.
+ *
+ * Return value: A #GtkTreeCellDataHint with the hint.
+ *
+ * Since: maemo 4.0
+ * Stability: Unstable
+ */
+GtkTreeCellDataHint
+gtk_tree_view_column_get_cell_data_hint (GtkTreeViewColumn *tree_column)
+{
+  g_return_val_if_fail (GTK_IS_TREE_VIEW_COLUMN (tree_column), 0);
+  g_return_val_if_fail (GTK_IS_TREE_VIEW (tree_column->tree_view), 0);
+
+  return GTK_TREE_VIEW (tree_column->tree_view)->priv->cell_data_hint;
+}
+#endif /* MAEMO_CHANGES */
+
+/**
  * gtk_tree_view_column_cell_set_cell_data:
  * @tree_column: A #GtkTreeViewColumn.
  * @tree_model: The #GtkTreeModel to to get the cell renderers attributes from.
@@ -2531,6 +2627,10 @@
   if (tree_model == NULL)
     return;
 
+#ifdef MAEMO_CHANGES
+  GTK_TREE_VIEW (tree_column->tree_view)->priv->cell_data_hint = GTK_TREE_CELL_DATA_HINT_ALL;
+#endif /* MAEMO_CHANGES */
+
   for (cell_list = tree_column->cell_list; cell_list; cell_list = cell_list->next)
     {
       GtkTreeViewColumnCellInfo *info = (GtkTreeViewColumnCellInfo *) cell_list->data;

Modified: projects/haf/trunk/gtk+/gtk/gtktreeviewcolumn.h
===================================================================
--- projects/haf/trunk/gtk+/gtk/gtktreeviewcolumn.h	2008-03-05 14:02:33 UTC (rev 15257)
+++ projects/haf/trunk/gtk+/gtk/gtktreeviewcolumn.h	2008-03-05 14:54:52 UTC (rev 15258)
@@ -232,7 +232,23 @@
 					                          gint                    *width);
 void                    gtk_tree_view_column_queue_resize        (GtkTreeViewColumn       *tree_column);
 
+#ifdef MAEMO_CHANGES
+typedef enum
+{
+  GTK_TREE_CELL_DATA_HINT_ALL,
+  GTK_TREE_CELL_DATA_HINT_KEY_FOCUS,
+  GTK_TREE_CELL_DATA_HINT_SENSITIVITY
+} GtkTreeCellDataHint;
 
+void                       gtk_tree_view_column_cell_set_cell_data_with_hint (GtkTreeViewColumn          *tree_column,
+                                                                              GtkTreeModel               *tree_model,
+                                                                              GtkTreeIter                *iter,
+                                                                              gboolean                    is_expander,
+                                                                              gboolean                    is_expanded,
+                                                                              GtkTreeCellDataHint  hint);
+GtkTreeCellDataHint        gtk_tree_view_column_get_cell_data_hint           (GtkTreeViewColumn          *column);
+#endif /* MAEMO_CHANGES */
+
 G_END_DECLS
 
 


More information about the maemo-commits mailing list