Mercurial > pidgin
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 } |