[frogr] Fixed memory and reference handling issues, related to how objects and lists of objects were being p
- From: Mario Sanchez Prada <msanchez src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [frogr] Fixed memory and reference handling issues, related to how objects and lists of objects were being p
- Date: Fri, 2 Nov 2012 08:49:18 +0000 (UTC)
commit 2320863f9d679ec6d43272372fe0453d77efe5a5
Author: Mario Sanchez Prada <msanchez gnome org>
Date: Wed Oct 31 07:40:16 2012 +0100
Fixed memory and reference handling issues, related to how objects and lists of objects
were being passing around among the main window, dialogs and the controller.
src/frogr-add-tags-dialog.c | 16 ++++++++++---
src/frogr-add-tags-dialog.h | 2 +-
src/frogr-add-to-group-dialog.c | 40 ++++++++++++++++++++++++++++-------
src/frogr-add-to-group-dialog.h | 4 +-
src/frogr-add-to-set-dialog.c | 41 +++++++++++++++++++++++++++++-------
src/frogr-add-to-set-dialog.h | 4 +-
src/frogr-controller.c | 25 ++++++++++++++++++++++
src/frogr-create-new-set-dialog.c | 38 ++++++++++++++++++++++++++++-----
src/frogr-create-new-set-dialog.h | 4 +-
src/frogr-details-dialog.c | 32 ++++++++++++++++------------
src/frogr-details-dialog.h | 4 ++-
src/frogr-file-loader.c | 10 +-------
src/frogr-live-entry.c | 10 ++++----
src/frogr-live-entry.h | 2 +-
src/frogr-main-view.c | 24 +++++----------------
src/frogr-picture.c | 16 +++----------
src/frogr-util.c | 6 +++-
17 files changed, 184 insertions(+), 94 deletions(-)
---
diff --git a/src/frogr-add-tags-dialog.c b/src/frogr-add-tags-dialog.c
index 7befdde..a7b9ad6 100644
--- a/src/frogr-add-tags-dialog.c
+++ b/src/frogr-add-tags-dialog.c
@@ -52,11 +52,21 @@ enum {
/* Prototypes */
+static void _set_pictures (FrogrAddTagsDialog *self, const GSList *pictures);
+
static void _dialog_response_cb (GtkDialog *dialog, gint response, gpointer data);
/* Private API */
static void
+_set_pictures (FrogrAddTagsDialog *self, const GSList *pictures)
+{
+ FrogrAddTagsDialogPrivate *priv = FROGR_ADD_TAGS_DIALOG_GET_PRIVATE (self);
+ priv->pictures = g_slist_copy ((GSList*) pictures);
+ g_slist_foreach (priv->pictures, (GFunc)g_object_ref, NULL);
+}
+
+static void
_dialog_response_cb (GtkDialog *dialog, gint response, gpointer data)
{
if (response == GTK_RESPONSE_OK)
@@ -109,12 +119,10 @@ _frogr_add_tags_dialog_set_property (GObject *object,
const GValue *value,
GParamSpec *pspec)
{
- FrogrAddTagsDialogPrivate *priv = FROGR_ADD_TAGS_DIALOG_GET_PRIVATE (object);
-
switch (prop_id)
{
case PROP_PICTURES:
- priv->pictures = (GSList *) g_value_get_pointer (value);
+ _set_pictures (FROGR_ADD_TAGS_DIALOG (object), g_value_get_pointer (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -215,7 +223,7 @@ frogr_add_tags_dialog_init (FrogrAddTagsDialog *self)
/* Public API */
void
-frogr_add_tags_dialog_show (GtkWindow *parent, GSList *pictures, GSList *tags)
+frogr_add_tags_dialog_show (GtkWindow *parent, const GSList *pictures, const GSList *tags)
{
FrogrConfig *config = NULL;
GObject *new = NULL;
diff --git a/src/frogr-add-tags-dialog.h b/src/frogr-add-tags-dialog.h
index b92b6aa..96a4a6b 100644
--- a/src/frogr-add-tags-dialog.h
+++ b/src/frogr-add-tags-dialog.h
@@ -47,7 +47,7 @@ struct _FrogrAddTagsDialog
GType frogr_add_tags_dialog_get_type (void) G_GNUC_CONST;
-void frogr_add_tags_dialog_show (GtkWindow *parent, GSList *pictures, GSList *tags);
+void frogr_add_tags_dialog_show (GtkWindow *parent, const GSList *pictures, const GSList *tags);
G_END_DECLS /* FROGR_ADD_TAGS_DIALOG_H */
diff --git a/src/frogr-add-to-group-dialog.c b/src/frogr-add-to-group-dialog.c
index e94e0c8..6638dfc 100644
--- a/src/frogr-add-to-group-dialog.c
+++ b/src/frogr-add-to-group-dialog.c
@@ -68,6 +68,10 @@ enum {
/* Prototypes */
+static void _set_pictures (FrogrAddToGroupDialog *self, const GSList *pictures);
+
+static void _set_groups (FrogrAddToGroupDialog *self, const GSList *groups);
+
static GtkWidget *_create_tree_view (FrogrAddToGroupDialog *self);
static void _column_clicked_cb (GtkTreeViewColumn *col, gpointer data);
@@ -97,6 +101,23 @@ static void _dialog_response_cb (GtkDialog *dialog, gint response, gpointer data
/* Private API */
+static void
+_set_pictures (FrogrAddToGroupDialog *self, const GSList *pictures)
+{
+ FrogrAddToGroupDialogPrivate *priv = FROGR_ADD_TO_GROUP_DIALOG_GET_PRIVATE (self);
+ priv->pictures = g_slist_copy ((GSList*) pictures);
+ g_slist_foreach (priv->pictures, (GFunc)g_object_ref, NULL);
+}
+
+static void _set_groups (FrogrAddToGroupDialog *self, const GSList *groups)
+{
+ FrogrAddToGroupDialogPrivate *priv = NULL;
+
+ priv = FROGR_ADD_TO_GROUP_DIALOG_GET_PRIVATE (self);
+ priv->groups = g_slist_copy ((GSList*)groups);
+ g_slist_foreach (priv->groups, (GFunc)g_object_ref, NULL);
+}
+
static GtkWidget *
_create_tree_view (FrogrAddToGroupDialog *self)
{
@@ -381,7 +402,6 @@ _update_pictures (FrogrAddToGroupDialog *self)
picture = FROGR_PICTURE (item->data);
frogr_picture_set_groups (picture, selected_groups);
}
- g_slist_free (selected_groups);
}
static void
@@ -405,15 +425,13 @@ _frogr_add_to_group_dialog_set_property (GObject *object,
const GValue *value,
GParamSpec *pspec)
{
- FrogrAddToGroupDialogPrivate *priv = FROGR_ADD_TO_GROUP_DIALOG_GET_PRIVATE (object);
-
switch (prop_id)
{
case PROP_PICTURES:
- priv->pictures = (GSList *) g_value_get_pointer (value);
+ _set_pictures (FROGR_ADD_TO_GROUP_DIALOG (object), g_value_get_pointer (value));
break;
case PROP_GROUPS:
- priv->groups = (GSList *) g_value_get_pointer (value);
+ _set_groups (FROGR_ADD_TO_GROUP_DIALOG (object), g_value_get_pointer (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -455,8 +473,12 @@ _frogr_add_to_group_dialog_dispose (GObject *object)
priv->pictures = NULL;
}
- if (priv->groups)
- priv->groups = NULL;
+ if (priv->groups)
+ {
+ g_slist_foreach (priv->groups, (GFunc)g_object_unref, NULL);
+ g_slist_free (priv->groups);
+ priv->groups = NULL;
+ }
if (priv->treemodel)
{
@@ -554,7 +576,9 @@ frogr_add_to_group_dialog_init (FrogrAddToGroupDialog *self)
/* Public API */
void
-frogr_add_to_group_dialog_show (GtkWindow *parent, GSList *pictures, GSList *groups)
+frogr_add_to_group_dialog_show (GtkWindow *parent,
+ const GSList *pictures,
+ const GSList *groups)
{
FrogrAddToGroupDialog *self = NULL;
GObject *new = NULL;
diff --git a/src/frogr-add-to-group-dialog.h b/src/frogr-add-to-group-dialog.h
index fd387b5..7332782 100644
--- a/src/frogr-add-to-group-dialog.h
+++ b/src/frogr-add-to-group-dialog.h
@@ -48,8 +48,8 @@ struct _FrogrAddToGroupDialog
GType frogr_add_to_group_dialog_get_type (void) G_GNUC_CONST;
void frogr_add_to_group_dialog_show (GtkWindow *parent,
- GSList *pictures,
- GSList *groups);
+ const GSList *pictures,
+ const GSList *groups);
G_END_DECLS /* FROGR_ADD_TO_GROUP_DIALOG_H */
diff --git a/src/frogr-add-to-set-dialog.c b/src/frogr-add-to-set-dialog.c
index 5c44645..08b4072 100644
--- a/src/frogr-add-to-set-dialog.c
+++ b/src/frogr-add-to-set-dialog.c
@@ -68,6 +68,10 @@ enum {
/* Prototypes */
+static void _set_pictures (FrogrAddToSetDialog *self, const GSList *pictures);
+
+static void _set_photosets (FrogrAddToSetDialog *self, const GSList *photosets);
+
static GtkWidget *_create_tree_view (FrogrAddToSetDialog *self);
static void _column_clicked_cb (GtkTreeViewColumn *col, gpointer data);
@@ -97,6 +101,24 @@ static void _dialog_response_cb (GtkDialog *dialog, gint response, gpointer data
/* Private API */
+static void
+_set_pictures (FrogrAddToSetDialog *self, const GSList *pictures)
+{
+ FrogrAddToSetDialogPrivate *priv = FROGR_ADD_TO_SET_DIALOG_GET_PRIVATE (self);
+ priv->pictures = g_slist_copy ((GSList*) pictures);
+ g_slist_foreach (priv->pictures, (GFunc)g_object_ref, NULL);
+}
+
+static void
+_set_photosets (FrogrAddToSetDialog *self, const GSList *photosets)
+{
+ FrogrAddToSetDialogPrivate *priv = NULL;
+
+ priv = FROGR_ADD_TO_SET_DIALOG_GET_PRIVATE (self);
+ priv->photosets = g_slist_copy ((GSList*)photosets);
+ g_slist_foreach (priv->photosets, (GFunc)g_object_ref, NULL);
+}
+
static GtkWidget *
_create_tree_view (FrogrAddToSetDialog *self)
{
@@ -381,7 +403,6 @@ _update_pictures (FrogrAddToSetDialog *self)
picture = FROGR_PICTURE (item->data);
frogr_picture_set_photosets (picture, selected_sets);
}
- g_slist_free (selected_sets);
}
static void
@@ -405,15 +426,13 @@ _frogr_add_to_set_dialog_set_property (GObject *object,
const GValue *value,
GParamSpec *pspec)
{
- FrogrAddToSetDialogPrivate *priv = FROGR_ADD_TO_SET_DIALOG_GET_PRIVATE (object);
-
switch (prop_id)
{
case PROP_PICTURES:
- priv->pictures = (GSList *) g_value_get_pointer (value);
+ _set_pictures (FROGR_ADD_TO_SET_DIALOG (object), g_value_get_pointer (value));
break;
case PROP_PHOTOSETS:
- priv->photosets = (GSList *) g_value_get_pointer (value);
+ _set_photosets (FROGR_ADD_TO_SET_DIALOG (object), g_value_get_pointer (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -455,8 +474,12 @@ _frogr_add_to_set_dialog_dispose (GObject *object)
priv->pictures = NULL;
}
- if (priv->photosets)
- priv->photosets = NULL;
+ if (priv->photosets)
+ {
+ g_slist_foreach (priv->photosets, (GFunc)g_object_unref, NULL);
+ g_slist_free (priv->photosets);
+ priv->photosets = NULL;
+ }
if (priv->treemodel)
{
@@ -554,7 +577,9 @@ frogr_add_to_set_dialog_init (FrogrAddToSetDialog *self)
/* Public API */
void
-frogr_add_to_set_dialog_show (GtkWindow *parent, GSList *pictures, GSList *photosets)
+frogr_add_to_set_dialog_show (GtkWindow *parent,
+ const GSList *pictures,
+ const GSList *photosets)
{
FrogrAddToSetDialog *self = NULL;
GObject *new = NULL;
diff --git a/src/frogr-add-to-set-dialog.h b/src/frogr-add-to-set-dialog.h
index d3d5eed..8f6f1dc 100644
--- a/src/frogr-add-to-set-dialog.h
+++ b/src/frogr-add-to-set-dialog.h
@@ -48,8 +48,8 @@ struct _FrogrAddToSetDialog
GType frogr_add_to_set_dialog_get_type (void) G_GNUC_CONST;
void frogr_add_to_set_dialog_show (GtkWindow *parent,
- GSList *pictures,
- GSList *photosets);
+ const GSList *pictures,
+ const GSList *photosets);
G_END_DECLS /* FROGR_ADD_TO_SET_DIALOG_H */
diff --git a/src/frogr-controller.c b/src/frogr-controller.c
index 4d4e2c2..260179b 100644
--- a/src/frogr-controller.c
+++ b/src/frogr-controller.c
@@ -1761,6 +1761,10 @@ _show_details_dialog_on_idle (GSList *pictures)
window = frogr_main_view_get_window (priv->mainview);
frogr_details_dialog_show (window, pictures, tags_list);
+ /* FrogrController's responsibility over this list ends here */
+ g_slist_foreach (pictures, (GFunc) g_object_unref, NULL);
+ g_slist_free (pictures);
+
return FALSE;
}
@@ -1791,6 +1795,10 @@ _show_add_tags_dialog_on_idle (GSList *pictures)
window = frogr_main_view_get_window (priv->mainview);
frogr_add_tags_dialog_show (window, pictures, tags_list);
+ /* FrogrController's responsibility over this list ends here */
+ g_slist_foreach (pictures, (GFunc) g_object_unref, NULL);
+ g_slist_free (pictures);
+
return FALSE;
}
@@ -1820,6 +1828,10 @@ _show_create_new_set_dialog_on_idle (GSList *pictures)
window = frogr_main_view_get_window (priv->mainview);
frogr_create_new_set_dialog_show (window, pictures, photosets);
+ /* FrogrController's responsibility over this list ends here */
+ g_slist_foreach (pictures, (GFunc) g_object_unref, NULL);
+ g_slist_free (pictures);
+
return FALSE;
}
@@ -1852,6 +1864,10 @@ _show_add_to_set_dialog_on_idle (GSList *pictures)
else if (priv->photosets_fetched)
frogr_util_show_info_dialog (window, _("No sets found"));
+ /* FrogrController's responsibility over this list ends here */
+ g_slist_foreach (pictures, (GFunc) g_object_unref, NULL);
+ g_slist_free (pictures);
+
return FALSE;
}
@@ -1884,6 +1900,10 @@ _show_add_to_group_dialog_on_idle (GSList *pictures)
else if (priv->groups_fetched)
frogr_util_show_info_dialog (window, _("No groups found"));
+ /* FrogrController's responsibility over this list ends here */
+ g_slist_foreach (pictures, (GFunc) g_object_unref, NULL);
+ g_slist_free (pictures);
+
return FALSE;
}
@@ -2378,6 +2398,7 @@ frogr_controller_show_details_dialog (FrogrController *self,
}
/* Show the dialog when possible */
+ g_slist_foreach (pictures, (GFunc) g_object_ref, NULL);
gdk_threads_add_timeout (DEFAULT_TIMEOUT, (GSourceFunc) _show_details_dialog_on_idle, pictures);
}
@@ -2400,6 +2421,7 @@ frogr_controller_show_add_tags_dialog (FrogrController *self,
}
/* Show the dialog when possible */
+ g_slist_foreach (pictures, (GFunc) g_object_ref, NULL);
gdk_threads_add_timeout (DEFAULT_TIMEOUT, (GSourceFunc) _show_add_tags_dialog_on_idle, pictures);
}
@@ -2422,6 +2444,7 @@ frogr_controller_show_create_new_set_dialog (FrogrController *self,
}
/* Show the dialog when possible */
+ g_slist_foreach (pictures, (GFunc) g_object_ref, NULL);
gdk_threads_add_timeout (DEFAULT_TIMEOUT, (GSourceFunc) _show_create_new_set_dialog_on_idle, pictures);
}
@@ -2444,6 +2467,7 @@ frogr_controller_show_add_to_set_dialog (FrogrController *self,
}
/* Show the dialog when possible */
+ g_slist_foreach (pictures, (GFunc) g_object_ref, NULL);
gdk_threads_add_timeout (DEFAULT_TIMEOUT, (GSourceFunc) _show_add_to_set_dialog_on_idle, pictures);
}
@@ -2466,6 +2490,7 @@ frogr_controller_show_add_to_group_dialog (FrogrController *self,
}
/* Show the dialog when possible */
+ g_slist_foreach (pictures, (GFunc) g_object_ref, NULL);
gdk_threads_add_timeout (DEFAULT_TIMEOUT, (GSourceFunc) _show_add_to_group_dialog_on_idle, pictures);
}
diff --git a/src/frogr-create-new-set-dialog.c b/src/frogr-create-new-set-dialog.c
index 9b7e704..9cb0965 100644
--- a/src/frogr-create-new-set-dialog.c
+++ b/src/frogr-create-new-set-dialog.c
@@ -58,6 +58,10 @@ enum {
/* Prototypes */
+static void _set_pictures (FrogrCreateNewSetDialog *self, const GSList *pictures);
+
+static void _set_photosets (FrogrCreateNewSetDialog *self, const GSList *photosets);
+
static void _on_button_toggled (GtkToggleButton *button, gpointer data);
static gboolean _validate_dialog_data (FrogrCreateNewSetDialog *self);
@@ -73,6 +77,24 @@ static void _dialog_response_cb (GtkDialog *dialog, gint response, gpointer data
/* Private API */
static void
+_set_pictures (FrogrCreateNewSetDialog *self, const GSList *pictures)
+{
+ FrogrCreateNewSetDialogPrivate *priv = FROGR_CREATE_NEW_SET_DIALOG_GET_PRIVATE (self);
+ priv->pictures = g_slist_copy ((GSList*) pictures);
+ g_slist_foreach (priv->pictures, (GFunc)g_object_ref, NULL);
+}
+
+static void
+_set_photosets (FrogrCreateNewSetDialog *self, const GSList *photosets)
+{
+ FrogrCreateNewSetDialogPrivate *priv = NULL;
+
+ priv = FROGR_CREATE_NEW_SET_DIALOG_GET_PRIVATE (self);
+ priv->photosets = g_slist_copy ((GSList*)photosets);
+ g_slist_foreach (priv->photosets, (GFunc)g_object_ref, NULL);
+}
+
+static void
_on_button_toggled (GtkToggleButton *button, gpointer data)
{
FrogrCreateNewSetDialog *self = NULL;
@@ -203,15 +225,13 @@ _frogr_create_new_set_dialog_set_property (GObject *object,
const GValue *value,
GParamSpec *pspec)
{
- FrogrCreateNewSetDialogPrivate *priv = FROGR_CREATE_NEW_SET_DIALOG_GET_PRIVATE (object);
-
switch (prop_id)
{
case PROP_PICTURES:
- priv->pictures = (GSList *) g_value_get_pointer (value);
+ _set_pictures (FROGR_CREATE_NEW_SET_DIALOG (object), g_value_get_pointer (value));
break;
case PROP_PHOTOSETS:
- priv->photosets = (GSList *) g_value_get_pointer (value);
+ _set_photosets (FROGR_CREATE_NEW_SET_DIALOG (object), g_value_get_pointer (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -254,7 +274,11 @@ _frogr_create_new_set_dialog_dispose (GObject *object)
}
if (priv->photosets)
- priv->photosets = NULL;
+ {
+ g_slist_foreach (priv->photosets, (GFunc)g_object_unref, NULL);
+ g_slist_free (priv->photosets);
+ priv->photosets = NULL;
+ }
G_OBJECT_CLASS(frogr_create_new_set_dialog_parent_class)->dispose (object);
}
@@ -371,7 +395,9 @@ frogr_create_new_set_dialog_init (FrogrCreateNewSetDialog *self)
/* Public API */
void
-frogr_create_new_set_dialog_show (GtkWindow *parent, GSList *pictures, GSList *photosets)
+frogr_create_new_set_dialog_show (GtkWindow *parent,
+ const GSList *pictures,
+ const GSList *photosets)
{
GtkWidget *dialog = NULL;
dialog = GTK_WIDGET (g_object_new (FROGR_TYPE_CREATE_NEW_SET_DIALOG,
diff --git a/src/frogr-create-new-set-dialog.h b/src/frogr-create-new-set-dialog.h
index e9ff651..5906172 100644
--- a/src/frogr-create-new-set-dialog.h
+++ b/src/frogr-create-new-set-dialog.h
@@ -48,8 +48,8 @@ struct _FrogrCreateNewSetDialog
GType frogr_create_new_set_dialog_get_type (void) G_GNUC_CONST;
void frogr_create_new_set_dialog_show (GtkWindow *parent,
- GSList *pictures,
- GSList *photosets);
+ const GSList *pictures,
+ const GSList *photosets);
G_END_DECLS /* FROGR_CREATE_NEW_SET_DIALOG_H */
diff --git a/src/frogr-details-dialog.c b/src/frogr-details-dialog.c
index 1451a16..9cf04f0 100644
--- a/src/frogr-details-dialog.c
+++ b/src/frogr-details-dialog.c
@@ -102,6 +102,8 @@ static const gchar *license_descriptions[] = {
/* Prototypes */
+static void _set_pictures (FrogrDetailsDialog *self, const GSList *pictures);
+
static void _create_widgets (FrogrDetailsDialog *self);
static void _update_ui (FrogrDetailsDialog *self);
@@ -132,6 +134,14 @@ static void _dialog_response_cb (GtkDialog *dialog, gint response, gpointer data
/* Private API */
static void
+_set_pictures (FrogrDetailsDialog *self, const GSList *pictures)
+{
+ FrogrDetailsDialogPrivate *priv = FROGR_DETAILS_DIALOG_GET_PRIVATE (self);
+ priv->pictures = g_slist_copy ((GSList*) pictures);
+ g_slist_foreach (priv->pictures, (GFunc)g_object_ref, NULL);
+}
+
+static void
_create_widgets (FrogrDetailsDialog *self)
{
FrogrDetailsDialogPrivate *priv = NULL;
@@ -1053,25 +1063,19 @@ _on_toggle_button_toggled (GtkToggleButton *tbutton, gpointer data)
static void
_on_picture_button_clicked (GtkButton *button, gpointer data)
{
- FrogrDetailsDialog *self = FROGR_DETAILS_DIALOG (data);
- FrogrDetailsDialogPrivate *priv = FROGR_DETAILS_DIALOG_GET_PRIVATE (self);
+ FrogrDetailsDialogPrivate *priv = FROGR_DETAILS_DIALOG_GET_PRIVATE (data);
GSList *current_pic = NULL;
GList *uris_list = NULL;
FrogrPicture *picture = NULL;
- gchar *fileuri = NULL;
for (current_pic = priv->pictures; current_pic; current_pic = g_slist_next (current_pic))
{
picture = FROGR_PICTURE (current_pic->data);
- fileuri = g_strdup (frogr_picture_get_fileuri (picture));
-
- /* Dupped uris in the GList must NOT be freed here */
- uris_list = g_list_append (uris_list, fileuri);
+ uris_list = g_list_append (uris_list, g_strdup (frogr_picture_get_fileuri (picture)));
}
+ /* This function will already free the list and its elements */
frogr_util_open_images_in_viewer (uris_list);
-
- g_list_free (uris_list);
}
static void
@@ -1096,12 +1100,10 @@ _frogr_details_dialog_set_property (GObject *object,
const GValue *value,
GParamSpec *pspec)
{
- FrogrDetailsDialogPrivate *priv = FROGR_DETAILS_DIALOG_GET_PRIVATE (object);
-
switch (prop_id)
{
case PROP_PICTURES:
- priv->pictures = (GSList *) g_value_get_pointer (value);
+ _set_pictures (FROGR_DETAILS_DIALOG (object), g_value_get_pointer (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -1212,14 +1214,16 @@ frogr_details_dialog_init (FrogrDetailsDialog *self)
/* Public API */
void
-frogr_details_dialog_show (GtkWindow *parent, GSList *fpictures, GSList *tags)
+frogr_details_dialog_show (GtkWindow *parent,
+ const GSList *pictures,
+ const GSList *tags)
{
FrogrConfig *config = NULL;
GObject *new = NULL;
new = g_object_new (FROGR_TYPE_DETAILS_DIALOG,
"modal", TRUE,
- "pictures", fpictures,
+ "pictures", pictures,
"transient-for", parent,
"width-request", DIALOG_MIN_WIDTH,
"height-request", -1,
diff --git a/src/frogr-details-dialog.h b/src/frogr-details-dialog.h
index eec418c..10e6cb9 100644
--- a/src/frogr-details-dialog.h
+++ b/src/frogr-details-dialog.h
@@ -47,7 +47,9 @@ struct _FrogrDetailsDialog
GType frogr_details_dialog_get_type (void) G_GNUC_CONST;
-void frogr_details_dialog_show (GtkWindow *parent, GSList *fpictures, GSList *tags);
+void frogr_details_dialog_show (GtkWindow *parent,
+ const GSList *pictures,
+ const GSList *tags);
G_END_DECLS /* FROGR_DETAILS_DIALOG_H */
diff --git a/src/frogr-file-loader.c b/src/frogr-file-loader.c
index 3eb9d7d..3fe626b 100644
--- a/src/frogr-file-loader.c
+++ b/src/frogr-file-loader.c
@@ -687,21 +687,15 @@ frogr_file_loader_new (GSList *file_uris, gulong max_filesize)
{
FrogrFileLoader *self = NULL;
FrogrFileLoaderPrivate *priv = NULL;
- GSList *uri = NULL;
self = FROGR_FILE_LOADER (g_object_new(FROGR_TYPE_FILE_LOADER, NULL));
priv = FROGR_FILE_LOADER_GET_PRIVATE (self);
- /* We need to gain ownership of the strings */
- for (uri = file_uris; uri; uri = g_slist_next (uri))
- priv->file_uris = g_slist_prepend (priv->file_uris, g_strdup ((gchar *)uri->data));
- priv->file_uris = g_slist_reverse (priv->file_uris);
-
- /* Other internal data */
- priv->max_filesize = max_filesize;
+ priv->file_uris = file_uris;
priv->current = priv->file_uris;
priv->index = 0;
priv->n_files = g_slist_length (priv->file_uris);
+ priv->max_filesize = max_filesize;
return self;
}
diff --git a/src/frogr-live-entry.c b/src/frogr-live-entry.c
index 95cf23c..ea32f12 100644
--- a/src/frogr-live-entry.c
+++ b/src/frogr-live-entry.c
@@ -49,7 +49,7 @@ enum {
/* Prototypes */
-static void _populate_treemodel_with_data (GtkTreeModel *treemodel, GSList *entries);
+static void _populate_treemodel_with_data (GtkTreeModel *treemodel, const GSList *entries);
static gboolean _entry_list_completion_func (GtkEntryCompletion *completion, const gchar *key,
GtkTreeIter *iter, gpointer data);
@@ -60,11 +60,11 @@ static gboolean _completion_match_selected_cb (GtkEntryCompletion *widget, GtkTr
/* Private API */
static void
-_populate_treemodel_with_data (GtkTreeModel *treemodel, GSList *entries)
+_populate_treemodel_with_data (GtkTreeModel *treemodel, const GSList *entries)
{
if (treemodel && entries)
{
- GSList *item = NULL;
+ const GSList *item = NULL;
gchar *entry = NULL;
GtkTreeIter iter;
@@ -217,7 +217,7 @@ frogr_live_entry_new (void)
}
void
-frogr_live_entry_set_auto_completion (FrogrLiveEntry *self, GSList *data)
+frogr_live_entry_set_auto_completion (FrogrLiveEntry *self, const GSList *data)
{
FrogrLiveEntryPrivate *priv = NULL;
@@ -246,7 +246,7 @@ frogr_live_entry_set_auto_completion (FrogrLiveEntry *self, GSList *data)
}
/* Enable or disable auto-completion as needed */
- gtk_entry_set_completion (GTK_ENTRY (self), data ? priv->entry_completion: NULL);
+ gtk_entry_set_completion (GTK_ENTRY (self), data ? priv->entry_completion : NULL);
/* Populate the tree model with the data (or 'no data) passed */
if (priv->treemodel)
diff --git a/src/frogr-live-entry.h b/src/frogr-live-entry.h
index 5887ed7..bbda0a5 100644
--- a/src/frogr-live-entry.h
+++ b/src/frogr-live-entry.h
@@ -49,7 +49,7 @@ GType frogr_live_entry_get_type (void) G_GNUC_CONST;
GtkWidget *frogr_live_entry_new (void);
-void frogr_live_entry_set_auto_completion (FrogrLiveEntry *self, GSList *data);
+void frogr_live_entry_set_auto_completion (FrogrLiveEntry *self, const GSList *data);
G_END_DECLS /* FROGR_LIVE_ENTRY_H */
diff --git a/src/frogr-main-view.c b/src/frogr-main-view.c
index 72d3b50..f77d52c 100644
--- a/src/frogr-main-view.c
+++ b/src/frogr-main-view.c
@@ -454,11 +454,8 @@ _on_icon_view_drag_data_received (GtkWidget *widget,
fileuris_array = g_strsplit ((const gchar*)files_string, "\r\n", -1);
for (i = 0; fileuris_array[i]; i++)
{
- gchar *fileuri = g_strdup (fileuris_array[i]);
- if (fileuri && !g_str_equal (g_strstrip (fileuri), ""))
- fileuris_list = g_slist_append (fileuris_list, fileuri);
- else
- g_free (fileuri);
+ if (fileuris_array[i] && fileuris_array[i][0] != '\0')
+ fileuris_list = g_slist_append (fileuris_list, g_strdup (fileuris_array[i]));
}
/* Load pictures */
@@ -470,7 +467,6 @@ _on_icon_view_drag_data_received (GtkWidget *widget,
/* Free */
g_strfreev (fileuris_array);
- g_slist_free (fileuris_list);
}
void
@@ -828,9 +824,7 @@ _get_selected_pictures (FrogrMainView *self)
-1);
/* Add the picture to the list */
- g_object_ref (picture);
- pictures = g_slist_prepend (pictures, picture);
-
+ pictures = g_slist_prepend (pictures, g_object_ref (picture));
gtk_tree_path_free (path);
}
@@ -925,11 +919,7 @@ _load_pictures_dialog_response_cb (GtkDialog *dialog, gint response, gpointer da
/* Add selected pictures to icon view area */
fileuris = gtk_file_chooser_get_uris (GTK_FILE_CHOOSER (dialog));
if (fileuris != NULL)
- {
- _load_pictures (FROGR_MAIN_VIEW (self), fileuris);
- g_slist_foreach (fileuris, (GFunc) g_free, NULL);
- g_slist_free (fileuris);
- }
+ _load_pictures (FROGR_MAIN_VIEW (self), fileuris);
}
gtk_widget_destroy (GTK_WIDGET (dialog));
@@ -1077,13 +1067,12 @@ _open_pictures_in_external_viewer (FrogrMainView *self)
for (current_pic = pictures; current_pic; current_pic = g_slist_next (current_pic))
{
picture = FROGR_PICTURE (current_pic->data);
- uris_list = g_list_append (uris_list, (gchar *) frogr_picture_get_fileuri (picture));
+ uris_list = g_list_append (uris_list, g_strdup (frogr_picture_get_fileuri (picture)));
}
- g_slist_foreach (pictures, (GFunc) g_object_unref, NULL);
g_slist_free (pictures);
+ /* This function will already free the list and its elements */
frogr_util_open_images_in_viewer (uris_list);
- g_list_free (uris_list);
}
static void
@@ -1108,7 +1097,6 @@ _remove_selected_pictures (FrogrMainView *self)
_update_ui (self);
/* Free */
- g_slist_foreach (selected_pictures, (GFunc)g_object_unref, NULL);
g_slist_free (selected_pictures);
}
diff --git a/src/frogr-picture.c b/src/frogr-picture.c
index c23fde2..8d31309 100644
--- a/src/frogr-picture.c
+++ b/src/frogr-picture.c
@@ -1068,12 +1068,8 @@ frogr_picture_set_photosets (FrogrPicture *self, GSList *photosets)
g_slist_foreach (priv->photosets, (GFunc) g_object_unref, NULL);
g_slist_free (priv->photosets);
- priv->photosets = NULL;
- if (photosets)
- {
- priv->photosets = g_slist_copy (photosets);
- g_slist_foreach (priv->photosets, (GFunc) g_object_ref, NULL);
- }
+ priv->photosets = photosets;
+ g_slist_foreach (priv->photosets, (GFunc) g_object_ref, NULL);
}
void
@@ -1138,12 +1134,8 @@ frogr_picture_set_groups (FrogrPicture *self, GSList *groups)
g_slist_foreach (priv->groups, (GFunc) g_object_unref, NULL);
g_slist_free (priv->groups);
- priv->groups = NULL;
- if (groups)
- {
- priv->groups = g_slist_copy (groups);
- g_slist_foreach (priv->groups, (GFunc) g_object_ref, NULL);
- }
+ priv->groups = groups;
+ g_slist_foreach (priv->groups, (GFunc) g_object_ref, NULL);
}
void
diff --git a/src/frogr-util.c b/src/frogr-util.c
index 8acc2e5..8dac1d4 100644
--- a/src/frogr-util.c
+++ b/src/frogr-util.c
@@ -162,6 +162,9 @@ _open_uris_with_app_info (GList *uris_list, GAppInfo *app_info)
g_free (command);
g_free (uris);
}
+
+ g_list_foreach (uris_list, (GFunc) g_free, NULL);
+ g_list_free (uris_list);
}
void
@@ -184,9 +187,8 @@ frogr_util_open_uri (const gchar *uri)
app_info = g_app_info_get_default_for_uri_scheme ("ghelp");
#endif
- uris_list = g_list_append (uris_list, (gchar *) uri);
+ uris_list = g_list_append (uris_list, g_strdup (uri));
_open_uris_with_app_info (uris_list, app_info);
- g_list_free (uris_list);
}
void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]