plug memory leaks. Closes bug #395212.

2007-02-03  Jens Granseuer  <jensgr@gmx.net>

	* gnome-da-capplet.c: (fill_combo_box), (show_dialog), (main):
	* gnome-da-xml.c: (gnome_da_xml_load_xml),
	(gnome_da_xml_load_list), (gnome_da_xml_free):
	* gnome-da-xml.h: plug memory leaks. Closes bug #395212.

svn path=/trunk/; revision=7235
This commit is contained in:
Jens Granseuer 2007-02-03 11:20:20 +00:00 committed by Jens Granseuer
parent 0441bef79d
commit 779fedcd6b
4 changed files with 83 additions and 27 deletions

View file

@ -1,3 +1,10 @@
2007-02-03 Jens Granseuer <jensgr@gmx.net>
* gnome-da-capplet.c: (fill_combo_box), (show_dialog), (main):
* gnome-da-xml.c: (gnome_da_xml_load_xml),
(gnome_da_xml_load_list), (gnome_da_xml_free):
* gnome-da-xml.h: plug memory leaks. Closes bug #395212.
2007-02-02 Christian Persch <chpe@svn.gnome.org> 2007-02-02 Christian Persch <chpe@svn.gnome.org>
* gnome-da-capplet.c: (main): Use specific string as app ID in * gnome-da-capplet.c: (main): Use specific string as app ID in

View file

@ -688,7 +688,6 @@ fill_combo_box (GtkIconTheme *theme, GtkComboBox *combo_box, GList *app_list)
GtkCellRenderer *renderer; GtkCellRenderer *renderer;
GtkTreeIter iter; GtkTreeIter iter;
GdkPixbuf *pixbuf; GdkPixbuf *pixbuf;
gchar *label;
if (theme == NULL) { if (theme == NULL) {
theme = gtk_icon_theme_get_default (); theme = gtk_icon_theme_get_default ();
@ -720,19 +719,17 @@ fill_combo_box (GtkIconTheme *theme, GtkComboBox *combo_box, GList *app_list)
item = (GnomeDAItem *) entry->data; item = (GnomeDAItem *) entry->data;
pixbuf = gtk_icon_theme_load_icon (theme, item->icon_name, 22, 0, NULL); pixbuf = gtk_icon_theme_load_icon (theme, item->icon_name, 22, 0, NULL);
label = g_strdup (item->name);
gtk_list_store_append (GTK_LIST_STORE (model), &iter); gtk_list_store_append (GTK_LIST_STORE (model), &iter);
gtk_list_store_set (GTK_LIST_STORE (model), &iter, gtk_list_store_set (GTK_LIST_STORE (model), &iter,
PIXBUF_COL, pixbuf, PIXBUF_COL, pixbuf,
TEXT_COL, label, TEXT_COL, item->name,
-1); -1);
item->icon_path = gtk_tree_model_get_string_from_iter (model, &iter); item->icon_path = gtk_tree_model_get_string_from_iter (model, &iter);
if (pixbuf) if (pixbuf)
g_object_unref (pixbuf); g_object_unref (pixbuf);
g_free (label);
} }
gtk_list_store_append (GTK_LIST_STORE (model), &iter); gtk_list_store_append (GTK_LIST_STORE (model), &iter);
@ -802,26 +799,50 @@ show_dialog (GnomeDACapplet *capplet)
/* update ui to gconf content */ /* update ui to gconf content */
value = gconf_client_get (capplet->gconf, DEFAULT_APPS_KEY_HTTP_EXEC, NULL); value = gconf_client_get (capplet->gconf, DEFAULT_APPS_KEY_HTTP_EXEC, NULL);
if (value)
{
web_browser_update_combo_box (capplet, gconf_value_get_string (value)); web_browser_update_combo_box (capplet, gconf_value_get_string (value));
web_browser_update_radio_buttons (capplet, gconf_value_get_string (value)); web_browser_update_radio_buttons (capplet, gconf_value_get_string (value));
gconf_value_free (value);
}
value = gconf_client_get (capplet->gconf, DEFAULT_APPS_KEY_HTTP_NEEDS_TERM, NULL); value = gconf_client_get (capplet->gconf, DEFAULT_APPS_KEY_HTTP_NEEDS_TERM, NULL);
if (value)
{
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (capplet->web_browser_terminal_checkbutton), gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (capplet->web_browser_terminal_checkbutton),
gconf_value_get_bool (value)); gconf_value_get_bool (value));
gconf_value_free (value);
}
value = gconf_client_get (capplet->gconf, DEFAULT_APPS_KEY_MAILER_EXEC, NULL); value = gconf_client_get (capplet->gconf, DEFAULT_APPS_KEY_MAILER_EXEC, NULL);
if (value)
{
mail_reader_update_combo_box (capplet, gconf_value_get_string (value)); mail_reader_update_combo_box (capplet, gconf_value_get_string (value));
gconf_value_free (value);
}
value = gconf_client_get (capplet->gconf, DEFAULT_APPS_KEY_MAILER_NEEDS_TERM, NULL); value = gconf_client_get (capplet->gconf, DEFAULT_APPS_KEY_MAILER_NEEDS_TERM, NULL);
if (value)
{
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (capplet->mail_reader_terminal_checkbutton), gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (capplet->mail_reader_terminal_checkbutton),
gconf_value_get_bool (value)); gconf_value_get_bool (value));
gconf_value_free (value);
}
if (value)
{
value = gconf_client_get (capplet->gconf, DEFAULT_APPS_KEY_TERMINAL_EXEC, NULL); value = gconf_client_get (capplet->gconf, DEFAULT_APPS_KEY_TERMINAL_EXEC, NULL);
terminal_update_combo_box (capplet, gconf_value_get_string (value)); terminal_update_combo_box (capplet, gconf_value_get_string (value));
gconf_value_free (value);
}
value = gconf_client_get (capplet->gconf, DEFAULT_APPS_KEY_TERMINAL_EXEC_ARG, NULL); value = gconf_client_get (capplet->gconf, DEFAULT_APPS_KEY_TERMINAL_EXEC_ARG, NULL);
if (value)
{
gtk_entry_set_text (GTK_ENTRY (capplet->terminal_exec_flag_entry), gtk_entry_set_text (GTK_ENTRY (capplet->terminal_exec_flag_entry),
gconf_value_get_string (value)); gconf_value_get_string (value));
gconf_value_free (value);
}
g_signal_connect (capplet->web_combo_box, "changed", G_CALLBACK (web_combo_changed_cb), capplet); g_signal_connect (capplet->web_combo_box, "changed", G_CALLBACK (web_combo_changed_cb), capplet);
g_signal_connect (capplet->mail_combo_box, "changed", G_CALLBACK (mail_combo_changed_cb), capplet); g_signal_connect (capplet->mail_combo_box, "changed", G_CALLBACK (mail_combo_changed_cb), capplet);
@ -853,21 +874,22 @@ show_dialog (GnomeDACapplet *capplet)
int int
main (int argc, char **argv) main (int argc, char **argv)
{ {
GnomeProgram *program;
GnomeDACapplet *capplet; GnomeDACapplet *capplet;
capplet = g_new0 (GnomeDACapplet, 1);
#ifdef ENABLE_NLS #ifdef ENABLE_NLS
bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR); bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR);
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
textdomain (GETTEXT_PACKAGE); textdomain (GETTEXT_PACKAGE);
#endif #endif
gnome_program_init ("gnome-default-applications-properties", VERSION, LIBGNOMEUI_MODULE, argc, argv, program = gnome_program_init ("gnome-default-applications-properties",
VERSION, LIBGNOMEUI_MODULE, argc, argv,
GNOME_PARAM_NONE); GNOME_PARAM_NONE);
glade_init (); glade_init ();
capplet = g_new0 (GnomeDACapplet, 1);
capplet->gconf = gconf_client_get_default (); capplet->gconf = gconf_client_get_default ();
gconf_client_add_dir (capplet->gconf, "/desktop/gnome/applications/browser", GCONF_CLIENT_PRELOAD_ONELEVEL, NULL); gconf_client_add_dir (capplet->gconf, "/desktop/gnome/applications/browser", GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
@ -891,7 +913,9 @@ main (int argc, char **argv)
gtk_main (); gtk_main ();
g_object_unref (capplet->gconf); g_object_unref (capplet->gconf);
g_object_unref (capplet->xml);
gnome_da_xml_free (capplet);
g_object_unref (program);
return 0; return 0;
} }

