gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r11825 - gnunet-gtk/src


From: gnunet
Subject: [GNUnet-SVN] r11825 - gnunet-gtk/src
Date: Sun, 20 Jun 2010 13:47:54 +0200

Author: grothoff
Date: 2010-06-20 13:47:54 +0200 (Sun, 20 Jun 2010)
New Revision: 11825

Modified:
   gnunet-gtk/src/fs_event_handler.c
Log:
publish stop, suspend handling

Modified: gnunet-gtk/src/fs_event_handler.c
===================================================================
--- gnunet-gtk/src/fs_event_handler.c   2010-06-20 11:38:40 UTC (rev 11824)
+++ gnunet-gtk/src/fs_event_handler.c   2010-06-20 11:47:54 UTC (rev 11825)
@@ -56,6 +56,7 @@
 {
   struct PublishTab *next;
   struct PublishTab *prev;
+  GtkWidget *frame;
   GtkBuilder *builder;
   struct GNUNET_FS_PublishContext *pc;
   GtkTreeStore *ts;
@@ -67,6 +68,7 @@
   struct GNUNET_FS_PublishContext *pc;
   struct PublishTab *tab;
   GtkTreeRowReference *rr;
+  int is_top;
 };
 
 static struct PublishTab *publish_tab_head;
@@ -516,7 +518,41 @@
 }
 
 
+
 /**
+ * Close a publish tab and free associated state.
+ */
+static void
+close_publish_tab (struct PublishEntry *ent)
+{
+  struct PublishTab *tab;
+  GtkNotebook *notebook;
+  int index;
+  int i;
+
+  gtk_tree_row_reference_free (ent->rr);
+  if (GNUNET_YES != ent->is_top)
+    {
+      GNUNET_free (ent);
+      return;
+    }
+  tab = ent->tab;
+  GNUNET_free (ent);
+  notebook = GTK_NOTEBOOK (GNUNET_GTK_get_main_window_object 
("GNUNET_GTK_main_window_notebook"));
+  index = -1;
+  for (i = gtk_notebook_get_n_pages (notebook) - 1; i >= 0; i--)
+    if (tab->frame == gtk_notebook_get_nth_page (notebook, i))
+      index = i;
+  gtk_notebook_remove_page (notebook, index);
+  g_object_unref (tab->builder);
+  GNUNET_CONTAINER_DLL_remove (publish_tab_head,
+                              publish_tab_tail,
+                              tab);
+  GNUNET_free (tab);
+}
+
+
+/**
  * Tell FS to stop a search.
  */
 static void
@@ -891,7 +927,6 @@
   GtkWidget *tab_label;
   GtkLabel *fn_label;
   GtkWidget *close_button;
-  GtkWidget *frame;
   GtkNotebook *notebook;
   gint pages;
   char *size_fancy;
@@ -907,9 +942,9 @@
       tab->builder = GNUNET_GTK_get_new_builder ("publish_tab.glade");
       df = GTK_WINDOW (gtk_builder_get_object (tab->builder,
                                               "_search_result_frame_window"));
-      frame = gtk_bin_get_child (GTK_BIN (df));
-      gtk_widget_ref (frame);
-      gtk_container_remove (GTK_CONTAINER (df), frame);
+      tab->frame = gtk_bin_get_child (GTK_BIN (df));
+      gtk_widget_ref (tab->frame);
+      gtk_container_remove (GTK_CONTAINER (df), tab->frame);
       gtk_widget_destroy (GTK_WIDGET (df));
       
       /* load tab_label */
@@ -932,7 +967,7 @@
       notebook = GTK_NOTEBOOK (GNUNET_GTK_get_main_window_object 
("GNUNET_GTK_main_window_notebook"));
       pages = gtk_notebook_get_n_pages (notebook);
       gtk_notebook_insert_page (notebook, 
-                               frame,
+                               tab->frame,
                                tab_label,
                                pages - 1);
       gtk_widget_show (GTK_WIDGET (notebook));
@@ -965,6 +1000,7 @@
                                     -1);
   GNUNET_free (size_fancy);
   ent = GNUNET_malloc (sizeof (struct PublishEntry));
+  ent->is_top = (parent == NULL) ? GNUNET_YES : GNUNET_NO;
   ent->tab = tab;
   path = gtk_tree_model_get_path (GTK_TREE_MODEL (tab->ts), &iter);
   ent->rr = gtk_tree_row_reference_new (GTK_TREE_MODEL (tab->ts),
@@ -1006,8 +1042,8 @@
       GNUNET_break (0); 
       break;
     case GNUNET_FS_STATUS_PUBLISH_SUSPEND:
-      GNUNET_break (0); 
-      break;
+      close_publish_tab (info->value.publish.cctx);
+      return NULL;
     case GNUNET_FS_STATUS_PUBLISH_PROGRESS:
       return mark_publish_progress (info->value.publish.cctx,
                                    info->value.publish.size,
@@ -1019,8 +1055,8 @@
       return change_publish_colour (info->value.publish.cctx,
                                    "green");
     case GNUNET_FS_STATUS_PUBLISH_STOPPED: 
-      GNUNET_break (0); 
-      break;
+      close_publish_tab (info->value.publish.cctx);
+      return NULL;
     case GNUNET_FS_STATUS_DOWNLOAD_START: 
       return setup_download (info->value.download.pctx,
                             info->value.download.sctx,
@@ -1107,13 +1143,27 @@
     case GNUNET_FS_STATUS_SEARCH_STOPPED:
       close_search_tab (info->value.search.cctx);
       return NULL;
-    case GNUNET_FS_STATUS_UNINDEX_START: GNUNET_break (0); break;
-    case GNUNET_FS_STATUS_UNINDEX_RESUME: GNUNET_break (0); break;
-    case GNUNET_FS_STATUS_UNINDEX_SUSPEND: GNUNET_break (0); break;
-    case GNUNET_FS_STATUS_UNINDEX_PROGRESS: GNUNET_break (0); break;
-    case GNUNET_FS_STATUS_UNINDEX_ERROR: GNUNET_break (0); break;
-    case GNUNET_FS_STATUS_UNINDEX_COMPLETED: GNUNET_break (0); break;
-    case GNUNET_FS_STATUS_UNINDEX_STOPPED: GNUNET_break (0); break;
+    case GNUNET_FS_STATUS_UNINDEX_START:
+      GNUNET_break (0); 
+      break;
+    case GNUNET_FS_STATUS_UNINDEX_RESUME: 
+      GNUNET_break (0); 
+      break;
+    case GNUNET_FS_STATUS_UNINDEX_SUSPEND: 
+      GNUNET_break (0); 
+      break;
+    case GNUNET_FS_STATUS_UNINDEX_PROGRESS: 
+      GNUNET_break (0); 
+      break;
+    case GNUNET_FS_STATUS_UNINDEX_ERROR: 
+      GNUNET_break (0);
+      break;
+    case GNUNET_FS_STATUS_UNINDEX_COMPLETED: 
+      GNUNET_break (0); 
+      break;
+    case GNUNET_FS_STATUS_UNINDEX_STOPPED: 
+      GNUNET_break (0); 
+      break;
     default:
       GNUNET_break (0);
       break;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]