[gtk/columnview-reorder-cells: 1/3] listitemwidget: Add api to reorder children



commit 10a3eb3176f6f32df22664d8da5b58501e1ff8a1
Author: Matthias Clasen <mclasen redhat com>
Date:   Fri Jun 5 12:39:00 2020 -0400

    listitemwidget: Add api to reorder children
    
    We need this to keep the rows in sync with the columns
    when they are reordered.

 gtk/gtklistitemwidget.c        | 31 +++++++++++++++++++++++++++++++
 gtk/gtklistitemwidgetprivate.h |  3 +++
 2 files changed, 34 insertions(+)
---
diff --git a/gtk/gtklistitemwidget.c b/gtk/gtklistitemwidget.c
index 2d71720c28..f700269823 100644
--- a/gtk/gtklistitemwidget.c
+++ b/gtk/gtklistitemwidget.c
@@ -609,6 +609,37 @@ gtk_list_item_widget_add_child (GtkListItemWidget *self,
   gtk_widget_set_parent (child, GTK_WIDGET (self));
 }
 
+void
+gtk_list_item_widget_reorder_child (GtkListItemWidget *self,
+                                    GtkWidget         *child,
+                                    guint              position)
+{
+  GtkWidget *widget = GTK_WIDGET (self);
+  GtkWidget *sibling = NULL;
+
+  if (position > 0)
+    {
+      GtkWidget *c;
+      guint i;
+
+      for (c = gtk_widget_get_first_child (widget), i = 0;
+           c;
+           c = gtk_widget_get_next_sibling (c), i++)
+        {
+          if (i + 1 == position)
+            {
+              sibling = c;
+              break;
+            }
+        }
+    }
+
+  gtk_widget_insert_after (child, widget, sibling);
+  gtk_css_node_insert_after (gtk_widget_get_css_node (widget),
+                             gtk_widget_get_css_node (child),
+                             sibling ? gtk_widget_get_css_node (sibling) : NULL);
+}
+
 void
 gtk_list_item_widget_remove_child (GtkListItemWidget *self,
                                    GtkWidget         *child)
diff --git a/gtk/gtklistitemwidgetprivate.h b/gtk/gtklistitemwidgetprivate.h
index f3c7fdbdc9..3042d08789 100644
--- a/gtk/gtklistitemwidgetprivate.h
+++ b/gtk/gtklistitemwidgetprivate.h
@@ -75,6 +75,9 @@ void                    gtk_list_item_widget_set_single_click_activate
                                                                  gboolean               
single_click_activate);
 void                    gtk_list_item_widget_add_child          (GtkListItemWidget      *self,
                                                                  GtkWidget              *child);
+void                    gtk_list_item_widget_reorder_child      (GtkListItemWidget      *self,
+                                                                 GtkWidget              *child,
+                                                                 guint                   position);
 void                    gtk_list_item_widget_remove_child       (GtkListItemWidget      *self,
                                                                  GtkWidget              *child);
 


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