[Top][All Lists]
[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;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r11825 - gnunet-gtk/src,
gnunet <=