[gnome-control-center/wip/privacy-swarm: 34/35] panel-list: Only use panel id to sort



commit 4dcd577d9759f14722b2bc424024bf1ef64a425a
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Wed Sep 25 18:39:47 2019 -0300

    panel-list: Only use panel id to sort
    
    Right now, the sort function checks for two different
    fields when comparing panel rows: the category of the
    row, and the id of the panel. When comparing using the
    category, it relies on the order of the enum values of
    CcPanelCategory. When comparing by panel ids, it uses
    the hardcoded positions defined in the 'panel_order'
    array.
    
    Using categories, however, is unecessary for our case,
    and makes sorting a tad more complicated than it should
    be.
    
    Remove the category comparison of the sort function, and
    rely only on the positions defined in 'panel_order'.

 shell/cc-panel-list.c | 51 +++++++++++++++++++++++++++------------------------
 1 file changed, 27 insertions(+), 24 deletions(-)
---
diff --git a/shell/cc-panel-list.c b/shell/cc-panel-list.c
index 6429d195c..6f5e6f39c 100644
--- a/shell/cc-panel-list.c
+++ b/shell/cc-panel-list.c
@@ -255,6 +255,26 @@ update_search (CcPanelList *self)
   gtk_list_box_unselect_all (GTK_LIST_BOX (self->search_listbox));
 }
 
+static const gchar*
+get_panel_id_from_row (CcPanelList   *self,
+                       GtkListBoxRow *row)
+{
+
+  RowData *row_data;
+
+  if (row == self->details_row)
+    return "details";
+  else if (row == self->devices_row)
+    return "devices";
+  else if (row == self->privacy_row)
+    return "privacy";
+
+  row_data = g_object_get_data (G_OBJECT (row), "data");
+
+  g_assert (row_data != NULL);
+  return row_data->id;
+}
+
 /*
  * RowData functions
  */
@@ -400,6 +420,9 @@ static const gchar * const panel_order[] = {
   "sound",
   "power",
   "network",
+  "privacy",
+  "devices",
+  "details",
 
   /* Privacy page */
   "location",
@@ -448,32 +471,12 @@ sort_function (GtkListBoxRow *a,
                gpointer       user_data)
 {
   CcPanelList *self = CC_PANEL_LIST (user_data);
-  RowData *a_data, *b_data;
-  GtkListBoxRow *special[3] = { self->privacy_row, self->devices_row, self->details_row };
-  int ai = -1;
-  int bi = -1;
-  int i;
-
-  for (i = 0; i < 3; i++)
-    {
-      if (a == special[i]) ai = i;
-      if (b == special[i]) bi = i;
-    }
-
-  if (ai >= 0 || bi >= 0)
-    return ai - bi;
-
-  /*
-   * We can only retrieve the data after assuring that none
-   * of the rows are Devices and Details.
-   */
-  a_data = g_object_get_data (G_OBJECT (a), "data");
-  b_data = g_object_get_data (G_OBJECT (b), "data");
+  const gchar *a_id, *b_id;
 
-  if (a_data->category != b_data->category)
-    return a_data->category - b_data->category;
+  a_id = get_panel_id_from_row (self, a);
+  b_id = get_panel_id_from_row (self, b);
 
-  return get_panel_id_index (a_data->id) - get_panel_id_index (b_data->id);
+  return get_panel_id_index (a_id) - get_panel_id_index (b_id);
 }
 
 static gint


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