SF.net SVN: geany-plugins:[1669] trunk/geany-plugins/treebrowser

dimitrov-adrian at users.sourceforge.net dimitrov-adrian at xxxxx
Sun Oct 17 15:31:32 UTC 2010


Revision: 1669
          http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=1669&view=rev
Author:   dimitrov-adrian
Date:     2010-10-17 15:31:31 +0000 (Sun, 17 Oct 2010)

Log Message:
-----------
Treebrowser: Fixed missing GIcon compilation error in gtk versions before 2.14; Fixed memory leaks (Patch by Colomban Wendling)

Modified Paths:
--------------
    trunk/geany-plugins/treebrowser/ChangeLog
    trunk/geany-plugins/treebrowser/src/treebrowser.c

Modified: trunk/geany-plugins/treebrowser/ChangeLog
===================================================================
--- trunk/geany-plugins/treebrowser/ChangeLog	2010-10-17 13:41:38 UTC (rev 1668)
+++ trunk/geany-plugins/treebrowser/ChangeLog	2010-10-17 15:31:31 UTC (rev 1669)
@@ -41,6 +41,13 @@
 17-10-2010 	Adrian Dimitrov 		<dimitrov.adrian at gmail.com>
 
 	* src/treebrowser.c
+		Fixed memory leaks
+			(Patch by Colomban Wendling)
+		Fixed missing GIcon compilation error in gtk versions before 2.14
+
+17-10-2010 	Adrian Dimitrov 		<dimitrov.adrian at gmail.com>
+
+	* src/treebrowser.c
 		Refactor a bit check_hidden() not to leak memory
 			(Patch by Colomban Wendling)
 

Modified: trunk/geany-plugins/treebrowser/src/treebrowser.c
===================================================================
--- trunk/geany-plugins/treebrowser/src/treebrowser.c	2010-10-17 13:41:38 UTC (rev 1668)
+++ trunk/geany-plugins/treebrowser/src/treebrowser.c	2010-10-17 15:31:31 UTC (rev 1669)
@@ -155,10 +155,23 @@
  * ------------------ */
 
 
