summaryrefslogtreecommitdiff
path: root/libbackground
diff options
context:
space:
mode:
authorJody Goldberg <jody@gnome.org>2002-04-19 16:57:58 +0000
committerJody Goldberg <jody@src.gnome.org>2002-04-19 16:57:58 +0000
commitd5fe6a9930f42aec3d9dd485dde1a9de67d77e75 (patch)
tree2d1a7a367dbcdf46d0978cf867c19f86a68ec7bc /libbackground
parent5b494beab2b9f47bae67aa3e338a17ff98f19b0a (diff)
downloadgnome-control-center-d5fe6a9930f42aec3d9dd485dde1a9de67d77e75.tar.gz
http://bugzilla.gnome.org/show_bug.cgi?id=79149 fix leaks and use
2002-04-19 Jody Goldberg <jody@gnome.org> http://bugzilla.gnome.org/show_bug.cgi?id=79149 * preferences.c (bg_preferences_clone) : fix leaks and use gdk_color_free because some wiseguy thought GdkColours should use memchunks. (bg_preferences_load) : ditto. (bg_preferences_merge_entry) : ditto. (read_color_from_string) : ditto. (bg_preferences_finalize) : ditto. clean out pointers to protect against multiple calls.
Diffstat (limited to 'libbackground')
-rw-r--r--libbackground/ChangeLog12
-rw-r--r--libbackground/preferences.c64
2 files changed, 54 insertions, 22 deletions
diff --git a/libbackground/ChangeLog b/libbackground/ChangeLog
index 76aa96761..d48348ea9 100644
--- a/libbackground/ChangeLog
+++ b/libbackground/ChangeLog
@@ -1,3 +1,15 @@
+2002-04-19 Jody Goldberg <jody@gnome.org>
+
+ http://bugzilla.gnome.org/show_bug.cgi?id=79149
+ * preferences.c (bg_preferences_clone) : fix leaks and use
+ gdk_color_free because some wiseguy thought GdkColours should use
+ memchunks.
+ (bg_preferences_load) : ditto.
+ (bg_preferences_merge_entry) : ditto.
+ (read_color_from_string) : ditto.
+ (bg_preferences_finalize) : ditto. clean out pointers to protect
+ against multiple calls.
+
2002-04-17 Rachel Hestilow <hestilow@ximian.com>
* applier.c (need_root_pixmap_p): Return TRUE if pixmap is NULL.
diff --git a/libbackground/preferences.c b/libbackground/preferences.c
index d48bdf936..782a269e4 100644
--- a/libbackground/preferences.c
+++ b/libbackground/preferences.c
@@ -177,12 +177,22 @@ bg_preferences_clone (const BGPreferences *prefs)
new_prefs->orientation = prefs->orientation;
new_prefs->wallpaper_type = prefs->wallpaper_type;
- if (prefs->color1)
- new_prefs->color1 = gdk_color_copy (prefs->color1);
- if (prefs->color2)
- new_prefs->color2 = gdk_color_copy (prefs->color2);
-
+ if (new_prefs->color1 != NULL)
+ gdk_color_free (new_prefs->color1);
+ new_prefs->color1 = (prefs->color1 != NULL)
+ ? gdk_color_copy (prefs->color1) : NULL;
+
+ if (new_prefs->color2 != NULL)
+ gdk_color_free (new_prefs->color2);
+ new_prefs->color2 = (prefs->color2 != NULL)
+ ? gdk_color_copy (prefs->color2) : NULL;
+
+ if (new_prefs->wallpaper_filename != NULL)
+ g_free (new_prefs->wallpaper_filename);
new_prefs->wallpaper_filename = g_strdup (prefs->wallpaper_filename);
+
+ if (new_prefs->wallpaper_sel_path != NULL)
+ g_free (new_prefs->wallpaper_sel_path);
new_prefs->wallpaper_sel_path = g_strdup (prefs->wallpaper_sel_path);;
new_prefs->auto_apply = prefs->auto_apply;
@@ -203,9 +213,19 @@ bg_preferences_finalize (GObject *object)
prefs = BG_PREFERENCES (object);
g_free (prefs->wallpaper_filename);
+ prefs->wallpaper_filename = NULL;
+
g_free (prefs->wallpaper_sel_path);
- g_free (prefs->color1);
- g_free (prefs->color2);
+ prefs->wallpaper_sel_path = NULL;
+
+ if (prefs->color1 != NULL) {
+ gdk_color_free (prefs->color1);
+ prefs->color1 = NULL;
+ }
+ if (prefs->color2 != NULL) {
+ gdk_color_free (prefs->color2);
+ prefs->color2 = NULL;
+ }
parent_class->finalize (object);
}
@@ -224,12 +244,15 @@ bg_preferences_load (BGPreferences *prefs)
prefs->enabled = gconf_client_get_bool (client, BG_PREFERENCES_DRAW_BACKGROUND, &error);
prefs->wallpaper_filename = gconf_client_get_string (client, BG_PREFERENCES_PICTURE_FILENAME, &error);
+ if (prefs->color1 != NULL)
+ gdk_color_free (prefs->color1);
tmp = gconf_client_get_string (client, BG_PREFERENCES_PRIMARY_COLOR, &error);
- g_free (prefs->color1);
prefs->color1 = read_color_from_string (tmp);
g_free (tmp);
+
+ if (prefs->color2 != NULL)
+ gdk_color_free (prefs->color2);
tmp = gconf_client_get_string (client, BG_PREFERENCES_SECONDARY_COLOR, &error);
- g_free (prefs->color2);
prefs->color2 = read_color_from_string (tmp);
g_free (tmp);
@@ -287,9 +310,13 @@ bg_preferences_merge_entry (BGPreferences *prefs,
prefs->wallpaper_enabled = FALSE;
}
else if (!strcmp (entry->key, BG_PREFERENCES_PRIMARY_COLOR)) {
+ if (prefs->color1 != NULL)
+ gdk_color_free (prefs->color1);
prefs->color1 = read_color_from_string (gconf_value_get_string (value));
}
else if (!strcmp (entry->key, BG_PREFERENCES_SECONDARY_COLOR)) {
+ if (prefs->color2 != NULL)
+ gdk_color_free (prefs->color2);
prefs->color2 = read_color_from_string (gconf_value_get_string (value));
}
else if (!strcmp (entry->key, BG_PREFERENCES_PICTURE_OPACITY)) {
@@ -360,20 +387,13 @@ read_orientation_from_string (gchar *string)
static GdkColor *
read_color_from_string (const gchar *string)
{
- GdkColor *color;
- gint32 rgb;
-
- color = g_new0 (GdkColor, 1);
-
- if (string != NULL) {
- gdk_color_parse (string, color);
- rgb = ((color->red >> 8) << 16) ||
- ((color->green >> 8) << 8) ||
- (color->blue >> 8);
- gdk_rgb_find_color (gdk_rgb_get_colormap (), color);
- }
+ GdkColor color;
- return color;
+ /* If all else fails use black */
+ if (string == NULL || !gdk_color_parse (string, &color))
+ gdk_color_parse ("black", &color);
+ gdk_rgb_find_color (gdk_rgb_get_colormap (), &color);
+ return gdk_color_copy (&color);
}
const gchar*