]> Pileus Git - ~andy/gtk/commitdiff
Implemented GtkCellLayoutIface->reorder on GtkCellAreaBox.
authorTristan Van Berkom <tristan.van.berkom@gmail.com>
Sun, 24 Oct 2010 11:08:21 +0000 (20:08 +0900)
committerTristan Van Berkom <tristan.van.berkom@gmail.com>
Sun, 24 Oct 2010 11:08:21 +0000 (20:08 +0900)
gtk/gtkcellareabox.c

index 75e004a9db87e27bbe2a54a4c6fd7d20a29897d6..80cb16e54856e9ac42cc803661d30913b890938e 100644 (file)
@@ -82,6 +82,9 @@ static void      gtk_cell_area_box_layout_pack_start              (GtkCellLayout
 static void      gtk_cell_area_box_layout_pack_end                (GtkCellLayout      *cell_layout,
                                                                   GtkCellRenderer    *renderer,
                                                                   gboolean            expand);
+static void      gtk_cell_area_box_layout_reorder                 (GtkCellLayout      *cell_layout,
+                                                                  GtkCellRenderer    *renderer,
+                                                                  gint                position);
 
 
 /* CellInfo metadata handling */
@@ -359,6 +362,7 @@ gtk_cell_area_box_cell_layout_init (GtkCellLayoutIface *iface)
 {
   iface->pack_start = gtk_cell_area_box_layout_pack_start;
   iface->pack_end   = gtk_cell_area_box_layout_pack_end;
+  iface->reorder    = gtk_cell_area_box_layout_reorder;
 }
 
 static void
@@ -377,6 +381,28 @@ gtk_cell_area_box_layout_pack_end (GtkCellLayout      *cell_layout,
   gtk_cell_area_box_pack_end (GTK_CELL_AREA_BOX (cell_layout), renderer, expand);
 }
 
+static void
+gtk_cell_area_box_layout_reorder (GtkCellLayout      *cell_layout,
+                                 GtkCellRenderer    *renderer,
+                                 gint                position)
+{
+  GtkCellAreaBox        *box  = GTK_CELL_AREA_BOX (cell_layout);
+  GtkCellAreaBoxPrivate *priv = box->priv;
+  GList                 *node;
+  CellInfo              *info;
+  
+  node = g_list_find_custom (priv->cells, renderer, 
+                            (GCompareFunc)cell_info_find);
+
+  if (node)
+    {
+      info = node->data;
+
+      priv->cells = g_list_delete_link (priv->cells, node);
+      priv->cells = g_list_insert (priv->cells, info, position);
+    }
+}
+
 /*************************************************************
  *                            API                            *
  *************************************************************/