anjuta r4421 - in trunk: . plugins/file-manager
- From: sgranjoux svn gnome org
- To: svn-commits-list gnome org
- Subject: anjuta r4421 - in trunk: . plugins/file-manager
- Date: Sat, 6 Dec 2008 20:35:08 +0000 (UTC)
Author: sgranjoux
Date: Sat Dec 6 20:35:08 2008
New Revision: 4421
URL: http://svn.gnome.org/viewvc/anjuta?rev=4421&view=rev
Log:
* plugins/file-manager/plugin.c,
plugins/file-manager/file-model.c:
Fix #560284: Crash when deleting a folder outside Anjuta
Modified:
trunk/ChangeLog
trunk/plugins/file-manager/file-model.c
trunk/plugins/file-manager/plugin.c
Modified: trunk/plugins/file-manager/file-model.c
==============================================================================
--- trunk/plugins/file-manager/file-model.c (original)
+++ trunk/plugins/file-manager/file-model.c Sat Dec 6 20:35:08 2008
@@ -113,28 +113,6 @@
}
static void
-file_model_remove_file (FileModel* model,
- GtkTreeIter* iter)
-{
- GFile* file;
- GtkTreeRowReference* reference;
- GFileMonitor* monitor;
-
- gtk_tree_model_get (GTK_TREE_MODEL (model), iter,
- COLUMN_FILE, &file, -1);
-
- monitor = g_object_get_data (G_OBJECT(file), "file-monitor");
- if (monitor)
- g_object_unref (monitor);
-
- reference = g_object_get_data (G_OBJECT(file), "reference");
- if (reference)
- gtk_tree_row_reference_free(reference);
-
- gtk_tree_store_remove (GTK_TREE_STORE (model), iter);
-}
-
-static void
file_model_update_file (FileModel* model,
GtkTreeIter* iter,
GFile* file,
@@ -208,6 +186,7 @@
GtkTreeIter file_iter;
gboolean found = FALSE;
+ /* reference could be invalid if the file has already been destroyed */
if (!gtk_tree_row_reference_valid(reference))
return;
@@ -262,7 +241,7 @@
}
case G_FILE_MONITOR_EVENT_DELETED:
{
- file_model_remove_file (model, &file_iter);
+ gtk_tree_store_remove (GTK_TREE_STORE (model), &file_iter);
break;
}
default:
@@ -292,8 +271,9 @@
g_signal_connect (monitor, "changed", G_CALLBACK(on_file_model_changed),
reference);
- g_object_set_data (G_OBJECT(file), "file-monitor", monitor);
- g_object_set_data (G_OBJECT(file), "reference", reference);
+ g_object_set_data_full (G_OBJECT(file), "file-monitor", monitor, (GDestroyNotify)g_object_unref);
+ /* Reference is used by monitor, should be kept it until the monitor is destroyed */
+ g_object_set_data_full (G_OBJECT(monitor), "reference", reference, (GDestroyNotify)gtk_tree_row_reference_free);
g_object_unref (file);
}
@@ -319,14 +299,12 @@
if (!path)
{
gtk_tree_row_reference_free (ref);
- g_object_unref (dir);
g_object_unref (files);
return;
}
if (err)
{
- g_object_unref (dir);
DEBUG_PRINT ("GIO-Error: %s", err->message);
g_error_free (err);
// TODO: Collapse row
@@ -349,7 +327,6 @@
gtk_tree_path_free (path);
gtk_tree_row_reference_free (ref);
g_object_unref(files);
- g_object_unref(dir);
}
static void
@@ -388,6 +365,7 @@
cancel,
on_row_expanded_async,
data);
+ g_object_unref (dir);
}
static void
@@ -417,7 +395,7 @@
while (gtk_tree_model_iter_children (GTK_TREE_MODEL(model), &child, &real_iter))
{
- file_model_remove_file (model, &child);
+ gtk_tree_store_remove (GTK_TREE_STORE (model), &child);
}
file_model_add_dummy (model, &real_iter);
Modified: trunk/plugins/file-manager/plugin.c
==============================================================================
--- trunk/plugins/file-manager/plugin.c (original)
+++ trunk/plugins/file-manager/plugin.c Sat Dec 6 20:35:08 2008
@@ -131,6 +131,7 @@
g_value_set_object (value, file);
anjuta_shell_add_value (ANJUTA_PLUGIN (file_manager)->shell,
IANJUTA_FILE_MANAGER_SELECTED_FILE, value, NULL);
+ g_value_unset (value);
}
else
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]