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.
This commit is contained in:
parent
5b494beab2
commit
d5fe6a9930
2 changed files with 53 additions and 21 deletions
|
@ -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.
|
||||||
|
|
|
@ -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*
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue