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.
This commit is contained in:
Jody Goldberg 2002-04-19 16:57:58 +00:00 committed by Jody Goldberg
parent 5b494beab2
commit d5fe6a9930
2 changed files with 53 additions and 21 deletions

View file

@ -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.

View file

@ -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;
GdkColor color;
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);
}
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*