+static gboolean
+tree_view_row_expanded_iter(GtkTreeView *tree_view, GtkTreeIter *iter)
+{
+	GtkTreePath *tree_path;
+	gboolean expanded;
+
+	tree_path = gtk_tree_model_get_path(gtk_tree_view_get_model(tree_view), &bookmarks_iter);
+	expanded = gtk_tree_view_row_expanded(tree_view, tree_path);
+	gtk_tree_path_free(tree_path);
+
+	return expanded;
+}
+
 static GdkPixbuf *
 utils_pixbuf_from_stock(const gchar *stock_id)
 {
-	GtkIconSet 	*icon_set;
+	GtkIconSet *icon_set;
 
 	icon_set = gtk_icon_factory_lookup_default(stock_id);
 
@@ -172,7 +185,7 @@
 static GdkPixbuf *
 utils_pixbuf_from_path(gchar *path)
 {
-#ifdef HAVE_GIO
+#if defined(HAVE_GIO) && GLIB_CHECK_VERSION(2, 14, 0)
 	GIcon 		*icon;
 	GdkPixbuf 	*ret = NULL;
 	GtkIconInfo *info;
@@ -210,6 +223,7 @@
 	const gchar *exts[] 			= {".o", ".obj", ".so", ".dll", ".a", ".lib"};
 	guint exts_len;
 	const gchar *ext;
+	gboolean	filtered;
 
 	if (CONFIG_HIDE_OBJECT_FILES)
 	{
@@ -235,11 +249,18 @@
 	else
 		i = 0;
 
+	filtered = CONFIG_REVERSE_FILTER || temporary_reverse ? TRUE : FALSE;
 	for (; filters[i]; i++)
+	{
 		if (utils_str_equal(base_name, "*") || g_pattern_match_simple(filters[i], base_name))
-			return CONFIG_REVERSE_FILTER || temporary_reverse ? FALSE : TRUE;
+		{
+			filtered = CONFIG_REVERSE_FILTER || temporary_reverse ? FALSE : TRUE;
+			break;
+		}
+	}
+	g_strfreev(filters);
 
-	return CONFIG_REVERSE_FILTER || temporary_reverse ? TRUE : FALSE;
+	return filtered;
 }
 
 static gboolean
@@ -287,8 +308,17 @@
 	GeanyDocument	*doc 		= document_get_current();
 
 	if (doc != NULL && doc->file_name != NULL && g_path_is_absolute(doc->file_name))
-		return utils_get_locale_from_utf8(g_path_get_dirname(doc->file_name));
+	{
+		gchar *dir_name;
+		gchar *ret;
 
+		dir_name = g_path_get_dirname(doc->file_name);
+		ret = utils_get_locale_from_utf8(dir_name);
+		g_free (dir_name);
+
+		return ret;
+	}
+
 	if (project)
 		dir = project->base_path;
 	else
@@ -335,9 +365,9 @@
 	treebrowser_bookmarks_set_state();
 
 	gtk_tree_store_clear(treestore);
-	addressbar_last_address = directory;
+	setptr(addressbar_last_address, g_strdup(directory));
 
-	treebrowser_browse(directory, NULL);
+	treebrowser_browse(addressbar_last_address, NULL);
 	treebrowser_load_bookmarks();
 }
 
@@ -364,7 +394,7 @@
 	else
 		parent = NULL;
 
-	if (has_parent && gtk_tree_view_row_expanded(GTK_TREE_VIEW(treeview), gtk_tree_model_get_path(GTK_TREE_MODEL(treestore), parent)))
+	if (has_parent && tree_view_row_expanded_iter(GTK_TREE_VIEW(treeview), parent))
 	{
 		expanded = TRUE;
 		treebrowser_bookmarks_set_state();
@@ -384,6 +414,8 @@
 
 			if (check_hidden(uri))
 			{
+				GdkPixbuf *icon = NULL;
+
 				if (is_dir)
 				{
 					if (last_dir_iter == NULL)
@@ -394,15 +426,19 @@
 						gtk_tree_iter_free(last_dir_iter);
 					}
 					last_dir_iter = gtk_tree_iter_copy(&iter);
+					icon = CONFIG_SHOW_ICONS ? utils_pixbuf_from_stock(GTK_STOCK_DIRECTORY) : NULL;
 					gtk_tree_store_set(treestore, &iter,
-										TREEBROWSER_COLUMN_ICON, 	CONFIG_SHOW_ICONS ? utils_pixbuf_from_stock(GTK_STOCK_DIRECTORY) : NULL,
+										TREEBROWSER_COLUMN_ICON, 	icon,
 										TREEBROWSER_COLUMN_NAME, 	fname,
 										TREEBROWSER_COLUMN_URI, 	uri,
 										-1);
 					gtk_tree_store_prepend(treestore, &iter_empty, &iter);
+					/* FIXME: why not simply _("(Empty)")? is this really better for translators?
+					 * this would also avoid the need to duplicate the string */
+					setptr(fname, g_strdup_printf("(%s)", _("Empty")));
 					gtk_tree_store_set(treestore, &iter_empty,
 									TREEBROWSER_COLUMN_ICON, 	NULL,
-									TREEBROWSER_COLUMN_NAME, 	g_strdup_printf("(%s)", _("Empty")),
+									TREEBROWSER_COLUMN_NAME, 	fname,
 									TREEBROWSER_COLUMN_URI, 	NULL,
 									-1);
 				}
@@ -410,19 +446,24 @@
 				{
 					if (check_filtered(utf8_name))
 					{
+						icon = CONFIG_SHOW_ICONS == 2
+									? utils_pixbuf_from_path(uri)
+									: CONFIG_SHOW_ICONS
+										? utils_pixbuf_from_stock(GTK_STOCK_FILE)
+										: NULL;
 						gtk_tree_store_append(treestore, &iter, parent);
 						gtk_tree_store_set(treestore, &iter,
-										TREEBROWSER_COLUMN_ICON, 	CONFIG_SHOW_ICONS == 2
-																		? utils_pixbuf_from_path(uri)
-																		: CONFIG_SHOW_ICONS
-																			? utils_pixbuf_from_stock(GTK_STOCK_FILE)
-																			: NULL,
+										TREEBROWSER_COLUMN_ICON, 	icon,
 										TREEBROWSER_COLUMN_NAME, 	fname,
 										TREEBROWSER_COLUMN_URI, 	uri,
 										-1);
 					}
 				}
+
+				if (icon)
+					g_object_unref(icon);
 			}
+			g_free(utf8_name);
 			g_free(fname);
 			g_free(uri);
 		}
