diff options
author | Jody Goldberg <jody@gnome.org> | 2002-04-19 16:57:58 +0000 |
---|---|---|
committer | Jody Goldberg <jody@src.gnome.org> | 2002-04-19 16:57:58 +0000 |
commit | d5fe6a9930f42aec3d9dd485dde1a9de67d77e75 (patch) | |
tree | 2d1a7a367dbcdf46d0978cf867c19f86a68ec7bc /libbackground | |
parent | 5b494beab2b9f47bae67aa3e338a17ff98f19b0a (diff) | |
download | gnome-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/ChangeLog | 12 | ||||
-rw-r--r-- | libbackground/preferences.c | 64 |
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* |