comparison src/gtkft.c @ 6240:ac191233b816

[gaim-migrate @ 6734] Updated the file transfer API to resemble that of the rest of Gaim's API. committer: Tailor Script <tailor@pidgin.im>
author Christian Hammond <chipx86@chipx86.com>
date Sun, 20 Jul 2003 03:30:43 +0000
parents 1abc483f74c6
children 36b80ce02a51
comparison
equal deleted inserted replaced
6239:8d10cdfe1bb1 6240:ac191233b816
35 #include "prefs.h" 35 #include "prefs.h"
36 #include "gtkutils.h" 36 #include "gtkutils.h"
37 #include "stock.h" 37 #include "stock.h"
38 38
39 #define GAIM_GTKXFER(xfer) \ 39 #define GAIM_GTKXFER(xfer) \
40 (struct gaim_gtkxfer_ui_data *)(xfer)->ui_data 40 (GaimGtkXferUiData *)(xfer)->ui_data
41 41
42 struct gaim_gtkxfer_dialog 42 struct _GaimGtkXferDialog
43 { 43 {
44 gboolean keep_open; 44 gboolean keep_open;
45 gboolean auto_clear; 45 gboolean auto_clear;
46 46
47 gint num_transfers; 47 gint num_transfers;
48 48
49 struct gaim_xfer *selected_xfer; 49 GaimXfer *selected_xfer;
50 50
51 GtkWidget *window; 51 GtkWidget *window;
52 GtkWidget *tree; 52 GtkWidget *tree;
53 GtkListStore *model; 53 GtkListStore *model;
54 54
73 GtkWidget *remove_button; 73 GtkWidget *remove_button;
74 GtkWidget *stop_button; 74 GtkWidget *stop_button;
75 GtkWidget *close_button; 75 GtkWidget *close_button;
76 }; 76 };
77 77
78 struct gaim_gtkxfer_ui_data 78 typedef struct
79 { 79 {
80 GtkWidget *filesel; 80 GtkWidget *filesel;
81 GtkTreeIter iter; 81 GtkTreeIter iter;
82 time_t start_time; 82 time_t start_time;
83 83
84 char *name; 84 char *name;
85 }; 85
86 86 } GaimGtkXferUiData;
87 static struct gaim_gtkxfer_dialog *xfer_dialog = NULL; 87
88 static GaimGtkXferDialog *xfer_dialog = NULL;
88 89
89 enum 90 enum
90 { 91 {
91 COLUMN_STATUS = 0, 92 COLUMN_STATUS = 0,
92 COLUMN_PROGRESS, 93 COLUMN_PROGRESS,
99 100
100 /************************************************************************** 101 /**************************************************************************
101 * Utility Functions 102 * Utility Functions
102 **************************************************************************/ 103 **************************************************************************/
103 static void 104 static void
104 get_xfer_info_strings(struct gaim_xfer *xfer, 105 get_xfer_info_strings(GaimXfer *xfer, char **kbsec, char **time_elapsed,
105 char **kbsec, char **time_elapsed,
106 char **time_remaining) 106 char **time_remaining)
107 { 107 {
108 struct gaim_gtkxfer_ui_data *data; 108 GaimGtkXferUiData *data;
109 double kb_sent, kb_rem; 109 double kb_sent, kb_rem;
110 double kbps = 0.0; 110 double kbps = 0.0;
111 time_t elapsed, now; 111 time_t elapsed, now;
112 112
113 data = GAIM_GTKXFER(xfer); 113 data = GAIM_GTKXFER(xfer);
160 } 160 }
161 } 161 }
162 } 162 }
163 163
164 static void 164 static void
165 update_detailed_info(struct gaim_gtkxfer_dialog *dialog, 165 update_detailed_info(GaimGtkXferDialog *dialog, GaimXfer *xfer)
166 struct gaim_xfer *xfer) 166 {
167 { 167 GaimGtkXferUiData *data;
168 struct gaim_gtkxfer_ui_data *data;
169 char *kbsec, *time_elapsed, *time_remaining; 168 char *kbsec, *time_elapsed, *time_remaining;
170 char *status; 169 char *status;
171 170
172 if (dialog == NULL || xfer == NULL) 171 if (dialog == NULL || xfer == NULL)
173 return; 172 return;
223 g_free(time_remaining); 222 g_free(time_remaining);
224 g_free(status); 223 g_free(status);
225 } 224 }
226 225
227 static void 226 static void
228 update_buttons(struct gaim_gtkxfer_dialog *dialog, struct gaim_xfer *xfer) 227 update_buttons(GaimGtkXferDialog *dialog, GaimXfer *xfer)
229 { 228 {
230 if (dialog->selected_xfer == NULL) { 229 if (dialog->selected_xfer == NULL) {
231 gtk_widget_set_sensitive(dialog->disclosure, FALSE); 230 gtk_widget_set_sensitive(dialog->disclosure, FALSE);
232 gtk_widget_set_sensitive(dialog->open_button, FALSE); 231 gtk_widget_set_sensitive(dialog->open_button, FALSE);
233 gtk_widget_set_sensitive(dialog->pause_button, FALSE); 232 gtk_widget_set_sensitive(dialog->pause_button, FALSE);
265 gtk_widget_set_sensitive(dialog->stop_button, TRUE); 264 gtk_widget_set_sensitive(dialog->stop_button, TRUE);
266 } 265 }
267 } 266 }
268 267
269 static void 268 static void
270 ensure_row_selected(struct gaim_gtkxfer_dialog *dialog) 269 ensure_row_selected(GaimGtkXferDialog *dialog)
271 { 270 {
272 GtkTreeIter iter; 271 GtkTreeIter iter;
273 GtkTreeSelection *selection; 272 GtkTreeSelection *selection;
274 273
275 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->tree)); 274 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->tree));
285 * Callbacks 284 * Callbacks
286 **************************************************************************/ 285 **************************************************************************/
287 static gint 286 static gint
288 delete_win_cb(GtkWidget *w, GdkEventAny *e, gpointer d) 287 delete_win_cb(GtkWidget *w, GdkEventAny *e, gpointer d)
289 { 288 {
290 struct gaim_gtkxfer_dialog *dialog; 289 GaimGtkXferDialog *dialog;
291 290
292 dialog = (struct gaim_gtkxfer_dialog *)d; 291 dialog = (GaimGtkXferDialog *)d;
293 292
294 gaim_gtkxfer_dialog_hide(dialog); 293 gaim_gtkxfer_dialog_hide(dialog);
295 294
296 return TRUE; 295 return TRUE;
297 } 296 }
298 297
299 static void 298 static void
300 toggle_keep_open_cb(GtkWidget *w, struct gaim_gtkxfer_dialog *dialog) 299 toggle_keep_open_cb(GtkWidget *w, GaimGtkXferDialog *dialog)
301 { 300 {
302 dialog->keep_open = !dialog->keep_open; 301 dialog->keep_open = !dialog->keep_open;
303 gaim_prefs_set_bool("/gaim/gtk/filetransfer/keep_open", dialog->keep_open); 302 gaim_prefs_set_bool("/gaim/gtk/filetransfer/keep_open",
304 } 303 dialog->keep_open);
305 304 }
306 static void 305
307 toggle_clear_finished_cb(GtkWidget *w, struct gaim_gtkxfer_dialog *dialog) 306 static void
307 toggle_clear_finished_cb(GtkWidget *w, GaimGtkXferDialog *dialog)
308 { 308 {
309 dialog->auto_clear = !dialog->auto_clear; 309 dialog->auto_clear = !dialog->auto_clear;
310 gaim_prefs_set_bool("/gaim/gtk/filetransfer/clear_finished", dialog->auto_clear); 310 gaim_prefs_set_bool("/gaim/gtk/filetransfer/clear_finished",
311 } 311 dialog->auto_clear);
312 312 }
313 static void 313
314 selection_changed_cb(GtkTreeSelection *selection, 314 static void
315 struct gaim_gtkxfer_dialog *dialog) 315 selection_changed_cb(GtkTreeSelection *selection, GaimGtkXferDialog *dialog)
316 { 316 {
317 GtkTreeIter iter; 317 GtkTreeIter iter;
318 struct gaim_xfer *xfer = NULL; 318 GaimXfer *xfer = NULL;
319 319
320 if (gtk_tree_selection_get_selected(selection, NULL, &iter)) { 320 if (gtk_tree_selection_get_selected(selection, NULL, &iter)) {
321 GValue val = {0, }; 321 GValue val = {0, };
322 322
323 gtk_widget_set_sensitive(dialog->disclosure, TRUE); 323 gtk_widget_set_sensitive(dialog->disclosure, TRUE);
342 342
343 update_buttons(dialog, xfer); 343 update_buttons(dialog, xfer);
344 } 344 }
345 345
346 static void 346 static void
347 open_button_cb(GtkButton *button, struct gaim_gtkxfer_dialog *dialog) 347 open_button_cb(GtkButton *button, GaimGtkXferDialog *dialog)
348 { 348 {
349 } 349 }
350 350
351 static void 351 static void
352 pause_button_cb(GtkButton *button, struct gaim_gtkxfer_dialog *dialog) 352 pause_button_cb(GtkButton *button, GaimGtkXferDialog *dialog)
353 { 353 {
354 } 354 }
355 355
356 static void 356 static void
357 resume_button_cb(GtkButton *button, struct gaim_gtkxfer_dialog *dialog) 357 resume_button_cb(GtkButton *button, GaimGtkXferDialog *dialog)
358 { 358 {
359 } 359 }
360 360
361 static void 361 static void
362 remove_button_cb(GtkButton *button, struct gaim_gtkxfer_dialog *dialog) 362 remove_button_cb(GtkButton *button, GaimGtkXferDialog *dialog)
363 { 363 {
364 gaim_gtkxfer_dialog_remove_xfer(dialog, dialog->selected_xfer); 364 gaim_gtkxfer_dialog_remove_xfer(dialog, dialog->selected_xfer);
365 } 365 }
366 366
367 static void 367 static void
368 stop_button_cb(GtkButton *button, struct gaim_gtkxfer_dialog *dialog) 368 stop_button_cb(GtkButton *button, GaimGtkXferDialog *dialog)
369 { 369 {
370 gaim_xfer_cancel_local(dialog->selected_xfer); 370 gaim_xfer_cancel_local(dialog->selected_xfer);
371 } 371 }
372 372
373 static void 373 static void
374 close_button_cb(GtkButton *button, struct gaim_gtkxfer_dialog *dialog) 374 close_button_cb(GtkButton *button, GaimGtkXferDialog *dialog)
375 { 375 {
376 gaim_gtkxfer_dialog_hide(dialog); 376 gaim_gtkxfer_dialog_hide(dialog);
377 } 377 }
378 378
379 /************************************************************************** 379 /**************************************************************************
380 * Dialog Building Functions 380 * Dialog Building Functions
381 **************************************************************************/ 381 **************************************************************************/
382 static GtkWidget * 382 static GtkWidget *
383 setup_tree(struct gaim_gtkxfer_dialog *dialog) 383 setup_tree(GaimGtkXferDialog *dialog)
384 { 384 {
385 GtkWidget *sw; 385 GtkWidget *sw;
386 GtkWidget *tree; 386 GtkWidget *tree;
387 GtkListStore *model; 387 GtkListStore *model;
388 GtkCellRenderer *renderer; 388 GtkCellRenderer *renderer;
466 466
467 return sw; 467 return sw;
468 } 468 }
469 469
470 static GtkWidget * 470 static GtkWidget *
471 make_info_table(struct gaim_gtkxfer_dialog *dialog) 471 make_info_table(GaimGtkXferDialog *dialog)
472 { 472 {
473 GtkWidget *table; 473 GtkWidget *table;
474 GtkWidget *label; 474 GtkWidget *label;
475 GtkWidget *sep; 475 GtkWidget *sep;
476 int i; 476 int i;
531 gtk_widget_show(sep); 531 gtk_widget_show(sep);
532 532
533 return table; 533 return table;
534 } 534 }
535 535
536 struct gaim_gtkxfer_dialog * 536 GaimGtkXferDialog *
537 gaim_gtkxfer_dialog_new(void) 537 gaim_gtkxfer_dialog_new(void)
538 { 538 {
539 struct gaim_gtkxfer_dialog *dialog; 539 GaimGtkXferDialog *dialog;
540 GtkWidget *window; 540 GtkWidget *window;
541 GtkWidget *vbox1, *vbox2; 541 GtkWidget *vbox1, *vbox2;
542 GtkWidget *bbox; 542 GtkWidget *bbox;
543 GtkWidget *sw; 543 GtkWidget *sw;
544 GtkWidget *sep; 544 GtkWidget *sep;
545 GtkWidget *button; 545 GtkWidget *button;
546 GtkWidget *disclosure; 546 GtkWidget *disclosure;
547 GtkWidget *table; 547 GtkWidget *table;
548 GtkWidget *checkbox; 548 GtkWidget *checkbox;
549 549
550 dialog = g_new0(struct gaim_gtkxfer_dialog, 1); 550 dialog = g_new0(GaimGtkXferDialog, 1);
551 dialog->keep_open = gaim_prefs_get_bool("/gaim/gtk/filetransfer/keep_open"); 551 dialog->keep_open =
552 dialog->auto_clear = gaim_prefs_get_bool("/gaim/gtk/filetransfer/clear_finished"); 552 gaim_prefs_get_bool("/gaim/gtk/filetransfer/keep_open");
553 dialog->auto_clear =
554 gaim_prefs_get_bool("/gaim/gtk/filetransfer/clear_finished");
553 555
554 /* Create the window. */ 556 /* Create the window. */
555 dialog->window = window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 557 dialog->window = window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
556 gtk_window_set_role(GTK_WINDOW(window), "file transfer"); 558 gtk_window_set_role(GTK_WINDOW(window), "file transfer");
557 gtk_window_set_title(GTK_WINDOW(window), _("File Transfers")); 559 gtk_window_set_title(GTK_WINDOW(window), _("File Transfers"));
694 696
695 return dialog; 697 return dialog;
696 } 698 }
697 699
698 void 700 void
699 gaim_gtkxfer_dialog_destroy(struct gaim_gtkxfer_dialog *dialog) 701 gaim_gtkxfer_dialog_destroy(GaimGtkXferDialog *dialog)
700 { 702 {
701 if (dialog == NULL) 703 g_return_if_fail(dialog != NULL);
702 return;
703 704
704 gtk_widget_destroy(dialog->window); 705 gtk_widget_destroy(dialog->window);
705 706
706 g_free(dialog); 707 g_free(dialog);
707 } 708 }
708 709
709 void 710 void
710 gaim_gtkxfer_dialog_show(struct gaim_gtkxfer_dialog *dialog) 711 gaim_gtkxfer_dialog_show(GaimGtkXferDialog *dialog)
711 { 712 {
712 if (dialog == NULL) 713 g_return_if_fail(dialog != NULL);
713 return;
714 714
715 gtk_widget_show(dialog->window); 715 gtk_widget_show(dialog->window);
716 } 716 }
717 717
718 void 718 void
719 gaim_gtkxfer_dialog_hide(struct gaim_gtkxfer_dialog *dialog) 719 gaim_gtkxfer_dialog_hide(GaimGtkXferDialog *dialog)
720 { 720 {
721 if (dialog == NULL) 721 g_return_if_fail(dialog != NULL);
722 return;
723 722
724 gtk_widget_hide(dialog->window); 723 gtk_widget_hide(dialog->window);
725 } 724 }
726 725
727 void 726 void
728 gaim_show_xfer_dialog() 727 gaim_show_xfer_dialog()
729 { 728 {
730 struct gaim_gtkxfer_dialog *dialog; 729 GaimGtkXferDialog *dialog;
731 730
732 dialog = gaim_get_gtkxfer_dialog(); 731 dialog = gaim_get_gtkxfer_dialog();
733 732
734 if (dialog == NULL) { 733 if (dialog == NULL) {
735 dialog = gaim_gtkxfer_dialog_new(); 734 dialog = gaim_gtkxfer_dialog_new();
736 735
737 gaim_set_gtkxfer_dialog(dialog); 736 gaim_set_gtkxfer_dialog(dialog);
738 } 737 }
739 738
740 gaim_gtkxfer_dialog_show(dialog); 739 gaim_gtkxfer_dialog_show(dialog);
741 } 740 }
742 741
743 void 742 void
744 gaim_gtkxfer_dialog_add_xfer(struct gaim_gtkxfer_dialog *dialog, 743 gaim_gtkxfer_dialog_add_xfer(GaimGtkXferDialog *dialog, GaimXfer *xfer)
745 struct gaim_xfer *xfer) 744 {
746 { 745 GaimGtkXferUiData *data;
747 struct gaim_gtkxfer_ui_data *data;
748 GaimXferType type; 746 GaimXferType type;
749 GdkPixbuf *pixbuf; 747 GdkPixbuf *pixbuf;
750 char *size_str, *remaining_str; 748 char *size_str, *remaining_str;
751 749
752 if (dialog == NULL || xfer == NULL) 750 g_return_if_fail(dialog != NULL);
753 return; 751 g_return_if_fail(xfer != NULL);
754 752
755 data = GAIM_GTKXFER(xfer); 753 data = GAIM_GTKXFER(xfer);
756 754
757 gaim_gtkxfer_dialog_show(dialog); 755 gaim_gtkxfer_dialog_show(dialog);
758 756
790 788
791 ensure_row_selected(dialog); 789 ensure_row_selected(dialog);
792 } 790 }
793 791
794 void 792 void
795 gaim_gtkxfer_dialog_remove_xfer(struct gaim_gtkxfer_dialog *dialog, 793 gaim_gtkxfer_dialog_remove_xfer(GaimGtkXferDialog *dialog,
796 struct gaim_xfer *xfer) 794 GaimXfer *xfer)
797 { 795 {
798 struct gaim_gtkxfer_ui_data *data; 796 GaimGtkXferUiData *data;
799 797
800 if (dialog == NULL || xfer == NULL) 798 g_return_if_fail(dialog != NULL);
801 return; 799 g_return_if_fail(xfer != NULL);
802 800
803 data = GAIM_GTKXFER(xfer); 801 data = GAIM_GTKXFER(xfer);
804 802
805 if (data == NULL) 803 if (data == NULL)
806 return; 804 return;
819 else 817 else
820 ensure_row_selected(dialog); 818 ensure_row_selected(dialog);
821 } 819 }
822 820
823 void 821 void
824 gaim_gtkxfer_dialog_cancel_xfer(struct gaim_gtkxfer_dialog *dialog, 822 gaim_gtkxfer_dialog_cancel_xfer(GaimGtkXferDialog *dialog,
825 struct gaim_xfer *xfer) 823 GaimXfer *xfer)
826 { 824 {
827 struct gaim_gtkxfer_ui_data *data; 825 GaimGtkXferUiData *data;
828 #if 0 826 #if 0
829 GdkPixbuf *pixbuf; 827 GdkPixbuf *pixbuf;
830 #endif 828 #endif
831 829
832 if (dialog == NULL || xfer == NULL) 830 g_return_if_fail(dialog != NULL);
833 return; 831 g_return_if_fail(xfer != NULL);
834 832
835 data = GAIM_GTKXFER(xfer); 833 data = GAIM_GTKXFER(xfer);
836 834
837 if (data == NULL) 835 if (data == NULL)
838 return; 836 return;
863 g_object_unref(pixbuf); 861 g_object_unref(pixbuf);
864 #endif 862 #endif
865 } 863 }
866 864
867 void 865 void
868 gaim_gtkxfer_dialog_update_xfer(struct gaim_gtkxfer_dialog *dialog, 866 gaim_gtkxfer_dialog_update_xfer(GaimGtkXferDialog *dialog,
869 struct gaim_xfer *xfer) 867 GaimXfer *xfer)
870 { 868 {
871 struct gaim_gtkxfer_ui_data *data; 869 GaimGtkXferUiData *data;
872 char *size_str, *remaining_str; 870 char *size_str, *remaining_str;
873 GtkTreeSelection *selection; 871 GtkTreeSelection *selection;
874 872
875 if (dialog == NULL || xfer == NULL) 873 g_return_if_fail(dialog != NULL);
876 return; 874 g_return_if_fail(xfer != NULL);
877 875
878 if (!(data = GAIM_GTKXFER(xfer))) 876 if ((data = GAIM_GTKXFER(xfer)) == NULL)
879 return; 877 return;
880 878
881 size_str = gaim_get_size_string(gaim_xfer_get_size(xfer)); 879 size_str = gaim_get_size_string(gaim_xfer_get_size(xfer));
882 remaining_str = gaim_get_size_string(gaim_xfer_get_bytes_remaining(xfer)); 880 remaining_str = gaim_get_size_string(gaim_xfer_get_bytes_remaining(xfer));
883 881
915 913
916 /************************************************************************** 914 /**************************************************************************
917 * File Transfer UI Ops 915 * File Transfer UI Ops
918 **************************************************************************/ 916 **************************************************************************/
919 static void 917 static void
920 gaim_gtkxfer_new(struct gaim_xfer *xfer) 918 gaim_gtkxfer_new_xfer(GaimXfer *xfer)
921 { 919 {
922 struct gaim_gtkxfer_ui_data *data; 920 GaimGtkXferUiData *data;
923 921
924 /* This is where we're setting xfer->ui_data for the first time. */ 922 /* This is where we're setting xfer->ui_data for the first time. */
925 data = g_malloc0(sizeof(struct gaim_gtkxfer_ui_data)); 923 data = g_new0(GaimGtkXferUiData, 1);
926 xfer->ui_data = data; 924 xfer->ui_data = data;
927 } 925 }
928 926
929 static void 927 static void
930 gaim_gtkxfer_destroy(struct gaim_xfer *xfer) 928 gaim_gtkxfer_destroy(GaimXfer *xfer)
931 { 929 {
932 gaim_gtkxfer_dialog_remove_xfer(xfer_dialog, xfer); 930 gaim_gtkxfer_dialog_remove_xfer(xfer_dialog, xfer);
933 } 931 }
934 932
935 static gboolean 933 static gboolean
936 choose_file_close_cb(GtkWidget *widget, GdkEvent *event, gpointer user_data) 934 choose_file_close_cb(GtkWidget *widget, GdkEvent *event, gpointer user_data)
937 { 935 {
938 gaim_xfer_request_denied((struct gaim_xfer *)user_data); 936 gaim_xfer_request_denied((GaimXfer *)user_data);
939 937
940 return FALSE; 938 return FALSE;
941 } 939 }
942 940
943 static void 941 static void
944 choose_file_cancel_cb(GtkButton *button, gpointer user_data) 942 choose_file_cancel_cb(GtkButton *button, gpointer user_data)
945 { 943 {
946 struct gaim_xfer *xfer = (struct gaim_xfer *)user_data; 944 GaimXfer *xfer = (GaimXfer *)user_data;
947 struct gaim_gtkxfer_ui_data *data; 945 GaimGtkXferUiData *data;
948 946
949 data = GAIM_GTKXFER(xfer); 947 data = GAIM_GTKXFER(xfer);
950 948
951 gaim_xfer_request_denied(xfer); 949 gaim_xfer_request_denied(xfer);
952 950
953 gtk_widget_destroy(data->filesel); 951 gtk_widget_destroy(data->filesel);
954 data->filesel = NULL; 952 data->filesel = NULL;
955 } 953 }
956 954
957 static int 955 static int
958 do_overwrite_cb(struct gaim_xfer *xfer) 956 do_overwrite_cb(GaimXfer *xfer)
959 { 957 {
960 struct gaim_gtkxfer_ui_data *data; 958 GaimGtkXferUiData *data;
961 959
962 data = GAIM_GTKXFER(xfer); 960 data = GAIM_GTKXFER(xfer);
963 961
964 gaim_xfer_request_accepted(xfer, data->name); 962 gaim_xfer_request_accepted(xfer, data->name);
965 963
971 969
972 return 0; 970 return 0;
973 } 971 }
974 972
975 static int 973 static int
976 dont_overwrite_cb(struct gaim_xfer *xfer) 974 dont_overwrite_cb(GaimXfer *xfer)
977 { 975 {
978 struct gaim_gtkxfer_ui_data *data; 976 GaimGtkXferUiData *data;
979 977
980 data = GAIM_GTKXFER(xfer); 978 data = GAIM_GTKXFER(xfer);
981 979
982 g_free(data->name); 980 g_free(data->name);
983 data->name = NULL; 981 data->name = NULL;
988 } 986 }
989 987
990 static void 988 static void
991 choose_file_ok_cb(GtkButton *button, gpointer user_data) 989 choose_file_ok_cb(GtkButton *button, gpointer user_data)
992 { 990 {
993 struct gaim_xfer *xfer; 991 GaimXfer *xfer;
994 struct gaim_gtkxfer_ui_data *data; 992 GaimGtkXferUiData *data;
995 struct stat st; 993 struct stat st;
996 const char *name; 994 const char *name;
997 995
998 xfer = (struct gaim_xfer *)user_data; 996 xfer = (GaimXfer *)user_data;
999 data = GAIM_GTKXFER(xfer); 997 data = GAIM_GTKXFER(xfer);
1000 998
1001 name = gtk_file_selection_get_filename(GTK_FILE_SELECTION(data->filesel)); 999 name = gtk_file_selection_get_filename(GTK_FILE_SELECTION(data->filesel));
1002 1000
1003 if (gaim_gtk_check_if_dir(name, GTK_FILE_SELECTION(data->filesel))) 1001 if (gaim_gtk_check_if_dir(name, GTK_FILE_SELECTION(data->filesel)))
1013 _("That file does not exist."), NULL); 1011 _("That file does not exist."), NULL);
1014 1012
1015 gaim_xfer_request_denied(xfer); 1013 gaim_xfer_request_denied(xfer);
1016 } 1014 }
1017 } 1015 }
1018 else if ((gaim_xfer_get_type(xfer) == GAIM_XFER_SEND) && (st.st_size == 0)) { 1016 else if ((gaim_xfer_get_type(xfer) == GAIM_XFER_SEND) &&
1017 (st.st_size == 0)) {
1018
1019 gaim_notify_error(NULL, NULL, 1019 gaim_notify_error(NULL, NULL,
1020 _("Cannot send a file of 0 bytes."), NULL); 1020 _("Cannot send a file of 0 bytes."), NULL);
1021 1021
1022 gaim_xfer_request_denied(xfer); 1022 gaim_xfer_request_denied(xfer);
1023 } 1023 }
1044 gtk_widget_destroy(data->filesel); 1044 gtk_widget_destroy(data->filesel);
1045 data->filesel = NULL; 1045 data->filesel = NULL;
1046 } 1046 }
1047 1047
1048 static int 1048 static int
1049 choose_file(struct gaim_xfer *xfer) 1049 choose_file(GaimXfer *xfer)
1050 { 1050 {
1051 char *cur_dir, *init_str; 1051 char *cur_dir, *init_str;
1052 struct gaim_gtkxfer_ui_data *data; 1052 GaimGtkXferUiData *data;
1053 1053
1054 data = GAIM_GTKXFER(xfer); 1054 data = GAIM_GTKXFER(xfer);
1055 cur_dir = g_get_current_dir(); 1055 cur_dir = g_get_current_dir();
1056 1056
1057 if (gaim_xfer_get_type(xfer) == GAIM_XFER_SEND) 1057 if (gaim_xfer_get_type(xfer) == GAIM_XFER_SEND)
1085 1085
1086 return 0; 1086 return 0;
1087 } 1087 }
1088 1088
1089 static int 1089 static int
1090 cancel_recv_cb(struct gaim_xfer *xfer) 1090 cancel_recv_cb(GaimXfer *xfer)
1091 { 1091 {
1092 gaim_xfer_request_denied(xfer); 1092 gaim_xfer_request_denied(xfer);
1093 1093
1094 return 0; 1094 return 0;
1095 } 1095 }
1096 1096
1097 static void 1097 static void
1098 gaim_gtkxfer_ask_recv(struct gaim_xfer *xfer) 1098 gaim_gtkxfer_ask_recv(GaimXfer *xfer)
1099 { 1099 {
1100 char *buf, *size_buf; 1100 char *buf, *size_buf;
1101 size_t size; 1101 size_t size;
1102 1102
1103 size = gaim_xfer_get_size(xfer); 1103 size = gaim_xfer_get_size(xfer);
1115 1115
1116 g_free(buf); 1116 g_free(buf);
1117 } 1117 }
1118 1118
1119 static void 1119 static void
1120 gaim_gtkxfer_request_file(struct gaim_xfer *xfer) 1120 gaim_gtkxfer_request_file(GaimXfer *xfer)
1121 { 1121 {
1122 if (gaim_xfer_get_type(xfer) == GAIM_XFER_RECEIVE) 1122 if (gaim_xfer_get_type(xfer) == GAIM_XFER_RECEIVE)
1123 {
1124 gaim_gtkxfer_ask_recv(xfer); 1123 gaim_gtkxfer_ask_recv(xfer);
1125 }
1126 else 1124 else
1127 {
1128 choose_file(xfer); 1125 choose_file(xfer);
1129 } 1126 }
1130 } 1127
1131 1128 static void
1132 static void 1129 gaim_gtkxfer_ask_cancel(GaimXfer *xfer)
1133 gaim_gtkxfer_ask_cancel(struct gaim_xfer *xfer) 1130 {
1134 { 1131 }
1135 } 1132
1136 1133 static void
1137 static void 1134 gaim_gtkxfer_add_xfer(GaimXfer *xfer)
1138 gaim_gtkxfer_add_xfer(struct gaim_xfer *xfer)
1139 { 1135 {
1140 if (xfer_dialog == NULL) 1136 if (xfer_dialog == NULL)
1141 xfer_dialog = gaim_gtkxfer_dialog_new(); 1137 xfer_dialog = gaim_gtkxfer_dialog_new();
1142 1138
1143 gaim_gtkxfer_dialog_add_xfer(xfer_dialog, xfer); 1139 gaim_gtkxfer_dialog_add_xfer(xfer_dialog, xfer);
1144 } 1140 }
1145 1141
1146 static void 1142 static void
1147 gaim_gtkxfer_update_progress(struct gaim_xfer *xfer, double percent) 1143 gaim_gtkxfer_update_progress(GaimXfer *xfer, double percent)
1148 { 1144 {
1149 gaim_gtkxfer_dialog_update_xfer(xfer_dialog, xfer); 1145 gaim_gtkxfer_dialog_update_xfer(xfer_dialog, xfer);
1150 1146
1151 /* See if it's removed. */ 1147 /* See if it's removed. */
1152 /* XXX - This caused some bad stuff, and I don't see a point to it */ 1148 /* XXX - This caused some bad stuff, and I don't see a point to it */
1153 /* if (xfer->ui_data == NULL) 1149 #if 0
1154 gaim_xfer_destroy(xfer); */ 1150 if (xfer->ui_data == NULL)
1155 } 1151 gaim_xfer_destroy(xfer);
1156 1152 #endif
1157 static void 1153 }
1158 gaim_gtkxfer_cancel_local(struct gaim_xfer *xfer) 1154
1155 static void
1156 gaim_gtkxfer_cancel_local(GaimXfer *xfer)
1159 { 1157 {
1160 gaim_gtkxfer_dialog_cancel_xfer(xfer_dialog, xfer); 1158 gaim_gtkxfer_dialog_cancel_xfer(xfer_dialog, xfer);
1161 } 1159 }
1162 1160
1163 static void 1161 static void
1164 gaim_gtkxfer_cancel_remote(struct gaim_xfer *xfer) 1162 gaim_gtkxfer_cancel_remote(GaimXfer *xfer)
1165 { 1163 {
1166 gaim_gtkxfer_dialog_cancel_xfer(xfer_dialog, xfer); 1164 gaim_gtkxfer_dialog_cancel_xfer(xfer_dialog, xfer);
1167 } 1165 }
1168 1166
1169 struct gaim_xfer_ui_ops ops = 1167 static GaimXferUiOps ops =
1170 { 1168 {
1171 gaim_gtkxfer_new, 1169 gaim_gtkxfer_new_xfer,
1172 gaim_gtkxfer_destroy, 1170 gaim_gtkxfer_destroy,
1173 gaim_gtkxfer_request_file, 1171 gaim_gtkxfer_request_file,
1174 gaim_gtkxfer_ask_cancel, 1172 gaim_gtkxfer_ask_cancel,
1175 gaim_gtkxfer_add_xfer, 1173 gaim_gtkxfer_add_xfer,
1176 gaim_gtkxfer_update_progress, 1174 gaim_gtkxfer_update_progress,
1188 gaim_prefs_add_bool("/gaim/gtk/filetransfer/clear_finished", TRUE); 1186 gaim_prefs_add_bool("/gaim/gtk/filetransfer/clear_finished", TRUE);
1189 gaim_prefs_add_bool("/gaim/gtk/filetransfer/keep_open", FALSE); 1187 gaim_prefs_add_bool("/gaim/gtk/filetransfer/keep_open", FALSE);
1190 } 1188 }
1191 1189
1192 void 1190 void
1193 gaim_set_gtkxfer_dialog(struct gaim_gtkxfer_dialog *dialog) 1191 gaim_set_gtkxfer_dialog(GaimGtkXferDialog *dialog)
1194 { 1192 {
1195 xfer_dialog = dialog; 1193 xfer_dialog = dialog;
1196 } 1194 }
1197 1195
1198 struct gaim_gtkxfer_dialog * 1196 GaimGtkXferDialog *
1199 gaim_get_gtkxfer_dialog(void) 1197 gaim_get_gtkxfer_dialog(void)
1200 { 1198 {
1201 return xfer_dialog; 1199 return xfer_dialog;
1202 } 1200 }
1203 1201
1204 struct gaim_xfer_ui_ops * 1202 GaimXferUiOps *
1205 gaim_get_gtk_xfer_ui_ops(void) 1203 gaim_get_gtk_xfer_ui_ops(void)
1206 { 1204 {
1207 return &ops; 1205 return &ops;
1208 } 1206 }