@@ -431,11 +472,14 @@
 	else
 	{
 		gtk_tree_store_prepend(treestore, &iter_empty, parent);
+		/* see FIXME above */
+		fname = g_strdup_printf("(%s)", _("Empty"));
 		gtk_tree_store_set(treestore, &iter_empty,
 						TREEBROWSER_COLUMN_ICON, 	NULL,
-						TREEBROWSER_COLUMN_NAME, 	g_strdup_printf("(%s)", _("Empty")),
+						TREEBROWSER_COLUMN_NAME, 	fname,
 						TREEBROWSER_COLUMN_URI, 	NULL,
 						-1);
+		g_free(fname);
 	}
 
 	if (has_parent)
@@ -446,13 +490,15 @@
 	else
 		treebrowser_load_bookmarks();
 
+	g_free(directory);
+
 }
 
 static void
 treebrowser_bookmarks_set_state()
 {
 	if (gtk_tree_store_iter_is_valid(treestore, &bookmarks_iter))
-		bookmarks_expanded = gtk_tree_view_row_expanded(GTK_TREE_VIEW(treeview), gtk_tree_model_get_path(GTK_TREE_MODEL(treestore), &bookmarks_iter));
+		bookmarks_expanded = tree_view_row_expanded_iter(GTK_TREE_VIEW(treeview), &bookmarks_iter);
 	else
 		bookmarks_expanded = FALSE;
 }
@@ -461,7 +507,6 @@
 treebrowser_load_bookmarks()
 {
 	gchar 		*bookmarks;
-	GError 		*error = NULL;
 	gchar 		*contents, *path_full;
 	gchar 		**lines, **line;
 	GtkTreeIter iter;
@@ -473,21 +518,24 @@
 		return;
 
 	bookmarks = g_build_filename(g_get_home_dir(), ".gtk-bookmarks", NULL);
-	if (g_file_get_contents(bookmarks, &contents, NULL, &error))
+	if (g_file_get_contents(bookmarks, &contents, NULL, NULL))
 	{
 		if (gtk_tree_store_iter_is_valid(treestore, &bookmarks_iter))
 		{
-			bookmarks_expanded = gtk_tree_view_row_expanded(GTK_TREE_VIEW(treeview), gtk_tree_model_get_path(GTK_TREE_MODEL(treestore), &bookmarks_iter));
+			bookmarks_expanded = tree_view_row_expanded_iter(GTK_TREE_VIEW(treeview), &bookmarks_iter);
 			gtk_tree_store_iter_clear_nodes(&bookmarks_iter, FALSE);
 		}
 		else
 		{
 			gtk_tree_store_prepend(treestore, &bookmarks_iter, NULL);
+			icon = CONFIG_SHOW_ICONS ? utils_pixbuf_from_stock(GTK_STOCK_HOME) : NULL;
 			gtk_tree_store_set(treestore, &bookmarks_iter,
-											TREEBROWSER_COLUMN_ICON, 	CONFIG_SHOW_ICONS ? utils_pixbuf_from_stock(GTK_STOCK_HOME) : NULL,
+											TREEBROWSER_COLUMN_ICON, 	icon,
 											TREEBROWSER_COLUMN_NAME, 	_("Bookmarks"),
 											TREEBROWSER_COLUMN_URI, 	NULL,
 											-1);
+			if (icon)
+				g_object_unref(icon);
 
 			gtk_tree_store_insert_after(treestore, &iter, NULL, &bookmarks_iter);
 			gtk_tree_store_set(treestore, &iter,
@@ -517,27 +565,37 @@
 				if (g_file_test(path_full, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR))
 				{
 					gtk_tree_store_append(treestore, &iter, &bookmarks_iter);
+					icon = CONFIG_SHOW_ICONS ? utils_pixbuf_from_stock(GTK_STOCK_DIRECTORY) : NULL;
 					gtk_tree_store_set(treestore, &iter,
-												TREEBROWSER_COLUMN_ICON, 	CONFIG_SHOW_ICONS ? utils_pixbuf_from_stock(GTK_STOCK_DIRECTORY) : NULL,
+												TREEBROWSER_COLUMN_ICON, 	icon,
 												TREEBROWSER_COLUMN_NAME, 	g_basename(path_full),
 												TREEBROWSER_COLUMN_URI, 	path_full,
 												-1);
+					if (icon)
+						g_object_unref(icon);
 					gtk_tree_store_append(treestore, &iter, &iter);
+					/* see above for same strange thing */
+					setptr(path_full, g_strdup_printf("(%s)", _("Empty")));
 					gtk_tree_store_set(treestore, &iter,
 											TREEBROWSER_COLUMN_ICON, 	NULL,
-											TREEBROWSER_COLUMN_NAME, 	g_strdup_printf("(%s)", _("Empty")),
+											TREEBROWSER_COLUMN_NAME, 	path_full,
 											TREEBROWSER_COLUMN_URI, 	NULL,
 												-1);
 				}
+				g_free(path_full);
 			}
 		}
 		g_strfreev(lines);
 		g_free(contents);
 		if (bookmarks_expanded)
-			gtk_tree_view_expand_row(GTK_TREE_VIEW(treeview), gtk_tree_model_get_path(GTK_TREE_MODEL(treestore), &bookmarks_iter), FALSE);
+		{
+			GtkTreePath *tree_path;
+
+			tree_path = gtk_tree_model_get_path(GTK_TREE_MODEL(treestore), &bookmarks_iter);
+			gtk_tree_view_expand_row(GTK_TREE_VIEW(treeview), tree_path, FALSE);
+			gtk_tree_path_free(tree_path);
+		}
 	}
-	else
-		g_error_free(error);
 }
 
 static gboolean
