columnviewtitle: Clean up interactions
authorMatthias Clasen <mclasen@redhat.com>
Thu, 20 Oct 2022 17:37:26 +0000 (13:37 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 20 Oct 2022 17:57:33 +0000 (13:57 -0400)
Separate the apis we use for updating title,
menu and sort indicator.

gtk/gtkcolumnviewcolumn.c
gtk/gtkcolumnviewtitle.c
gtk/gtkcolumnviewtitleprivate.h

index 9ff589e5d8b5a9ad6243bbbc76829840d5fa3b27..715248f1c8814580f8dbcdb61c22d0d41bbeb35f 100644 (file)
@@ -706,7 +706,7 @@ gtk_column_view_column_set_title (GtkColumnViewColumn *self,
   self->title = g_strdup (title);
 
   if (self->header)
-    gtk_column_view_title_update (GTK_COLUMN_VIEW_TITLE (self->header));
+    gtk_column_view_title_set_title (GTK_COLUMN_VIEW_TITLE (self->header), title);
 
   g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_TITLE]);
 }
@@ -765,7 +765,7 @@ gtk_column_view_column_set_sorter (GtkColumnViewColumn *self,
   gtk_column_view_column_remove_from_sorter (self);
 
   if (self->header)
-    gtk_column_view_title_update (GTK_COLUMN_VIEW_TITLE (self->header));
+    gtk_column_view_title_update_sort (GTK_COLUMN_VIEW_TITLE (self->header));
 
   g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SORTER]);
 }
@@ -790,7 +790,7 @@ void
 gtk_column_view_column_notify_sort (GtkColumnViewColumn *self)
 {
   if (self->header)
-    gtk_column_view_title_update (GTK_COLUMN_VIEW_TITLE (self->header));
+    gtk_column_view_title_update_sort (GTK_COLUMN_VIEW_TITLE (self->header));
 }
 
 /**
@@ -862,7 +862,7 @@ gtk_column_view_column_set_header_menu (GtkColumnViewColumn *self,
     return;
 
   if (self->header)
-    gtk_column_view_title_update (GTK_COLUMN_VIEW_TITLE (self->header));
+    gtk_column_view_title_set_menu (GTK_COLUMN_VIEW_TITLE (self->header), menu);
 
   g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_HEADER_MENU]);
 }
index cb75bc1d74b25904ae55f8b9a545c2a6b75599bc..f2a3cae45f5bd7f450cf80b8e55ed13c406ccddb 100644 (file)
@@ -283,45 +283,56 @@ gtk_column_view_title_new (GtkColumnViewColumn *column)
   title = g_object_new (GTK_TYPE_COLUMN_VIEW_TITLE, NULL);
 
   title->column = g_object_ref (column);
-  gtk_column_view_title_update (title);
+  gtk_column_view_title_update_sort (title);
+  gtk_column_view_title_set_title (title, gtk_column_view_column_get_title (column));
+  gtk_column_view_title_set_menu (title, gtk_column_view_column_get_header_menu (column));
 
   return GTK_WIDGET (title);
 }
 
 void
-gtk_column_view_title_update (GtkColumnViewTitle *self)
+gtk_column_view_title_set_title (GtkColumnViewTitle *self,
+                                 const char         *title)
 {
-  GtkSorter *sorter;
-  GtkColumnView *view;
-  GtkColumnViewSorter *view_sorter;
-  gboolean inverted;
-  GtkColumnViewColumn *active;
-
-  gtk_label_set_label (GTK_LABEL (self->title), gtk_column_view_column_get_title (self->column));
+  gtk_label_set_label (GTK_LABEL (self->title), title);
+}
 
-  sorter = gtk_column_view_column_get_sorter (self->column);
+void
+gtk_column_view_title_set_menu (GtkColumnViewTitle *self,
+                                GMenuModel         *model)
+{
+  g_clear_pointer (&self->popup_menu, gtk_widget_unparent);
+}
 
-  if (sorter)
+void
+gtk_column_view_title_update_sort (GtkColumnViewTitle *self)
+{
+  if (gtk_column_view_column_get_sorter (self->column))
     {
+      GtkColumnView *view;
+      GtkColumnViewSorter *view_sorter;
+      GtkColumnViewColumn *primary;
+      GtkSortType sort_order;
+
       view = gtk_column_view_column_get_column_view (self->column);
       view_sorter = GTK_COLUMN_VIEW_SORTER (gtk_column_view_get_sorter (view));
-      active = gtk_column_view_sorter_get_sort_column (view_sorter, &inverted);
+      primary = gtk_column_view_sorter_get_primary_sort_column (view_sorter);
+      sort_order = gtk_column_view_sorter_get_primary_sort_order (view_sorter);
 
       gtk_widget_show (self->sort);
       gtk_widget_remove_css_class (self->sort, "ascending");
       gtk_widget_remove_css_class (self->sort, "descending");
       gtk_widget_remove_css_class (self->sort, "unsorted");
-      if (self->column != active)
+
+      if (self->column != primary)
         gtk_widget_add_css_class (self->sort, "unsorted");
-      else if (inverted)
+      else if (sort_order == GTK_SORT_DESCENDING)
         gtk_widget_add_css_class (self->sort, "descending");
       else
         gtk_widget_add_css_class (self->sort, "ascending");
     }
   else
     gtk_widget_hide (self->sort);
-
-  g_clear_pointer (&self->popup_menu, gtk_widget_unparent);
 }
 
 GtkColumnViewColumn *
index 84bc6a40504cf79aab6a78a124316598e7561e6f..dae569f55aad036551947306fe20a37892e7ec10 100644 (file)
@@ -38,7 +38,12 @@ GType                   gtk_column_view_title_get_type          (void) G_GNUC_CO
 
 GtkWidget *             gtk_column_view_title_new               (GtkColumnViewColumn    *column);
 
-void                    gtk_column_view_title_update            (GtkColumnViewTitle     *self);
+void                    gtk_column_view_title_set_title         (GtkColumnViewTitle     *self,
+                                                                 const char             *title);
+void                    gtk_column_view_title_set_menu          (GtkColumnViewTitle     *self,
+                                                                 GMenuModel             *model);
+
+void                    gtk_column_view_title_update_sort       (GtkColumnViewTitle     *self);
 
 GtkColumnViewColumn *   gtk_column_view_title_get_column        (GtkColumnViewTitle     *self);