diff options
Diffstat (limited to 'src/plugins/fs/download.c')
-rw-r--r-- | src/plugins/fs/download.c | 55 |
1 files changed, 44 insertions, 11 deletions
diff --git a/src/plugins/fs/download.c b/src/plugins/fs/download.c index b58bb5ef..b77615d6 100644 --- a/src/plugins/fs/download.c +++ b/src/plugins/fs/download.c | |||
@@ -639,6 +639,18 @@ void on_statusDownloadURIEntry_editing_done_fs(GtkWidget * entry, | |||
639 | FREE(urid); | 639 | FREE(urid); |
640 | } | 640 | } |
641 | 641 | ||
642 | struct FCBC { | ||
643 | int (*method)(struct FSUI_Context * ctx, | ||
644 | struct FSUI_DownloadList * list); | ||
645 | struct FSUI_DownloadList * argument; | ||
646 | }; | ||
647 | |||
648 | static void * fsui_callback(void * cls) { | ||
649 | struct FCBC * fcbc = cls; | ||
650 | fcbc->method(ctx, | ||
651 | fcbc->argument); | ||
652 | return NULL; | ||
653 | } | ||
642 | 654 | ||
643 | static void | 655 | static void |
644 | clearCompletedDownloadCallback(GtkTreeModel * model, | 656 | clearCompletedDownloadCallback(GtkTreeModel * model, |
@@ -646,6 +658,7 @@ clearCompletedDownloadCallback(GtkTreeModel * model, | |||
646 | GtkTreeIter * iter, | 658 | GtkTreeIter * iter, |
647 | gpointer unused) { | 659 | gpointer unused) { |
648 | DownloadList * dl; | 660 | DownloadList * dl; |
661 | struct FCBC fcbc; | ||
649 | 662 | ||
650 | GE_ASSERT(ectx, | 663 | GE_ASSERT(ectx, |
651 | model == GTK_TREE_MODEL(download_summary)); | 664 | model == GTK_TREE_MODEL(download_summary)); |
@@ -653,9 +666,12 @@ clearCompletedDownloadCallback(GtkTreeModel * model, | |||
653 | iter, | 666 | iter, |
654 | DOWNLOAD_INTERNAL, &dl, | 667 | DOWNLOAD_INTERNAL, &dl, |
655 | -1); | 668 | -1); |
656 | if (dl->has_terminated) | 669 | if (dl->has_terminated) { |
657 | FSUI_stopDownload(ctx, | 670 | fcbc.method = &FSUI_stopDownload; |
658 | dl->fsui_list); | 671 | fcbc.argument = dl->fsui_list; |
672 | run_with_save_calls(&fsui_callback, | ||
673 | &fcbc); | ||
674 | } | ||
659 | } | 675 | } |
660 | 676 | ||
661 | void on_clearCompletedDownloadsButton_clicked_fs(void * unused, | 677 | void on_clearCompletedDownloadsButton_clicked_fs(void * unused, |
@@ -673,11 +689,12 @@ void on_clearCompletedDownloadsButton_clicked_fs(void * unused, | |||
673 | } | 689 | } |
674 | 690 | ||
675 | static void | 691 | static void |
676 | abortDownloadCallback(GtkTreeModel * model, | 692 | fsuiCallDownloadCallback(GtkTreeModel * model, |
677 | GtkTreePath * path, | 693 | GtkTreePath * path, |
678 | GtkTreeIter * iter, | 694 | GtkTreeIter * iter, |
679 | gpointer unused) { | 695 | gpointer fsui_call) { |
680 | DownloadList * dl; | 696 | DownloadList * dl; |
697 | struct FCBC fcbc; | ||
681 | 698 | ||
682 | GE_ASSERT(ectx, | 699 | GE_ASSERT(ectx, |
683 | model == GTK_TREE_MODEL(download_summary)); | 700 | model == GTK_TREE_MODEL(download_summary)); |
@@ -685,8 +702,10 @@ abortDownloadCallback(GtkTreeModel * model, | |||
685 | iter, | 702 | iter, |
686 | DOWNLOAD_INTERNAL, &dl, | 703 | DOWNLOAD_INTERNAL, &dl, |
687 | -1); | 704 | -1); |
688 | FSUI_abortDownload(ctx, | 705 | fcbc.method = fsui_call; |
689 | dl->fsui_list); | 706 | fcbc.argument = dl->fsui_list; |
707 | run_with_save_calls(&fsui_callback, | ||
708 | &fcbc); | ||
690 | } | 709 | } |
691 | 710 | ||
692 | void on_abortDownloadButton_clicked_fs(void * unused, | 711 | void on_abortDownloadButton_clicked_fs(void * unused, |
@@ -699,8 +718,22 @@ void on_abortDownloadButton_clicked_fs(void * unused, | |||
699 | selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(downloadList)); | 718 | selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(downloadList)); |
700 | gtk_tree_selection_selected_foreach | 719 | gtk_tree_selection_selected_foreach |
701 | (selection, | 720 | (selection, |
702 | &abortDownloadCallback, | 721 | &fsuiCallDownloadCallback, |
703 | NULL); | 722 | &FSUI_abortDownload); |
723 | } | ||
724 | |||
725 | void on_stopDownloadButton_clicked_fs(void * unused, | ||
726 | GtkWidget * clearButton) { | ||
727 | GtkTreeSelection * selection; | ||
728 | GtkWidget * downloadList; | ||
729 | |||
730 | downloadList = glade_xml_get_widget(getMainXML(), | ||
731 | "activeDownloadsList"); | ||
732 | selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(downloadList)); | ||
733 | gtk_tree_selection_selected_foreach | ||
734 | (selection, | ||
735 | &fsuiCallDownloadCallback, | ||
736 | &FSUI_stopDownload); | ||
704 | } | 737 | } |
705 | 738 | ||
706 | /* end of download.c */ | 739 | /* end of download.c */ |