@@ -551,20 +609,24 @@
 
 	do
 	{
-		gtk_tree_model_get(GTK_TREE_MODEL(treestore), &iter, TREEBROWSER_COLUMN_URI, &uri_current, -1);
-
 		if (gtk_tree_model_iter_has_child(GTK_TREE_MODEL(treestore), &iter))
 			if (treebrowser_search(uri, &iter))
 				return TRUE;
 
+		gtk_tree_model_get(GTK_TREE_MODEL(treestore), &iter, TREEBROWSER_COLUMN_URI, &uri_current, -1);
+
 		if (utils_str_equal(uri, uri_current) == TRUE)
 		{
 			path = gtk_tree_model_get_path(GTK_TREE_MODEL(treestore), &iter);
 			gtk_tree_view_expand_to_path(GTK_TREE_VIEW(treeview), path);
 			gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(treeview), path, TREEBROWSER_COLUMN_ICON, FALSE, 0, 0);
 			gtk_tree_view_set_cursor(GTK_TREE_VIEW(treeview), path, treeview_column_text, FALSE);
+			gtk_tree_path_free(path);
+			g_free(uri_current);
 			return TRUE;
 		}
+		else
+			g_free(uri_current);
 
 	} while(gtk_tree_model_iter_next(GTK_TREE_MODEL(treestore), &iter));
 
@@ -598,6 +660,7 @@
 			if (g_file_test(path, G_FILE_TEST_IS_DIR))
 				fs_remove(path, delete_root);
 			g_remove(path);
+			g_free(path);
 			name = g_dir_read_name(dir);
 		}
 	}
@@ -607,7 +670,6 @@
 	if (delete_root)
 		g_remove(root);
 
-	g_free(path);
 	return;
 }
 
@@ -664,6 +726,9 @@
 		 * NEED TO REWORK THE CONCEPT
 		 */
 
+		g_strfreev(path_segments);
+		g_free(path_current);
+
 		return FALSE;
 	}
 	return FALSE;
@@ -717,13 +782,21 @@
 static void
 on_menu_go_up(GtkMenuItem *menuitem, gpointer *user_data)
 {
-	treebrowser_chroot(g_path_get_dirname(addressbar_last_address));
+	gchar *uri;
+
+	uri = g_path_get_dirname(addressbar_last_address);
+	treebrowser_chroot(uri);
+	g_free(uri);
 }
 
 static void
 on_menu_current_path(GtkMenuItem *menuitem, gpointer *user_data)
 {
-	treebrowser_chroot(get_default_dir());
+	gchar *uri;
+
+	uri = get_default_dir();
+	treebrowser_chroot(uri);
+	g_free(uri);
 }
 
 static void