View file

@ -128,6 +128,7 @@ gnome_da_xml_load_xml (GnomeDACapplet *capplet, const gchar * filename)
{ {
xmlDoc *xml_doc; xmlDoc *xml_doc;
xmlNode *root, *section, *element; xmlNode *root, *section, *element;
gchar *executable;
GnomeDAWebItem *web_item; GnomeDAWebItem *web_item;
GnomeDAMailItem *mail_item; GnomeDAMailItem *mail_item;
GnomeDATermItem *term_item; GnomeDATermItem *term_item;
@ -143,11 +144,12 @@ gnome_da_xml_load_xml (GnomeDACapplet *capplet, const gchar * filename)
if (!xmlStrncmp (section->name, "web-browsers", 12)) { if (!xmlStrncmp (section->name, "web-browsers", 12)) {
for (element = section->children; element != NULL; element = element->next) { for (element = section->children; element != NULL; element = element->next) {
if (!xmlStrncmp (element->name, "web-browser", 11)) { if (!xmlStrncmp (element->name, "web-browser", 11)) {
if (is_executable_valid (gnome_da_xml_get_string (element, "executable"))) { executable = gnome_da_xml_get_string (element, "executable");
if (is_executable_valid (executable)) {
web_item = gnome_da_web_item_new (); web_item = gnome_da_web_item_new ();
web_item->generic.name = gnome_da_xml_get_string (element, "name"); web_item->generic.name = gnome_da_xml_get_string (element, "name");
web_item->generic.executable = gnome_da_xml_get_string (element, "executable"); web_item->generic.executable = executable;
web_item->generic.command = gnome_da_xml_get_string (element, "command"); web_item->generic.command = gnome_da_xml_get_string (element, "command");
web_item->generic.icon_name = gnome_da_xml_get_string (element, "icon-name"); web_item->generic.icon_name = gnome_da_xml_get_string (element, "icon-name");
@ -160,17 +162,20 @@ gnome_da_xml_load_xml (GnomeDACapplet *capplet, const gchar * filename)
capplet->web_browsers = g_list_append (capplet->web_browsers, web_item); capplet->web_browsers = g_list_append (capplet->web_browsers, web_item);
} }
else
g_free (executable);
} }
} }
} }
else if (!xmlStrncmp (section->name, "mail-readers", 12)) { else if (!xmlStrncmp (section->name, "mail-readers", 12)) {
for (element = section->children; element != NULL; element = element->next) { for (element = section->children; element != NULL; element = element->next) {
if (!xmlStrncmp (element->name, "mail-reader", 11)) { if (!xmlStrncmp (element->name, "mail-reader", 11)) {
if (is_executable_valid (gnome_da_xml_get_string (element, "executable"))) { executable = gnome_da_xml_get_string (element, "executable");
if (is_executable_valid (executable)) {
mail_item = gnome_da_mail_item_new (); mail_item = gnome_da_mail_item_new ();
mail_item->generic.name = gnome_da_xml_get_string (element, "name"); mail_item->generic.name = gnome_da_xml_get_string (element, "name");
mail_item->generic.executable = gnome_da_xml_get_string (element, "executable"); mail_item->generic.executable = executable;
mail_item->generic.command = gnome_da_xml_get_string (element, "command"); mail_item->generic.command = gnome_da_xml_get_string (element, "command");
mail_item->generic.icon_name = gnome_da_xml_get_string (element, "icon-name"); mail_item->generic.icon_name = gnome_da_xml_get_string (element, "icon-name");
@ -178,17 +183,20 @@ gnome_da_xml_load_xml (GnomeDACapplet *capplet, const gchar * filename)
capplet->mail_readers = g_list_append (capplet->mail_readers, mail_item); capplet->mail_readers = g_list_append (capplet->mail_readers, mail_item);
} }
else
g_free (executable);
} }
} }
} }
else if (!xmlStrncmp (section->name, "terminals", 9)) { else if (!xmlStrncmp (section->name, "terminals", 9)) {
for (element = section->children; element != NULL; element = element->next) { for (element = section->children; element != NULL; element = element->next) {
if (!xmlStrncmp (element->name, "terminal", 8)) { if (!xmlStrncmp (element->name, "terminal", 8)) {
if (is_executable_valid (gnome_da_xml_get_string (element, "executable"))) { executable = gnome_da_xml_get_string (element, "executable");
if (is_executable_valid (executable)) {
term_item = gnome_da_term_item_new (); term_item = gnome_da_term_item_new ();
term_item->generic.name = gnome_da_xml_get_string (element, "name"); term_item->generic.name = gnome_da_xml_get_string (element, "name");
term_item->generic.executable = gnome_da_xml_get_string (element, "executable"); term_item->generic.executable = executable;
term_item->generic.command = gnome_da_xml_get_string (element, "command"); term_item->generic.command = gnome_da_xml_get_string (element, "command");
term_item->generic.icon_name = gnome_da_xml_get_string (element, "icon-name"); term_item->generic.icon_name = gnome_da_xml_get_string (element, "icon-name");
@ -196,6 +204,8 @@ gnome_da_xml_load_xml (GnomeDACapplet *capplet, const gchar * filename)
capplet->terminals = g_list_append (capplet->terminals, term_item); capplet->terminals = g_list_append (capplet->terminals, term_item);
} }
else
g_free (executable);
} }
} }
} }
@ -222,3 +232,17 @@ gnome_da_xml_load_list (GnomeDACapplet *capplet)
if (capplet->web_browsers == NULL) if (capplet->web_browsers == NULL)
gnome_da_xml_load_xml (capplet, "./gnome-default-applications.xml"); gnome_da_xml_load_xml (capplet, "./gnome-default-applications.xml");
} }
void
gnome_da_xml_free (GnomeDACapplet *capplet)
{
g_list_foreach (capplet->web_browsers, (GFunc) gnome_da_web_item_free, NULL);
g_list_foreach (capplet->mail_readers, (GFunc) gnome_da_mail_item_free, NULL);
g_list_foreach (capplet->terminals, (GFunc) gnome_da_term_item_free, NULL);
g_list_free (capplet->web_browsers);
g_list_free (capplet->mail_readers);
g_list_free (capplet->terminals);
g_object_unref (capplet->xml);
g_free (capplet);
}

View file

@ -22,5 +22,6 @@
#define _GNOME_DA_XML_H_ #define _GNOME_DA_XML_H_
void gnome_da_xml_load_list (GnomeDACapplet *capplet); void gnome_da_xml_load_list (GnomeDACapplet *capplet);
void gnome_da_xml_free (GnomeDACapplet *capplet);
#endif #endif