[gtk+] cssnode: Change API of some functions



commit 6e4f42f97e4b61d9fb2c3e8ecc0ac9baa3eb890b
Author: Benjamin Otte <otte redhat com>
Date:   Sun Jul 12 21:39:49 2015 +0200

    cssnode: Change API of some functions
    
    gtk_css_node_set_after/before() are now called
    gtk_css_node_insert_after/before().
    
    This brings them in line with other similar APIs (ie GtkListStore). And
    it allows easier usage of the API (see changes to gtkbox.c).

 gtk/gtkbox.c            |   45 +++++++++++++++++++++------------------------
 gtk/gtkcssnode.c        |   26 +++++++++++++++++---------
 gtk/gtkcssnodeprivate.h |    6 ++++--
 gtk/gtkflowbox.c        |   12 ++++++------
 gtk/gtklistbox.c        |   12 ++++++------
 5 files changed, 54 insertions(+), 47 deletions(-)
---
diff --git a/gtk/gtkbox.c b/gtk/gtkbox.c
index 53a52a2..795779b 100644
--- a/gtk/gtkbox.c
+++ b/gtk/gtkbox.c
@@ -1434,43 +1434,40 @@ gtk_box_buildable_init (GtkBuildableIface *iface)
   iface->add_child = gtk_box_buildable_add_child;
 }
 
-static void
-gtk_box_invalidate_order_foreach (GtkWidget *widget,
-                                  gpointer   prev)
-{
-  GtkCssNode **previous = prev;
-  GtkCssNode *cur = gtk_widget_get_css_node (widget);
-
-  if (*previous)
-    gtk_css_node_set_after (cur, *previous);
-
-  *previous = cur;
-}
+typedef struct {
+  GtkCssNode *parent;
+  GtkCssNode *previous;
+  gboolean    reverse;
+} InvalidateOrderData;
 
 static void
-gtk_box_invalidate_order_foreach_reverse (GtkWidget *widget,
-                                          gpointer   prev)
+gtk_box_invalidate_order_foreach (GtkWidget *widget,
+                                  gpointer   datap)
 {
-  GtkCssNode **previous = prev;
+  InvalidateOrderData *data = datap;
   GtkCssNode *cur = gtk_widget_get_css_node (widget);
 
-  if (*previous)
-    gtk_css_node_set_before (cur, *previous);
+  if (data->reverse)
+    gtk_css_node_insert_before (data->parent, cur, data->previous);
+  else
+    gtk_css_node_insert_after (data->parent, cur, data->previous);
 
-  *previous = cur;
+  data->previous = cur;
 }
 
 static void
 gtk_box_invalidate_order (GtkBox *box)
 {
-  GtkCssNode *previous = NULL;
+  InvalidateOrderData data;
+
+  data.parent = gtk_widget_get_css_node (GTK_WIDGET (box));
+  data.previous = NULL;
+  data.reverse = box->priv->orientation == GTK_ORIENTATION_HORIZONTAL
+                 && gtk_widget_get_direction (GTK_WIDGET (box)) == GTK_TEXT_DIR_RTL;
 
   gtk_container_foreach (GTK_CONTAINER (box),
-                         (box->priv->orientation == GTK_ORIENTATION_HORIZONTAL
-                          && gtk_widget_get_direction (GTK_WIDGET (box)) == GTK_TEXT_DIR_RTL)
-                         ? gtk_box_invalidate_order_foreach_reverse
-                         : gtk_box_invalidate_order_foreach,
-                         &previous);
+                         gtk_box_invalidate_order_foreach,
+                         &data);
 }
 
 static void
diff --git a/gtk/gtkcssnode.c b/gtk/gtkcssnode.c
index 0b88b91..8f1e4d9 100644
--- a/gtk/gtkcssnode.c
+++ b/gtk/gtkcssnode.c
@@ -741,27 +741,35 @@ gtk_css_node_set_parent (GtkCssNode *node,
 }
 
 void
-gtk_css_node_set_after (GtkCssNode *cssnode,
-                        GtkCssNode *previous_sibling)
+gtk_css_node_insert_after (GtkCssNode *parent,
+                           GtkCssNode *cssnode,
+                           GtkCssNode *previous_sibling)
 {
-  if (cssnode->previous_sibling == previous_sibling)
+  g_return_if_fail (previous_sibling == NULL || previous_sibling->parent == parent);
+
+  if (cssnode->previous_sibling == previous_sibling &&
+      cssnode->parent == parent)
     return;
 
   gtk_css_node_reposition (cssnode,
-                           previous_sibling->parent,
+                           parent,
                            previous_sibling);
 }
 
 void
