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> 2002-04-17 Rachel Hestilow <hestilow@ximian.com>
* applier.c (need_root_pixmap_p): Return TRUE if pixmap is NULL. * 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->orientation = prefs->orientation;
new_prefs->wallpaper_type = prefs->wallpaper_type; new_prefs->wallpaper_type = prefs->wallpaper_type;
if (prefs->color1) if (new_prefs->color1 != NULL)
new_prefs->color1 = gdk_color_copy (prefs->color1); gdk_color_free (new_prefs->color1);
if (prefs->color2) new_prefs->color1 = (prefs->color1 != NULL)
new_prefs->color2 = gdk_color_copy (prefs->color2); ? 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); 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->wallpaper_sel_path = g_strdup (prefs->wallpaper_sel_path);;
new_prefs->auto_apply = prefs->auto_apply; new_prefs->auto_apply = prefs->auto_apply;
@ -203,9 +213,19 @@ bg_preferences_finalize (GObject *object)
prefs = BG_PREFERENCES (object); prefs = BG_PREFERENCES (object);
g_free (prefs->wallpaper_filename); g_free (prefs->wallpaper_filename);
prefs->wallpaper_filename = NULL;
g_free (prefs->wallpaper_sel_path); g_free (prefs->wallpaper_sel_path);
g_free (prefs->color1); prefs->wallpaper_sel_path = NULL;
g_free (prefs->color2);
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); 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->enabled = gconf_client_get_bool (client, BG_PREFERENCES_DRAW_BACKGROUND, &error);
prefs->wallpaper_filename = gconf_client_get_string (client, BG_PREFERENCES_PICTURE_FILENAME, &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); tmp = gconf_client_get_string (client, BG_PREFERENCES_PRIMARY_COLOR, &error);
g_free (prefs->color1);
prefs->color1 = read_color_from_string (tmp); prefs->color1 = read_color_from_string (tmp);
g_free (tmp); g_free (tmp);
if (prefs->color2 != NULL)
gdk_color_free (prefs->color2);
tmp = gconf_client_get_string (client, BG_PREFERENCES_SECONDARY_COLOR, &error); tmp = gconf_client_get_string (client, BG_PREFERENCES_SECONDARY_COLOR, &error);
g_free (prefs->color2);
prefs->color2 = read_color_from_string (tmp); prefs->color2 = read_color_from_string (tmp);
g_free (tmp); g_free (tmp);
@ -287,9 +310,13 @@ bg_preferences_merge_entry (BGPreferences *prefs,
prefs->wallpaper_enabled = FALSE; prefs->wallpaper_enabled = FALSE;
} }
else if (!strcmp (entry->key, BG_PREFERENCES_PRIMARY_COLOR)) { 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)); prefs->color1 = read_color_from_string (gconf_value_get_string (value));
} }
else if (!strcmp (entry->key, BG_PREFERENCES_SECONDARY_COLOR)) { 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)); prefs->color2 = read_color_from_string (gconf_value_get_string (value));
} }
else if (!strcmp (entry->key, BG_PREFERENCES_PICTURE_OPACITY)) { else if (!strcmp (entry->key, BG_PREFERENCES_PICTURE_OPACITY)) {
@ -360,20 +387,13 @@ read_orientation_from_string (gchar *string)
static GdkColor * static GdkColor *
read_color_from_string (const gchar *string) read_color_from_string (const gchar *string)
{ {
GdkColor *color; GdkColor color;
gint32 rgb;
color = g_new0 (GdkColor, 1); /* If all else fails use black */
if (string == NULL || !gdk_color_parse (string, &color))
if (string != NULL) { gdk_color_parse ("black", &color);
gdk_color_parse (string, color); gdk_rgb_find_color (gdk_rgb_get_colormap (), &color);
rgb = ((color->red >> 8) << 16) || return gdk_color_copy (&color);
((color->green >> 8) << 8) ||
(color->blue >> 8);
gdk_rgb_find_color (gdk_rgb_get_colormap (), color);
}
return color;
} }
const gchar* const gchar*