search: Use g_auto for variables

This commit is contained in:
Robert Ancell 2018-05-29 12:20:38 +12:00 committed by Georges Basile Stavracas Neto
parent d2959e4fe7
commit 58a64323c4
2 changed files with 89 additions and 167 deletions

View file

@ -87,35 +87,24 @@ place_free (Place * p)
g_slice_free (Place, p);
}
G_DEFINE_AUTOPTR_CLEANUP_FUNC (Place, place_free)
static GList *
get_bookmarks (void)
{
GFile *file;
gchar *contents;
gchar *path;
gchar **lines;
GList *bookmarks;
g_autoptr(GFile) file = NULL;
g_autofree gchar *contents = NULL;
g_autofree gchar *path = NULL;
GList *bookmarks = NULL;
GError *error = NULL;
path = g_build_filename (g_get_user_config_dir (), "gtk-3.0",
"bookmarks", NULL);
file = g_file_new_for_path (path);
g_free (path);
contents = NULL;
g_file_load_contents (file, NULL, &contents, NULL, NULL, &error);
g_object_unref (file);
bookmarks = NULL;
lines = NULL;
if (error != NULL)
{
g_error_free (error);
}
else
if (g_file_load_contents (file, NULL, &contents, NULL, NULL, &error))
{
gint idx;
g_auto(GStrv) lines = NULL;
lines = g_strsplit (contents, "\n", -1);
for (idx = 0; lines[idx]; idx++)
@ -151,9 +140,6 @@ get_bookmarks (void)
}
}
g_strfreev (lines);
g_free (contents);
return g_list_reverse (bookmarks);
}
@ -259,7 +245,7 @@ path_from_tracker_dir (const gchar *value)
static GList *
get_tracker_locations (void)
{
gchar **locations;
g_auto(GStrv) locations = NULL;
GList *list;
gint idx;
Place *location;
@ -280,16 +266,17 @@ get_tracker_locations (void)
list = g_list_prepend (list, location);
}
g_strfreev (locations);
return g_list_reverse (list);
}
static GList *
get_places_list (void)
{
GList *list, *l;
GHashTable *places;
g_autoptr(GList) xdg_list = NULL;
g_autoptr(GList) tracker_list = NULL;
g_autoptr(GList) bookmark_list = NULL;
GList *l;
g_autoptr(GHashTable) places = NULL;
Place *place, *old_place;
GList *places_list;
@ -303,53 +290,45 @@ get_places_list (void)
g_hash_table_insert (places, place->location, place);
/* first, load the XDG dirs */
list = get_xdg_dirs ();
for (l = list; l != NULL; l = l->next)
xdg_list = get_xdg_dirs ();
for (l = xdg_list; l != NULL; l = l->next)
{
place = l->data;
g_hash_table_insert (places, place->location, place);
}
g_list_free (list);
/* then, insert all the tracker locations that are not XDG dirs */
list = get_tracker_locations ();
for (l = list; l != NULL; l = l->next)
tracker_list = get_tracker_locations ();
for (l = tracker_list; l != NULL; l = l->next)
{
place = l->data;
old_place = g_hash_table_lookup (places, place->location);
g_autoptr(Place) p = l->data;
old_place = g_hash_table_lookup (places, p->location);
if (old_place == NULL)
g_hash_table_insert (places, place->location, place);
else
place_free (place);
g_hash_table_insert (places, p->location, g_steal_pointer (&p));
}
g_list_free (list);
/* finally, load bookmarks, and possibly update attributes */
list = get_bookmarks ();
for (l = list; l != NULL; l = l->next)
bookmark_list = get_bookmarks ();
for (l = bookmark_list; l != NULL; l = l->next)
{
place = l->data;
old_place = g_hash_table_lookup (places, place->location);
g_autoptr(Place) p = l->data;
old_place = g_hash_table_lookup (places, p->location);
if (old_place == NULL)
{
g_hash_table_insert (places, place->location, place);
g_hash_table_insert (places, p->location, g_steal_pointer (&p));
}
else
{
g_free (old_place->display_name);
old_place->display_name = g_strdup (place->display_name);
old_place->display_name = g_strdup (p->display_name);
if (old_place->place_type == PLACE_OTHER)
old_place->place_type = PLACE_BOOKMARKS;
place_free (place);
}
}
g_list_free (list);
places_list = g_hash_table_get_values (places);
g_hash_table_steal_all (places);
g_hash_table_unref (places);
return places_list;
}
@ -360,7 +339,7 @@ switch_tracker_get_mapping (GValue *value,
gpointer user_data)
{
Place *place = user_data;
const gchar **locations;
g_autofree const gchar **locations = NULL;
GFile *location;
gint idx;
gboolean found;
@ -377,8 +356,6 @@ switch_tracker_get_mapping (GValue *value,
break;
}
g_free (locations);
g_value_set_boolean (value, found);
return TRUE;
}
@ -387,8 +364,8 @@ static GPtrArray *
place_get_new_settings_values (Place *place,
gboolean remove)
{
gchar **values;
gchar *path;
g_auto(GStrv) values = NULL;
g_autofree gchar *path = NULL;
GPtrArray *new_values;
const gchar *tracker_dir;
gboolean found;
@ -419,9 +396,6 @@ place_get_new_settings_values (Place *place,
g_ptr_array_add (new_values, NULL);
g_strfreev (values);
g_free (path);
return new_values;
}
@ -431,17 +405,12 @@ switch_tracker_set_mapping (const GValue *value,
gpointer user_data)
{
Place *place = user_data;
GPtrArray *new_values;
g_autoptr(GPtrArray) new_values = NULL;
gboolean remove;
GVariant *variant;
remove = !g_value_get_boolean (value);
new_values = place_get_new_settings_values (place, remove);
variant = g_variant_new_strv ((const gchar **) new_values->pdata, -1);
g_ptr_array_unref (new_values);
return variant;
return g_variant_new_strv ((const gchar **) new_values->pdata, -1);
}
static void
@ -451,8 +420,8 @@ place_query_info_ready (GObject *source,
{
GtkWidget *row, *box, *w;
Place *place;
GFileInfo *info;
gchar *path;
g_autoptr(GFileInfo) info = NULL;
g_autofree gchar *path = NULL;
info = g_file_query_info_finish (G_FILE (source), res, NULL);
if (!info)
@ -470,8 +439,6 @@ place_query_info_ready (GObject *source,
else
place->settings_key = TRACKER_KEY_RECURSIVE_DIRECTORIES;
g_free (path);
w = gtk_label_new (place->display_name);
gtk_container_add (GTK_CONTAINER (box), w);
@ -486,7 +453,6 @@ place_query_info_ready (GObject *source,
place, NULL);
gtk_widget_show_all (row);
g_object_unref (info);
}
static void
@ -494,14 +460,12 @@ remove_button_clicked (GtkWidget *widget,
gpointer user_data)
{
GtkWidget *row = user_data;
GPtrArray *new_values;
g_autoptr(GPtrArray) new_values = NULL;
Place *place;
place = g_object_get_data (G_OBJECT (row), "place");
new_values = place_get_new_settings_values (place, TRUE);
g_settings_set_strv (tracker_preferences, place->settings_key, (const gchar **) new_values->pdata);
g_ptr_array_unref (new_values);
}
static gint
@ -511,7 +475,7 @@ place_compare_func (gconstpointer a,
{
GtkWidget *child_a, *child_b;
Place *place_a, *place_b;
gchar *path;
g_autofree gchar *path = NULL;
gboolean is_home;
child_a = GTK_WIDGET (a);
@ -522,7 +486,6 @@ place_compare_func (gconstpointer a,
path = g_file_get_path (place_a->location);
is_home = (g_strcmp0 (path, g_get_home_dir ()) == 0);
g_free (path);
if (is_home)
return -1;
@ -573,7 +536,8 @@ create_row_for_place (Place *place)
static void
populate_list_boxes (CcSearchLocationsDialog *self)
{
GList *places, *l;
g_autoptr(GList) places = NULL;
GList *l;
Place *place;
GtkWidget *row;
@ -598,8 +562,6 @@ populate_list_boxes (CcSearchLocationsDialog *self)
g_assert_not_reached ();
}
}
g_list_free (places);
}
static void
@ -607,8 +569,8 @@ add_file_chooser_response (GtkDialog *widget,
GtkResponseType response,
gpointer user_data)
{
Place *place;
GPtrArray *new_values;
g_autoptr(Place) place = NULL;
g_autoptr(GPtrArray) new_values = NULL;
if (response != GTK_RESPONSE_OK)
{
@ -624,9 +586,7 @@ add_file_chooser_response (GtkDialog *widget,
new_values = place_get_new_settings_values (place, FALSE);
g_settings_set_strv (tracker_preferences, place->settings_key, (const gchar **) new_values->pdata);
g_ptr_array_unref (new_values);
gtk_widget_destroy (GTK_WIDGET (widget));
place_free (place);
}
static void
@ -651,7 +611,8 @@ add_button_clicked (GtkWidget *widget,
static void
other_places_refresh (CcSearchLocationsDialog *self)
{
GList *places, *l;
g_autoptr(GList) places = NULL;
GList *l;
Place *place;
GtkWidget *row;
@ -667,8 +628,6 @@ other_places_refresh (CcSearchLocationsDialog *self)
row = create_row_for_place (place);
gtk_container_add (GTK_CONTAINER (self->others_list), row);
}
g_list_free (places);
}
CcSearchLocationsDialog *
@ -701,18 +660,14 @@ gboolean
cc_search_locations_dialog_is_available (void)
{
GSettingsSchemaSource *source;
GSettingsSchema *schema;
g_autoptr(GSettingsSchema) schema = NULL;
source = g_settings_schema_source_get_default ();
if (!source)
return FALSE;
schema = g_settings_schema_source_lookup (source, TRACKER_SCHEMA, TRUE);
if (!schema)
return FALSE;
g_settings_schema_unref (schema);
return TRUE;
return schema != NULL;
}
static void

View file

@ -96,7 +96,7 @@ list_sort_func (gconstpointer a,
static void
search_panel_invalidate_button_state (CcSearchPanel *self)
{
GList *children;
g_autoptr(GList) children = NULL;
gboolean is_first, is_last;
GtkListBoxRow *row;
@ -111,14 +111,12 @@ search_panel_invalidate_button_state (CcSearchPanel *self)
gtk_widget_set_sensitive (self->up_button, !is_first);
gtk_widget_set_sensitive (self->down_button, !is_last);
g_list_free (children);
}
static void
search_panel_invalidate_sort_order (CcSearchPanel *self)
{
gchar **sort_order;
g_auto(GStrv) sort_order = NULL;
gint idx;
g_hash_table_remove_all (self->sort_order);
@ -128,7 +126,6 @@ search_panel_invalidate_sort_order (CcSearchPanel *self)
g_hash_table_insert (self->sort_order, g_strdup (sort_order[idx]), GINT_TO_POINTER (idx + 1));
gtk_list_box_invalidate_sort (GTK_LIST_BOX (self->list_box));
g_strfreev (sort_order);
search_panel_invalidate_button_state (self);
}
@ -151,8 +148,9 @@ propagate_compare_func (gconstpointer a,
static void
search_panel_propagate_sort_order (CcSearchPanel *self)
{
GList *keys, *l;
GPtrArray *sort_order;
g_autoptr(GList) keys = NULL;
GList *l;
g_autoptr(GPtrArray) sort_order = NULL;
sort_order = g_ptr_array_new ();
keys = g_hash_table_get_keys (self->sort_order);
@ -164,9 +162,6 @@ search_panel_propagate_sort_order (CcSearchPanel *self)
g_ptr_array_add (sort_order, NULL);
g_settings_set_strv (self->search_settings, "sort-order",
(const gchar **) sort_order->pdata);
g_ptr_array_unref (sort_order);
g_list_free (keys);
}
static void
@ -194,7 +189,8 @@ search_panel_move_selected (CcSearchPanel *self,
gint idx, other_idx;
gpointer idx_ptr;
gboolean found;
GList *children, *l, *other;
g_autoptr(GList) children = NULL;
GList *l, *other;
row = gtk_list_box_get_selected_row (GTK_LIST_BOX (self->list_box));
app_info = g_object_get_data (G_OBJECT (row), "app-info");
@ -288,8 +284,6 @@ search_panel_move_selected (CcSearchPanel *self,
g_hash_table_replace (self->sort_order, g_strdup (app_id), GINT_TO_POINTER (idx));
search_panel_propagate_sort_order (self);
g_list_free (children);
}
static void
@ -330,11 +324,10 @@ switch_settings_mapping_set_generic (const GValue *value,
{
CcSearchPanel *self = g_object_get_data (G_OBJECT (row), "self");
GAppInfo *app_info = g_object_get_data (G_OBJECT (row), "app-info");
gchar **apps;
GPtrArray *new_apps;
g_auto(GStrv) apps = NULL;
g_autoptr(GPtrArray) new_apps = NULL;
gint idx;
gboolean remove, found;
GVariant *variant;
remove = !!g_value_get_boolean (value) == !!default_enabled;
found = FALSE;
@ -360,11 +353,7 @@ switch_settings_mapping_set_generic (const GValue *value,
g_ptr_array_add (new_apps, NULL);
variant = g_variant_new_strv ((const gchar **) new_apps->pdata, -1);
g_ptr_array_unref (new_apps);
g_strfreev (apps);
return variant;
return g_variant_new_strv ((const gchar **) new_apps->pdata, -1);
}
static GVariant *
@ -392,7 +381,7 @@ switch_settings_mapping_get_generic (GValue *value,
gboolean default_enabled)
{
GAppInfo *app_info = g_object_get_data (G_OBJECT (row), "app-info");
const gchar **apps;
g_autofree const gchar **apps = NULL;
gint idx;
gboolean found;
@ -408,7 +397,6 @@ switch_settings_mapping_get_generic (GValue *value,
}
}
g_free (apps);
g_value_set_boolean (value, !!default_enabled != !!found);
return TRUE;
@ -438,7 +426,7 @@ search_panel_add_one_app_info (CcSearchPanel *self,
gboolean default_enabled)
{
GtkWidget *row, *box, *w;
GIcon *icon;
g_autoptr(GIcon) icon = NULL;
gint width, height;
/* gnome-control-center is special cased in the shell,
@ -470,7 +458,6 @@ search_panel_add_one_app_info (CcSearchPanel *self,
gtk_icon_size_lookup (GTK_ICON_SIZE_DND, &width, &height);
gtk_image_set_pixel_size (GTK_IMAGE (w), MAX (width, height));
gtk_container_add (GTK_CONTAINER (box), w);
g_object_unref (icon);
w = gtk_label_new (g_app_info_get_name (app_info));
gtk_container_add (GTK_CONTAINER (box), w);
@ -505,10 +492,11 @@ static void
search_panel_add_one_provider (CcSearchPanel *self,
GFile *provider)
{
gchar *path, *desktop_id;
GKeyFile *keyfile;
GAppInfo *app_info;
GError *error = NULL;
g_autofree gchar *path = NULL;
g_autofree gchar *desktop_id = NULL;
g_autoptr(GKeyFile) keyfile = NULL;
g_autoptr(GAppInfo) app_info = NULL;
g_autoptr(GError) error = NULL;
gboolean default_disabled;
path = g_file_get_path (provider);
@ -519,13 +507,13 @@ search_panel_add_one_provider (CcSearchPanel *self,
{
g_warning ("Error loading %s: %s - search provider will be ignored",
path, error->message);
goto out;
return;
}
if (!g_key_file_has_group (keyfile, SHELL_PROVIDER_GROUP))
{
g_debug ("Shell search provider group missing from '%s', ignoring", path);
goto out;
return;
}
desktop_id = g_key_file_get_string (keyfile, SHELL_PROVIDER_GROUP,
@ -535,7 +523,7 @@ search_panel_add_one_provider (CcSearchPanel *self,
{
g_warning ("Unable to read desktop ID from %s: %s - search provider will be ignored",
path, error->message);
goto out;
return;
}
app_info = G_APP_INFO (g_desktop_app_info_new (desktop_id));
@ -544,20 +532,12 @@ search_panel_add_one_provider (CcSearchPanel *self,
{
g_debug ("Could not find application with desktop ID '%s' referenced in '%s', ignoring",
desktop_id, path);
g_free (desktop_id);
goto out;
return;
}
g_free (desktop_id);
default_disabled = g_key_file_get_boolean (keyfile, SHELL_PROVIDER_GROUP,
"DefaultDisabled", NULL);
search_panel_add_one_app_info (self, app_info, !default_disabled);
g_object_unref (app_info);
out:
g_free (path);
g_clear_error (&error);
g_key_file_unref (keyfile);
}
static void
@ -565,18 +545,15 @@ search_providers_discover_ready (GObject *source,
GAsyncResult *result,
gpointer user_data)
{
GList *providers, *l;
GFile *provider;
g_autoptr(GList) providers = NULL;
GList *l;
CcSearchPanel *self = CC_SEARCH_PANEL (source);
GError *error = NULL;
g_autoptr(GError) error = NULL;
providers = g_task_propagate_pointer (G_TASK (result), &error);
if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
{
g_error_free (error);
return;
}
g_clear_object (&self->load_cancellable);
@ -588,16 +565,14 @@ search_providers_discover_ready (GObject *source,
for (l = providers; l != NULL; l = l->next)
{
provider = l->data;
g_autoptr(GFile) provider = l->data;
search_panel_add_one_provider (self, provider);
g_object_unref (provider);
}
/* propagate a write to GSettings, to make sure we always have
* all the providers in the list.
*/
search_panel_propagate_sort_order (self);
g_list_free (providers);
}
static GList *
@ -605,11 +580,10 @@ search_providers_discover_one_directory (const gchar *system_dir,
GCancellable *cancellable)
{
GList *providers = NULL;
gchar *providers_path;
GFile *providers_location, *provider;
GFileInfo *info;
GFileEnumerator *enumerator;
GError *error = NULL;
g_autofree gchar *providers_path = NULL;
g_autoptr(GFile) providers_location = NULL;
g_autoptr(GFileEnumerator) enumerator = NULL;
g_autoptr(GError) error = NULL;
providers_path = g_build_filename (system_dir, "gnome-shell", "search-providers", NULL);
providers_location = g_file_new_for_path (providers_path);
@ -625,33 +599,27 @@ search_providers_discover_one_directory (const gchar *system_dir,
!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
g_warning ("Error opening %s: %s - search provider configuration won't be possible",
providers_path, error->message);
g_clear_error (&error);
goto out;
return NULL;
}
while ((info = g_file_enumerator_next_file (enumerator, cancellable, &error)) != NULL)
while (TRUE)
{
provider = g_file_get_child (providers_location, g_file_info_get_name (info));
providers = g_list_prepend (providers, provider);
g_object_unref (info);
}
g_autoptr(GFileInfo) info = NULL;
GFile *provider;
if (error != NULL)
info = g_file_enumerator_next_file (enumerator, cancellable, &error);
if (info == NULL)
{
if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
if (error != NULL && !g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
g_warning ("Error reading from %s: %s - search providers might be missing from the panel",
providers_path, error->message);
g_clear_error (&error);
}
out:
g_clear_object (&enumerator);
g_clear_object (&providers_location);
g_free (providers_path);
return providers;
}
provider = g_file_get_child (providers_location, g_file_info_get_name (info));
providers = g_list_prepend (providers, provider);
}
}
static void
search_providers_discover_thread (GTask *task,
@ -682,13 +650,12 @@ search_providers_discover_thread (GTask *task,
static void
populate_search_providers (CcSearchPanel *self)
{
GTask *task;
g_autoptr(GTask) task = NULL;
self->load_cancellable = g_cancellable_new ();
task = g_task_new (self, self->load_cancellable,
search_providers_discover_ready, self);
g_task_run_in_thread (task, search_providers_discover_thread);
g_object_unref (task);
}
static void