-gtk_css_node_set_before (GtkCssNode *cssnode,
-                         GtkCssNode *next_sibling)
+gtk_css_node_insert_before (GtkCssNode *parent,
+                            GtkCssNode *cssnode,
+                            GtkCssNode *next_sibling)
 {
-  if (cssnode->next_sibling == next_sibling)
+  g_return_if_fail (next_sibling == NULL || next_sibling->parent == parent);
+
+  if (cssnode->next_sibling == next_sibling && 
+      cssnode->parent == parent)
     return;
 
   gtk_css_node_reposition (cssnode,
-                           next_sibling->parent,
-                           next_sibling->previous_sibling);
+                           parent,
+                           next_sibling ? next_sibling->previous_sibling : parent->last_child);
 }
 
 GtkCssNode *
diff --git a/gtk/gtkcssnodeprivate.h b/gtk/gtkcssnodeprivate.h
index 293ba02..ad606aa 100644
--- a/gtk/gtkcssnodeprivate.h
+++ b/gtk/gtkcssnodeprivate.h
@@ -95,9 +95,11 @@ GType                   gtk_css_node_get_type           (void) G_GNUC_CONST;
 
 void                    gtk_css_node_set_parent         (GtkCssNode            *cssnode,
                                                          GtkCssNode            *parent);
-void                    gtk_css_node_set_after          (GtkCssNode            *cssnode,
+void                    gtk_css_node_insert_after       (GtkCssNode            *parent,
+                                                         GtkCssNode            *cssnode,
                                                          GtkCssNode            *previous_sibling);
-void                    gtk_css_node_set_before         (GtkCssNode            *cssnode,
+void                    gtk_css_node_insert_before      (GtkCssNode            *parent,
+                                                         GtkCssNode            *cssnode,
                                                          GtkCssNode            *next_sibling);
 GtkCssNode *            gtk_css_node_get_parent         (GtkCssNode            *cssnode);
 GtkCssNode *            gtk_css_node_get_first_child    (GtkCssNode            *cssnode);
diff --git a/gtk/gtkflowbox.c b/gtk/gtkflowbox.c
index 7fe339d..8a59327 100644
--- a/gtk/gtkflowbox.c
+++ b/gtk/gtkflowbox.c
@@ -4013,18 +4013,16 @@ gtk_flow_box_insert_css_node (GtkFlowBox    *box,
                               GSequenceIter *iter)
 {
   GSequenceIter *prev_iter;
-  GtkCssNode *child_node;
-  GtkCssNode *sibling_node;
   GtkWidget *sibling;
 
-  child_node = gtk_widget_get_css_node (child);
   prev_iter = g_sequence_iter_prev (iter);
 
   if (prev_iter != iter)
     {
       sibling = g_sequence_get (prev_iter);
-      sibling_node = gtk_widget_get_css_node (sibling);
-      gtk_css_node_set_after (child_node, sibling_node);
+      gtk_css_node_insert_after (gtk_widget_get_css_node (GTK_WIDGET (box)),
+                                 gtk_widget_get_css_node (child),
+                                 gtk_widget_get_css_node (sibling));
     }
 }
 
@@ -4843,7 +4841,9 @@ gtk_flow_box_css_node_foreach (gpointer data,
     {
       prev_node = gtk_widget_get_css_node (*previous);
       row_node = gtk_widget_get_css_node (row);
-      gtk_css_node_set_after (row_node, prev_node);
+      gtk_css_node_insert_after (gtk_css_node_get_parent (row_node),
+                                 row_node,
+                                 prev_node);
     }
 
   *previous = row;
diff --git a/gtk/gtklistbox.c b/gtk/gtklistbox.c
index 39667eb..3a5c6d6 100644
--- a/gtk/gtklistbox.c
+++ b/gtk/gtklistbox.c
@@ -1180,7 +1180,9 @@ gtk_list_box_css_node_foreach (gpointer data,
     {
       prev_node = gtk_widget_get_css_node (*previous);
       row_node = gtk_widget_get_css_node (row);
-      gtk_css_node_set_after (row_node, prev_node);
+      gtk_css_node_insert_after (gtk_css_node_get_parent (row_node),
+                                 row_node,
+                                 prev_node);
     }
 
   *previous = row;
@@ -2626,18 +2628,16 @@ gtk_list_box_insert_css_node (GtkListBox    *box,
                               GSequenceIter *iter)
 {
   GSequenceIter *prev_iter;
-  GtkCssNode *child_node;
-  GtkCssNode *sibling_node;
   GtkWidget *sibling;
 
-  child_node = gtk_widget_get_css_node (child);
   prev_iter = g_sequence_iter_prev (iter);
 
   if (prev_iter != iter)
     {
       sibling = g_sequence_get (prev_iter);
-      sibling_node = gtk_widget_get_css_node (sibling);
-      gtk_css_node_set_after (child_node, sibling_node);
+      gtk_css_node_insert_after (gtk_widget_get_css_node (GTK_WIDGET (box)),
+                                 gtk_widget_get_css_node (child),
+                                 gtk_widget_get_css_node (sibling));
     }
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]