brasero r1238 - in trunk: . src
- From: philippr svn gnome org
- To: svn-commits-list gnome org
- Subject: brasero r1238 - in trunk: . src
- Date: Wed, 3 Sep 2008 12:17:31 +0000 (UTC)
Author: philippr
Date: Wed Sep 3 12:17:31 2008
New Revision: 1238
URL: http://svn.gnome.org/viewvc/brasero?rev=1238&view=rev
Log:
Fix problems in last comment of #543377 No multisession:
Don\'t crash any more
Ability to import a disc after the project was loaded
* src/brasero-data-project.c
(brasero_data_project_uri_remove_graft),
(brasero_data_project_remove_node_children_graft_cb),
(brasero_data_project_node_removed),
(brasero_data_project_add_imported_session_file),
(brasero_data_project_load_contents):
* src/brasero-file-node.c (brasero_file_node_ungraft),
(brasero_file_node_destroy_with_children):
Modified:
trunk/ChangeLog
trunk/src/brasero-data-project.c
trunk/src/brasero-file-node.c
Modified: trunk/src/brasero-data-project.c
==============================================================================
--- trunk/src/brasero-data-project.c (original)
+++ trunk/src/brasero-data-project.c Wed Sep 3 12:17:31 2008
@@ -841,7 +841,7 @@
brasero_utils_unregister_string (key);
if (graft) {
- /* NOTE: no need to free graft->uri since that's key */
+ /* NOTE: no need to free graft->uri since that's the key */
g_slist_free (graft->nodes);
g_free (graft);
}
@@ -984,7 +984,7 @@
continue;
if (brasero_file_node_is_ancestor (data->node, iter_node))
- graft->nodes = g_slist_remove (graft->nodes, iter_node);
+ brasero_file_node_ungraft (iter_node);
}
if (graft->nodes)
@@ -1074,24 +1074,18 @@
graft = BRASERO_FILE_NODE_GRAFT (node);
uri_node = graft->node;
- if (g_slist_length (uri_node->nodes) == 1) {
+ /* NOTE: after this function the graft is invalid */
+ brasero_file_node_ungraft (node);
+
+ if (!uri_node->nodes) {
/* that's the last node grafted for this URI.
* There are no more nodes for this URI after.
* See if we should keep the URI in the hash;
* if so, the URI must have parents in the hash
*/
- if (brasero_data_project_uri_has_parent (self, uri_node->uri)) {
- /* here that means that this URI is
- * nowhere in the tree but has parent
- * URIs which are grafted. */
- g_slist_free (uri_node->nodes);
- uri_node->nodes = NULL;
- }
- else
+ if (!brasero_data_project_uri_has_parent (self, uri_node->uri))
brasero_data_project_uri_remove_graft (self, uri_node->uri);
}
- else
- uri_node->nodes = g_slist_remove (uri_node->nodes, node);
}
else if (!node->is_imported) {
gchar *uri;
@@ -1607,6 +1601,38 @@
node = brasero_file_node_check_name_existence (parent, BRASERO_VOLUME_FILE_NAME (file));
if (node) {
+ /* The node exists but it may be that we've loaded the project
+ * before. Then the necessary directories to hold the grafted
+ * files will have been created as fake directories. We need to
+ * replace those whenever we run into one but not lose their
+ * children. */
+ if (node->is_fake && node->is_tmp_parent) {
+ BraseroGraft *graft;
+ BraseroURINode *uri_node;
+
+ graft = BRASERO_FILE_NODE_GRAFT (node);
+ uri_node = graft->node;
+
+ /* NOTE after this function graft is invalid */
+ brasero_file_node_ungraft (node);
+
+ /* see if uri_node is still needed */
+ if (!uri_node->nodes
+ && !brasero_data_project_uri_has_parent (self, uri_node->uri))
+ brasero_data_project_uri_remove_graft (self, uri_node->uri);
+
+ node->is_fake = FALSE;
+ node->is_imported = TRUE;
+ node->is_tmp_parent = FALSE;
+
+ /* Something has changed, tell the tree */
+ klass = BRASERO_DATA_PROJECT_GET_CLASS (self);
+ if (klass->node_changed)
+ klass->node_changed (self, node);
+
+ return node;
+ }
+
if (brasero_data_project_file_signal (self, NAME_COLLISION_SIGNAL, BRASERO_FILE_NODE_NAME (node)))
return NULL;
@@ -2839,6 +2865,28 @@
/* get the URI for this node. There should be one now that all
* graft nodes are in the tree. */
uri = brasero_data_project_node_to_uri (self, tmp);
+ if (!uri) {
+ /* This node has been grafted under a node that was
+ * imported or was itself an imported node. Since there
+ * is no imported nodes any more, then it has to become
+ * fake.
+ * NOTE: it has to be a directory */
+ tmp->is_fake = TRUE;
+ tmp->is_loading = FALSE;
+ tmp->is_reloading = FALSE;
+ //tmp->is_tmp_parent = FALSE;
+
+ graft = brasero_data_project_uri_ensure_graft (self, NEW_FOLDER);
+ brasero_file_node_graft (tmp, graft);
+
+ priv->loading -= 2;
+
+ /* Signal that something has changed in the tree */
+ if (klass->node_added)
+ klass->node_added (self, tmp, uri);
+
+ continue;
+ }
/* graft it ? */
graft = brasero_data_project_uri_ensure_graft (self, uri);
Modified: trunk/src/brasero-file-node.c
==============================================================================
--- trunk/src/brasero-file-node.c (original)
+++ trunk/src/brasero-file-node.c Wed Sep 3 12:17:31 2008
@@ -651,7 +651,7 @@
/* Remove it from the URINode list of grafts */
graft->node->nodes = g_slist_remove (graft->node->nodes, node);
- /* The name must be exactly the one of the URI*/
+ /* The name must be exactly the one of the URI */
node->is_grafted = FALSE;
node->union1.name = graft->name;
@@ -1006,7 +1006,7 @@
BraseroFileNode *next;
BraseroImport *import;
BraseroGraft *graft;
-
+g_print ("DEESTROYING %s %i\n", BRASERO_FILE_NODE_NAME (node), node->is_grafted);
/* destroy all children recursively */
for (child = BRASERO_FILE_NODE_CHILDREN (node); child; child = next) {
next = child->next;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]