diff options
author | Georges Basile Stavracas Neto <georges.stavracas@gmail.com> | 2018-11-12 00:30:55 -0200 |
---|---|---|
committer | Georges Basile Stavracas Neto <georges.stavracas@gmail.com> | 2018-11-16 15:18:59 -0200 |
commit | 62743ab47e6de34d28061f384bdbbc87a4099da9 (patch) | |
tree | 6b254d1f5d8c7328bbdd31ff8f2d9c65ed51b51b /shell/cc-window.c | |
parent | 7e2865131bbb28e2dfba75535bdd998ea704e32f (diff) | |
download | gnome-control-center-62743ab47e6de34d28061f384bdbbc87a4099da9.tar.gz |
window: Factor out function to find panel iter
It will be used by the next commits to look for the panel
name. That is because the panel name is what will be used
as the first headerbar title of panels with a sidebar widget.
Diffstat (limited to 'shell/cc-window.c')
-rw-r--r-- | shell/cc-window.c | 69 |
1 files changed, 42 insertions, 27 deletions
diff --git a/shell/cc-window.c b/shell/cc-window.c index 3bda5456f..ea8d436aa 100644 --- a/shell/cc-window.c +++ b/shell/cc-window.c @@ -224,6 +224,37 @@ add_current_panel_to_history (CcShell *shell, g_debug ("Added '%s' to the previous panels", self->current_panel_id); } +static gboolean +find_iter_for_panel_id (CcWindow *self, + const gchar *panel_id, + GtkTreeIter *out_iter) +{ + GtkTreeIter iter; + gboolean valid; + + valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (self->store), &iter); + + while (valid) + { + g_autofree gchar *id = NULL; + + gtk_tree_model_get (GTK_TREE_MODEL (self->store), + &iter, + COL_ID, &id, + -1); + + if (g_strcmp0 (id, panel_id) == 0) + break; + + valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (self->store), &iter); + } + + g_assert (out_iter != NULL); + *out_iter = iter; + + return valid; +} + static void update_list_title (CcWindow *self) { @@ -330,7 +361,6 @@ setup_model (CcWindow *shell) g_signal_connect_object (model, "row-changed", G_CALLBACK (on_row_changed_cb), shell, 0); } - static gboolean set_active_panel_from_id (CcShell *shell, const gchar *start_id, @@ -344,8 +374,8 @@ set_active_panel_from_id (CcShell *shell, GtkTreeIter iter; GtkWidget *old_panel; CcWindow *self; - gboolean iter_valid; gboolean activated; + gboolean found; self = CC_WINDOW (shell); @@ -356,36 +386,21 @@ set_active_panel_from_id (CcShell *shell, return TRUE; } - iter_valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (self->store), &iter); - - /* find the details for this item */ - while (iter_valid) + found = find_iter_for_panel_id (self, start_id, &iter); + if (!found) { - g_autofree gchar *id = NULL; - - gtk_tree_model_get (GTK_TREE_MODEL (self->store), &iter, - COL_NAME, &name, - COL_GICON, &gicon, - COL_ID, &id, - COL_VISIBILITY, &visibility, - -1); - - if (id && strcmp (id, start_id) == 0) - break; - - g_clear_pointer (&name, g_free); - g_clear_object (&gicon); - - iter_valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (self->store), &iter); + g_warning ("Could not find settings panel \"%s\"", start_id); + return TRUE; } old_panel = self->current_panel; - if (!name) - { - g_warning ("Could not find settings panel \"%s\"", start_id); - return TRUE; - } + gtk_tree_model_get (GTK_TREE_MODEL (self->store), + &iter, + COL_NAME, &name, + COL_GICON, &gicon, + COL_VISIBILITY, &visibility, + -1); /* Activate the panel */ activated = activate_panel (CC_WINDOW (shell), start_id, parameters, name, gicon, visibility); |