[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r19689 - gnunet-gtk/src/fs
From: |
gnunet |
Subject: |
[GNUnet-SVN] r19689 - gnunet-gtk/src/fs |
Date: |
Sat, 4 Feb 2012 22:09:11 +0100 |
Author: grothoff
Date: 2012-02-04 22:09:11 +0100 (Sat, 04 Feb 2012)
New Revision: 19689
Modified:
gnunet-gtk/src/fs/gnunet-fs-gtk_event-handler.c
Log:
-fix crash after lost parent event
Modified: gnunet-gtk/src/fs/gnunet-fs-gtk_event-handler.c
===================================================================
--- gnunet-gtk/src/fs/gnunet-fs-gtk_event-handler.c 2012-02-04 20:26:25 UTC
(rev 19688)
+++ gnunet-gtk/src/fs/gnunet-fs-gtk_event-handler.c 2012-02-04 21:09:11 UTC
(rev 19689)
@@ -402,11 +402,6 @@
de->is_directory = GNUNET_FS_meta_data_test_for_directory (meta);
if (save_as)
have_a_suggestion = GNUNET_NO;
- fprintf (stderr,
- "lp %d, have-sug: %d\n",
- local_parents,
- have_a_suggestion);
-
if ( (GNUNET_YES == local_parents) &&
(GNUNET_YES == have_a_suggestion) )
/* Skip the dialog, call directly */
@@ -1838,12 +1833,13 @@
*
* @param src_model source model
* @param src_iter parent of the nodes to move
- * @param dst_model destination model
+ * @param dst_tab destination tab
* @param dst_iter new parent of the entries we are moving
*/
static void
copy_children (GtkTreeModel * src_model, GtkTreeIter * src_iter,
- GtkTreeModel * dst_model, GtkTreeIter * dst_iter)
+ struct SearchTab *dst_tab,
+ GtkTreeIter * dst_iter)
{
GtkTreeIter src_child;
GtkTreeIter dst_child;
@@ -1857,7 +1853,8 @@
gchar *filename;
gchar *uri_as_string;
gchar *status_colour;
- struct SearchResult *search_result;
+ struct SearchResult *search_result_old;
+ struct SearchResult *search_result_new;
gchar *mimetype;
guint applicability_rank;
guint availability_certainty;
@@ -1869,26 +1866,53 @@
return;
do
{
- gtk_tree_model_get (src_model, &src_child, 0, &meta, 1, &uri, 2,
- &filesize, 3, &preview, 4, &percent_progress, 5,
- &percent_availability, 6, &filename, 7,
- &uri_as_string, 8, &status_colour, 9, &search_result,
- 10, &mimetype, 11, &applicability_rank, 12,
- &availability_certainty, 13, &availability_rank, 14,
- &completed, 15, &downloaded_filename, 16,
- &downloaded_anonymity, -1);
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (dst_model), &dst_child,
- dst_iter, G_MAXINT, 0, meta, 1, uri, 2,
- filesize, 3, preview, 4,
- percent_progress, 5,
- percent_availability, 6, filename, 7,
- uri_as_string, 8, status_colour, 9,
- search_result, 10, mimetype, 11,
- applicability_rank, 12,
- availability_certainty, 13,
- availability_rank, 14, completed, 15,
- downloaded_filename, 16,
- downloaded_anonymity, -1);
+ gtk_tree_model_get (src_model, &src_child,
+ 0, &meta,
+ 1, &uri,
+ 2, &filesize,
+ 3, &preview,
+ 4, &percent_progress,
+ 5, &percent_availability,
+ 6, &filename,
+ 7, &uri_as_string,
+ 8, &status_colour,
+ 9, &search_result_old,
+ 10, &mimetype,
+ 11, &applicability_rank,
+ 12, &availability_certainty,
+ 13, &availability_rank,
+ 14, &completed,
+ 15, &downloaded_filename,
+ 16, &downloaded_anonymity,
+ -1);
+ search_result_new = GNUNET_malloc (sizeof (struct SearchResult));
+ search_result_new->tab = dst_tab;
+ search_result_new->download = search_result_old->download;
+ if (NULL != search_result_old->download)
+ {
+ search_result_old->download = NULL;
+ search_result_new->download->sr = search_result_new;
+ }
+ gtk_tree_store_insert_with_values (dst_tab->ts, &dst_child,
+ dst_iter, G_MAXINT,
+ 0, GNUNET_CONTAINER_meta_data_duplicate
(meta),
+ 1, GNUNET_FS_uri_dup (uri),
+ 2, filesize,
+ 3, preview,
+ 4, percent_progress,
+ 5, percent_availability,
+ 6, filename,
+ 7, uri_as_string,
+ 8, status_colour,
+ 9, search_result_new,
+ 10, mimetype,
+ 11, applicability_rank,
+ 12, availability_certainty,
+ 13, availability_rank,
+ 14, completed,
+ 15, downloaded_filename,
+ 16, downloaded_anonymity,
+ -1);
g_free (filename);
g_free (downloaded_filename);
g_free (uri_as_string);
@@ -1896,37 +1920,18 @@
g_free (mimetype);
if (preview != NULL)
g_object_unref (preview);
- gtk_tree_row_reference_free (search_result->rr);
- path = gtk_tree_model_get_path (dst_model, &dst_child);
- search_result->rr = gtk_tree_row_reference_new (dst_model, path);
- search_result->result = NULL;
+
+ path = gtk_tree_model_get_path (GTK_TREE_MODEL (dst_tab->ts), &dst_child);
+ search_result_new->rr = gtk_tree_row_reference_new (GTK_TREE_MODEL
(dst_tab->ts), path);
gtk_tree_path_free (path);
- copy_children (src_model, &src_child, dst_model, &dst_child);
+
+ copy_children (src_model, &src_child, dst_tab, &dst_child);
}
while (TRUE == gtk_tree_model_iter_next (src_model, &src_child));
}
/**
- * Delete the entire given subtree from the model. Does not free
- * anything inside of the respective model's fields (since they have
- * been moved).
- *
- * @param model model that contains the subtree to remove
- * @param iter root of the subtree to remove
- */
-static void
-delete_stale_subtree (GtkTreeModel * model, GtkTreeIter * iter)
-{
- GtkTreeIter child;
-
- while (TRUE == gtk_tree_model_iter_children (model, &child, iter))
- delete_stale_subtree (model, &child);
- gtk_tree_store_remove (GTK_TREE_STORE (model), iter);
-}
-
-
-/**
* Handle the case where an active download lost its
* search parent by moving it to the URI tab.
*
@@ -1937,19 +1942,25 @@
{
GtkTreeIter iter;
GtkTreePath *path;
- GtkTreeRowReference *rr_old;
GtkTreeModel *tm_old;
GtkTreeIter iter_old;
- GtkTreeIter child;
GtkTreeModel *model;
struct GNUNET_CONTAINER_MetaData *meta;
struct GNUNET_FS_Uri *uri;
+ guint64 completed;
+ guint percent_progress;
+ guint percent_availability;
+ gchar *filename;
+ gchar *status_colour;
+ guint applicability_rank;
+ guint availability_certainty;
+ gint availability_rank;
+ gchar *downloaded_filename;
+ gint downloaded_anonymity;
/* find the 'old' root */
- rr_old = de->sr->rr;
- tm_old = gtk_tree_row_reference_get_model (rr_old);
- path = gtk_tree_row_reference_get_path (rr_old);
- gtk_tree_row_reference_free (rr_old);
+ tm_old = GTK_TREE_MODEL (de->sr->tab->ts);
+ path = gtk_tree_row_reference_get_path (de->sr->rr);
if (! gtk_tree_model_get_iter (tm_old, &iter_old, path))
{
GNUNET_break (0);
@@ -1960,9 +1971,21 @@
gtk_tree_model_get (tm_old, &iter_old,
0, &meta,
1, &uri,
+ 4, &percent_progress,
+ 5, &percent_availability,
+ 6, &filename,
+ 8, &status_colour,
+ 11, &applicability_rank,
+ 12, &availability_certainty,
+ 13, &availability_rank,
+ 14, &completed,
+ 15, &downloaded_filename,
+ 16, &downloaded_anonymity,
-1);
GNUNET_assert (GNUNET_YES == GNUNET_FS_uri_test_equal (uri, de->uri));
-
+ GNUNET_assert (de->sr->download == de);
+ de->sr->download = NULL;
+
/* create the target root */
de->sr = GNUNET_GTK_add_to_uri_tab (meta, uri);
de->sr->download = de;
@@ -1978,10 +2001,24 @@
}
gtk_tree_path_free (path);
+ gtk_tree_store_set (de->sr->tab->ts, &iter,
+ 4, percent_progress,
+ 5, percent_availability,
+ 6, filename,
+ 8, status_colour,
+ 11, applicability_rank,
+ 12, availability_certainty,
+ 13, availability_rank,
+ 14, completed,
+ 15, downloaded_filename,
+ 16, downloaded_anonymity,
+ -1);
+ g_free (filename);
+ g_free (downloaded_filename);
+ g_free (status_colour);
+
/* finally, move all children over as well */
- copy_children (tm_old, &iter_old, model, &iter);
- while (gtk_tree_model_iter_children (model, &child, &iter))
- delete_stale_subtree (model, &child);
+ copy_children (tm_old, &iter_old, de->sr->tab, &iter);
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r19689 - gnunet-gtk/src/fs,
gnunet <=