Skip to content

Commit

Permalink
TreeBrowser: Fix various runtime warnings and memory leaks
Browse files Browse the repository at this point in the history
  • Loading branch information
b4n committed Mar 4, 2013
1 parent 8b56073 commit daf789a
Showing 1 changed file with 24 additions and 32 deletions.
56 changes: 24 additions & 32 deletions treebrowser/src/treebrowser.c
Expand Up @@ -1014,10 +1014,9 @@ static void
on_menu_create_new_object(GtkMenuItem *menuitem, const gchar *type)
{
GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
GtkTreeIter iter;
GtkTreeIter iter, iter_parent;
GtkTreeModel *model;
gchar *uri, *uri_new = NULL;
GtkTreePath *path_parent;
gboolean refresh_root = FALSE;

if (gtk_tree_selection_get_selected(selection, &model, &iter))
Expand All @@ -1026,12 +1025,13 @@ on_menu_create_new_object(GtkMenuItem *menuitem, const gchar *type)
/* If not a directory, find parent directory */
if (! g_file_test(uri, G_FILE_TEST_IS_DIR))
{
path_parent = gtk_tree_model_get_path(GTK_TREE_MODEL(treestore), &iter);
/* Set iter from parent_path */
if (gtk_tree_path_up(path_parent) &&
gtk_tree_model_get_iter(GTK_TREE_MODEL(treestore), &iter, path_parent))
/* Set URI from new iter */
gtk_tree_model_get(model, &iter, TREEBROWSER_COLUMN_URI, &uri, -1);
if (gtk_tree_model_iter_parent(GTK_TREE_MODEL(treestore), &iter_parent, &iter))
{
iter = iter_parent;
/* Set URI from parent iter */
g_free(uri);
gtk_tree_model_get(model, &iter_parent, TREEBROWSER_COLUMN_URI, &uri, -1);
}
else
refresh_root = TRUE;
}
Expand Down Expand Up @@ -1085,9 +1085,8 @@ on_menu_delete(GtkMenuItem *menuitem, gpointer *user_data)
{

GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
GtkTreeIter iter;
GtkTreeIter iter, iter_parent;
GtkTreeModel *model;
GtkTreePath *path_parent;
gchar *uri, *uri_parent;

if (! gtk_tree_selection_get_selected(selection, &model, &iter))
Expand All @@ -1102,17 +1101,10 @@ on_menu_delete(GtkMenuItem *menuitem, gpointer *user_data)

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);
}
if (gtk_tree_model_iter_parent(GTK_TREE_MODEL(treestore), &iter_parent, &iter))
treebrowser_browse(uri_parent, &iter_parent);
else
treebrowser_browse(uri_parent, NULL);
gtk_tree_path_free(path_parent);
g_free(uri_parent);
}
g_free(uri);
Expand Down Expand Up @@ -1566,8 +1558,7 @@ on_treeview_renamed(GtkCellRenderer *renderer, const gchar *path_string, const g
GtkTreeViewColumn *column;
GList *renderers;
GtkTreeIter iter, iter_parent;
gchar *uri, *uri_new;
GtkTreePath *path_parent;
gchar *uri, *uri_new, *dirname;

column = gtk_tree_view_get_column(GTK_TREE_VIEW(treeview), 0);
renderers = _gtk_cell_layout_get_cells(column);
Expand All @@ -1580,31 +1571,32 @@ on_treeview_renamed(GtkCellRenderer *renderer, const gchar *path_string, const g
gtk_tree_model_get(GTK_TREE_MODEL(treestore), &iter, TREEBROWSER_COLUMN_URI, &uri, -1);
if (uri)
{
uri_new = g_strconcat(g_path_get_dirname(uri), G_DIR_SEPARATOR_S, name_new, NULL);
dirname = g_path_get_dirname(uri);
uri_new = g_strconcat(dirname, G_DIR_SEPARATOR_S, name_new, NULL);
g_free(dirname);
if (!(g_file_test(uri_new, G_FILE_TEST_EXISTS) &&
strcmp(uri, uri_new) != 0 &&
!dialogs_show_question(_("Target file '%s' exists, do you really want to replace it?"), uri_new)))
{
if (g_rename(uri, uri_new) == 0)
{
dirname = g_path_get_dirname(uri_new);
gtk_tree_store_set(treestore, &iter,
TREEBROWSER_COLUMN_NAME, name_new,
TREEBROWSER_COLUMN_URI, uri_new,
-1);
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_parent, path_parent))
treebrowser_browse(g_path_get_dirname(uri_new), &iter_parent);
else
treebrowser_browse(g_path_get_dirname(uri_new), NULL);
}
if (gtk_tree_model_iter_parent(GTK_TREE_MODEL(treestore), &iter_parent, &iter))
treebrowser_browse(dirname, &iter_parent);
else
treebrowser_browse(g_path_get_dirname(uri_new), NULL);
treebrowser_browse(dirname, NULL);
g_free(dirname);

if (!g_file_test(uri, G_FILE_TEST_IS_DIR))
if (document_close(document_find_by_filename(uri)))
{
GeanyDocument *doc = document_find_by_filename(uri);
if (doc && document_close(doc))
document_open_file(uri_new, FALSE, NULL, NULL);
}
}
}
g_free(uri_new);
Expand Down

0 comments on commit daf789a

Please sign in to comment.