@@ -764,9 +837,11 @@
 	if (g_file_test(uri, G_FILE_TEST_EXISTS))
 		uri = g_file_test(uri, G_FILE_TEST_IS_DIR) ? g_strdup(uri) : g_path_get_dirname(uri);
 	else
-		uri = addressbar_last_address;
+		uri = g_strdup(addressbar_last_address);
 
 	g_spawn_async(uri, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL);
+	g_free(uri);
+	g_free(argv[0]);
 }
 
 static void
@@ -782,7 +857,7 @@
 	GtkTreeSelection 	*selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
 	GtkTreeIter 		iter;
 	GtkTreeModel 		*model;
-	gchar 				*uri, *uri_new;
+	gchar 				*uri, *uri_new = NULL;
 	GtkTreePath 		*path_parent;
 	gboolean 			refresh_root = FALSE;
 
@@ -791,7 +866,7 @@
 		gtk_tree_model_get(model, &iter, TREEBROWSER_COLUMN_URI, &uri, -1);
 		if (! g_file_test(uri, G_FILE_TEST_IS_DIR))
 		{
-			uri 		= g_path_get_dirname(uri);
+			setptr(uri, g_path_get_dirname(uri));
 			path_parent = gtk_tree_model_get_path(GTK_TREE_MODEL(treestore), &iter);
 			if (gtk_tree_path_up(path_parent) &&
 				gtk_tree_model_get_iter(GTK_TREE_MODEL(treestore), &iter, path_parent));
@@ -802,37 +877,35 @@
 	else
 	{
 		refresh_root 	= TRUE;
-		uri 			= addressbar_last_address;
+		uri 			= g_strdup(addressbar_last_address);
 	}
 
 	if (utils_str_equal(type, "directory"))
 		uri_new = g_strconcat(uri, G_DIR_SEPARATOR_S, _("NewDirectory"), NULL);
-	else
-		if (utils_str_equal(type, "file"))
-			uri_new = g_strconcat(uri, G_DIR_SEPARATOR_S, _("NewFile"), NULL);
-		else
-			return;
+	else if (utils_str_equal(type, "file"))
+		uri_new = g_strconcat(uri, G_DIR_SEPARATOR_S, _("NewFile"), NULL);
 
-	while(g_file_test(uri_new, G_FILE_TEST_EXISTS))
-		uri_new = g_strconcat(uri_new, "_", NULL);
+	if (uri_new)
+	{
+		gboolean creation_success = FALSE;
 
-	if (utils_str_equal(type, "directory"))
-	{
-		if (g_mkdir(uri_new, 0755) == 0)
-			treebrowser_browse(uri, refresh_root ? NULL : &iter);
+		while(g_file_test(uri_new, G_FILE_TEST_EXISTS))
+			setptr(uri_new, g_strconcat(uri_new, "_", NULL));
+
+		if (utils_str_equal(type, "directory"))
+			creation_success = (g_mkdir(uri_new, 0755) == 0);
 		else
-			return;
-	}
-	else
-	{
-		if (g_creat(uri_new, 0755) != -1)
+			creation_success = (g_creat(uri_new, 0755) != -1);
+
+		if (creation_success)
+		{
 			treebrowser_browse(uri, refresh_root ? NULL : &iter);
-		else
-			return;
+			if (treebrowser_search(uri_new, NULL))
+				treebrowser_rename_current();
+		}
+		g_free(uri_new);
 	}
-
-	if (treebrowser_search(uri_new, NULL))
-		treebrowser_rename_current();
+	g_free(uri);
 }
 
 static void
@@ -856,24 +929,27 @@
 
 	gtk_tree_model_get(model, &iter, TREEBROWSER_COLUMN_URI, &uri, -1);
 
-	if (! dialogs_show_question(_("Do you really want to delete '%s' ?"), uri))
-		return;
+	if (dialogs_show_question(_("Do you really want to delete '%s' ?"), uri))
+	{
+		if (CONFIG_ON_DELETE_CLOSE_FILE && !g_file_test(uri, G_FILE_TEST_IS_DIR))
+			document_close(document_find_by_filename(uri));
 
-	if (CONFIG_ON_DELETE_CLOSE_FILE && !g_file_test(uri, G_FILE_TEST_IS_DIR))
-		document_close(document_find_by_filename(uri));
-
-	uri_parent = g_path_get_dirname(uri);
-	fs_remove(uri, TRUE);
-	path_parent = gtk_tree_model_get_path(GTK_TREE_MODEL(treestore), &iter);
-	if (gtk_tree_path_up(path_parent))
-	{
-		if (gtk_tree_model_get_iter(GTK_TREE_MODEL(treestore), &iter, path_parent))
-			treebrowser_browse(uri_parent, &iter);
+		uri_parent = g_path_get_dirname(uri);
+		fs_remove(uri, TRUE);
+		path_parent = gtk_tree_model_get_path(GTK_TREE_MODEL(treestore), &iter);
+		if (gtk_tree_path_up(path_parent))
+		{
+			if (gtk_tree_model_get_iter(GTK_TREE_MODEL(treestore), &iter, path_parent))
+				treebrowser_browse(uri_parent, &iter);
+			else
+				treebrowser_browse(uri_parent, NULL);
+		}
 		else
 			treebrowser_browse(uri_parent, NULL);
+		gtk_tree_path_free(path_parent);
+		g_free(uri_parent);
 	}
-	else
-		treebrowser_browse(uri_parent, NULL);
+	g_free(uri);
 }
 
 static void
@@ -889,6 +965,7 @@
 		gtk_tree_model_get(model, &iter, TREEBROWSER_COLUMN_URI, &uri, -1);
 		if (g_file_test(uri, G_FILE_TEST_IS_DIR))
 			treebrowser_browse(uri, &iter);
+		g_free(uri);
 	}
 	else
 		treebrowser_browse(addressbar_last_address, NULL);
