diff options
-rw-r--r-- | shell/cc-panel-list.c | 51 |
1 files changed, 27 insertions, 24 deletions
diff --git a/shell/cc-panel-list.c b/shell/cc-panel-list.c index 1c7ff7394..78a800978 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 */ @@ -398,6 +418,9 @@ static const gchar * const panel_order[] = { "sound", "power", "network", + "privacy", + "devices", + "details", /* Privacy page */ "location", @@ -445,32 +468,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 |