@@ -1057,7 +1134,11 @@
 static void
 on_button_go_up()
 {
-	treebrowser_chroot(g_path_get_dirname(addressbar_last_address));
+	gchar *uri;
+
+	uri = g_path_get_dirname(addressbar_last_address);
+	treebrowser_chroot(uri);
+	g_free(uri);
 }
 
 static void
@@ -1069,13 +1150,21 @@
 static void
 on_button_go_home()
 {
-	treebrowser_chroot(g_strdup(g_get_home_dir()));
+	gchar *uri;
+
+	uri = g_strdup(g_get_home_dir());
+	treebrowser_chroot(uri);
+	g_free(uri);
 }
 
 static void
 on_button_current_path()
 {
-	treebrowser_chroot(get_default_dir());
+	gchar *uri;
+
+	uri = get_default_dir();
+	treebrowser_chroot(uri);
+	g_free(uri);
 }
 
 static void
@@ -1131,6 +1220,9 @@
 	gchar 			*name = "", *uri = "";
 
 	if (gtk_tree_selection_get_selected(selection, &model, &iter))
+		/* FIXME: name and uri should be freed, but they are passed to create_popup_menu()
+		 * that pass them directly to some callbacks, so we can't free them here for now.
+		 * Gotta find a way out... */
 		gtk_tree_model_get(GTK_TREE_MODEL(treestore), &iter,
 							TREEBROWSER_COLUMN_NAME, &name,
 							TREEBROWSER_COLUMN_URI, &uri,
@@ -1157,7 +1249,7 @@
 		gtk_tree_model_get(GTK_TREE_MODEL(treestore), &iter,
 							TREEBROWSER_COLUMN_URI, &uri,
 							-1);
-		if (uri == FALSE)
+		if (uri == NULL)
 			return;
 
 		if (g_file_test(uri, G_FILE_TEST_EXISTS))
@@ -1170,6 +1262,8 @@
 		}
 		else
 			gtk_tree_store_iter_clear_nodes(&iter, TRUE);
+
+		g_free(uri);
 	}
 }
 
@@ -1182,7 +1276,7 @@
 	gtk_tree_model_get_iter(GTK_TREE_MODEL(treestore), &iter, path);
 	gtk_tree_model_get(GTK_TREE_MODEL(treestore), &iter, TREEBROWSER_COLUMN_URI, &uri, -1);
 
-	if (uri == FALSE)
+	if (uri == NULL)
 		return;
 
 	if (g_file_test (uri, G_FILE_TEST_IS_DIR))
@@ -1195,6 +1289,8 @@
 				gtk_tree_view_expand_row(GTK_TREE_VIEW(widget), path, FALSE);
 	else
 		document_open_file(uri, FALSE, NULL, NULL);
+
+	g_free(uri);
 }
 
 static void
@@ -1203,7 +1299,7 @@
 	gchar *uri;
 
 	gtk_tree_model_get(GTK_TREE_MODEL(treestore), iter, TREEBROWSER_COLUMN_URI, &uri, -1);
-	if (uri == FALSE)
+	if (uri == NULL)
 		return;
 
 	if (flag_on_expand_refresh == FALSE)
@@ -1214,7 +1310,14 @@
 		flag_on_expand_refresh = FALSE;
 	}
 	if (CONFIG_SHOW_ICONS)
-		gtk_tree_store_set(treestore, iter, TREEBROWSER_COLUMN_ICON, utils_pixbuf_from_stock(GTK_STOCK_OPEN), -1);
+	{
+		GdkPixbuf *icon = utils_pixbuf_from_stock(GTK_STOCK_OPEN);
+
+		gtk_tree_store_set(treestore, iter, TREEBROWSER_COLUMN_ICON, icon, -1);
+		g_object_unref(icon);
+	}
+
+	g_free(uri);
 }
 
 static void
@@ -1222,10 +1325,16 @@
 {
 	gchar *uri;
 	gtk_tree_model_get(GTK_TREE_MODEL(treestore), iter, TREEBROWSER_COLUMN_URI, &uri, -1);
-	if (uri == FALSE)
+	if (uri == NULL)
 		return;
 	if (CONFIG_SHOW_ICONS)
-		gtk_tree_store_set(treestore, iter, TREEBROWSER_COLUMN_ICON, utils_pixbuf_from_stock(GTK_STOCK_DIRECTORY), -1);
+	{
+		GdkPixbuf *icon = utils_pixbuf_from_stock(GTK_STOCK_DIRECTORY);
+
+		gtk_tree_store_set(treestore, iter, TREEBROWSER_COLUMN_ICON, icon, -1);
+		g_object_unref(icon);
+	}
+	g_free(uri);
 }
 
 static void
@@ -1271,6 +1380,8 @@
 					if (document_close(document_find_by_filename(uri)))
 						document_open_file(uri_new, FALSE, NULL, NULL);
 			}
+			g_free(uri_new);
+			g_free(uri);
 		}
 	}
 }
@@ -1489,7 +1600,11 @@
 
 	g_key_file_load_from_file(config, CONFIG_FILE, G_KEY_FILE_NONE, NULL);
 	if (! g_file_test(config_dir, G_FILE_TEST_IS_DIR) && utils_mkdir(config_dir, TRUE) != 0)
+	{
+		g_free(config_dir);
+		g_key_file_free(config);
 		return FALSE;
+	}
 
 	g_key_file_set_string(config, 	"treebrowser", "open_external_cmd", 	CONFIG_OPEN_EXTERNAL_CMD);
 	g_key_file_set_boolean(config, 	"treebrowser", "reverse_filter", 		CONFIG_REVERSE_FILTER);
@@ -1508,6 +1623,9 @@
 	utils_write_file(CONFIG_FILE, data);
 	g_free(data);
 
+	g_free(config_dir);
+	g_key_file_free(config);
+
 	return TRUE;
 }
 
@@ -1657,7 +1775,11 @@
 static void
 project_change_cb(G_GNUC_UNUSED GObject *obj, G_GNUC_UNUSED GKeyFile *config, G_GNUC_UNUSED gpointer data)
 {
-	treebrowser_chroot(get_default_dir());
+	gchar *uri;
+
+	uri = get_default_dir();
+	treebrowser_chroot(uri);
+	g_free(uri);
 }
 
 static void kb_activate(guint key_id)


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Plugins-Commits mailing list