comparison src/multi.c @ 2402:6e3dc0b3b9b1

[gaim-migrate @ 2415] whoops. *now* multi.h doesn't depend on gtk. committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Mon, 01 Oct 2001 07:50:07 +0000
parents 520257562955
children 8555e48c02df
comparison
equal deleted inserted replaced
2401:86c9b44a35ae 2402:6e3dc0b3b9b1
883 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(acctedit_close), W); 883 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(acctedit_close), W);
884 884
885 gtk_widget_show_all(acctedit); 885 gtk_widget_show_all(acctedit);
886 } 886 }
887 887
888 struct signon_meter {
889 struct gaim_connection *gc;
890 GtkWidget *window;
891 GtkWidget *progress;
892 GtkWidget *status;
893 };
894 static GSList *meters = NULL;
895
896 static struct signon_meter *find_signon_meter(struct gaim_connection *gc)
897 {
898 GSList *m = meters;
899 while (m) {
900 if (((struct signon_meter *)m->data)->gc == gc)
901 return m->data;
902 m = m->next;
903 }
904 return NULL;
905 }
906
888 void account_online(struct gaim_connection *gc) 907 void account_online(struct gaim_connection *gc)
889 { 908 {
890 int i; 909 int i;
910 struct signon_meter *meter = find_signon_meter(gc);
891 911
892 /* first we hide the login progress meter */ 912 /* first we hide the login progress meter */
893 if (gc->meter) 913 if (meter) {
894 gtk_widget_destroy(gc->meter); 914 gtk_widget_destroy(meter->window);
895 gc->meter = NULL; 915 meters = g_slist_remove(meters, meter);
916 g_free(meter);
917 }
896 918
897 /* then we do the buddy list stuff */ 919 /* then we do the buddy list stuff */
898 if (mainwindow) 920 if (mainwindow)
899 gtk_widget_hide(mainwindow); 921 gtk_widget_hide(mainwindow);
900 922
951 } 973 }
952 974
953 void account_offline(struct gaim_connection *gc) 975 void account_offline(struct gaim_connection *gc)
954 { 976 {
955 int i; 977 int i;
956 if (gc->meter) 978 struct signon_meter *meter = find_signon_meter(gc);
957 gtk_widget_destroy(gc->meter); 979 if (meter) {
958 gc->meter = NULL; 980 gtk_widget_destroy(meter->window);
981 meters = g_slist_remove(meters, meter);
982 g_free(meter);
983 }
959 gc->user->gc = NULL; /* wasn't that awkward? */ 984 gc->user->gc = NULL; /* wasn't that awkward? */
960 if (!acctedit) 985 if (!acctedit)
961 return; 986 return;
962 i = gtk_clist_find_row_from_data(GTK_CLIST(list), gc->user); 987 i = gtk_clist_find_row_from_data(GTK_CLIST(list), gc->user);
963 gtk_clist_set_text(GTK_CLIST(list), i, 1, "No"); 988 gtk_clist_set_text(GTK_CLIST(list), i, 1, "No");
978 } 1003 }
979 u = u->next; 1004 u = u->next;
980 } 1005 }
981 } 1006 }
982 1007
983 static void cancel_signon(GtkWidget *button, struct gaim_connection *gc) 1008 static void cancel_signon(GtkWidget *button, struct signon_meter *meter)
984 { 1009 {
985 gc->wants_to_die = TRUE; 1010 meter->gc->wants_to_die = TRUE;
986 signoff(gc); 1011 signoff(meter->gc);
987 } 1012 }
988 1013
989 static gint meter_destroy(GtkWidget *meter, GdkEvent *evt, struct gaim_connection *gc) 1014 static gint meter_destroy(GtkWidget *window, GdkEvent *evt, struct signon_meter *meter)
990 { 1015 {
991 return TRUE; 1016 return TRUE;
992 } 1017 }
993 1018
994 void set_login_progress(struct gaim_connection *gc, float howfar, char *message) 1019 void set_login_progress(struct gaim_connection *gc, float howfar, char *message)
995 { 1020 {
1021 struct signon_meter *meter = find_signon_meter(gc);
1022
996 if (mainwindow) 1023 if (mainwindow)
997 gtk_widget_hide(mainwindow); 1024 gtk_widget_hide(mainwindow);
998 1025
999 if (!gc->meter) { 1026 if (!meter) {
1000 GtkWidget *box, *label, *button; 1027 GtkWidget *box, *label, *button;
1001 char buf[256]; 1028 char buf[256];
1002 1029
1003 gc->meter = gtk_window_new(GTK_WINDOW_DIALOG); 1030 meter = g_new0(struct signon_meter, 1);
1004 gtk_window_set_policy(GTK_WINDOW(gc->meter), 0, 0, 1); 1031 meter->gc = gc;
1005 gtk_window_set_wmclass(GTK_WINDOW(gc->meter), "signon", "Gaim"); 1032
1006 gtk_container_set_border_width(GTK_CONTAINER(gc->meter), 5); 1033 meter->window = gtk_window_new(GTK_WINDOW_DIALOG);
1034 gtk_window_set_policy(GTK_WINDOW(meter->window), 0, 0, 1);
1035 gtk_window_set_wmclass(GTK_WINDOW(meter->window), "signon", "Gaim");
1036 gtk_container_set_border_width(GTK_CONTAINER(meter->window), 5);
1007 g_snprintf(buf, sizeof(buf), "%s Signing On", gc->username); 1037 g_snprintf(buf, sizeof(buf), "%s Signing On", gc->username);
1008 gtk_window_set_title(GTK_WINDOW(gc->meter), buf); 1038 gtk_window_set_title(GTK_WINDOW(meter->window), buf);
1009 gtk_signal_connect(GTK_OBJECT(gc->meter), "delete_event", 1039 gtk_signal_connect(GTK_OBJECT(meter->window), "delete_event",
1010 GTK_SIGNAL_FUNC(meter_destroy), gc); 1040 GTK_SIGNAL_FUNC(meter_destroy), meter);
1011 gtk_widget_realize(gc->meter); 1041 gtk_widget_realize(meter->window);
1012 aol_icon(gc->meter->window); 1042 aol_icon(meter->window->window);
1013 1043
1014 box = gtk_vbox_new(FALSE, 5); 1044 box = gtk_vbox_new(FALSE, 5);
1015 gtk_container_add(GTK_CONTAINER(gc->meter), box); 1045 gtk_container_add(GTK_CONTAINER(meter->window), box);
1016 gtk_widget_show(box); 1046 gtk_widget_show(box);
1017 1047
1018 label = gtk_label_new(buf); 1048 label = gtk_label_new(buf);
1019 gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0); 1049 gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0);
1020 gtk_widget_show(label); 1050 gtk_widget_show(label);
1021 1051
1022 gc->progress = gtk_progress_bar_new(); 1052 meter->progress = gtk_progress_bar_new();
1023 gtk_widget_set_usize(gc->progress, 150, 0); 1053 gtk_widget_set_usize(meter->progress, 150, 0);
1024 gtk_box_pack_start(GTK_BOX(box), gc->progress, FALSE, FALSE, 0); 1054 gtk_box_pack_start(GTK_BOX(box), meter->progress, FALSE, FALSE, 0);
1025 gtk_widget_show(gc->progress); 1055 gtk_widget_show(meter->progress);
1026 1056
1027 gc->status = gtk_statusbar_new(); 1057 meter->status = gtk_statusbar_new();
1028 gtk_widget_set_usize(gc->status, 150, 0); 1058 gtk_widget_set_usize(meter->status, 150, 0);
1029 gtk_box_pack_start(GTK_BOX(box), gc->status, FALSE, FALSE, 0); 1059 gtk_box_pack_start(GTK_BOX(box), meter->status, FALSE, FALSE, 0);
1030 gtk_widget_show(gc->status); 1060 gtk_widget_show(meter->status);
1031 1061
1032 button = gtk_button_new_with_label(_("Cancel")); 1062 button = gtk_button_new_with_label(_("Cancel"));
1033 gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 0); 1063 gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 0);
1034 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(cancel_signon), gc); 1064 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(cancel_signon), meter);
1035 gtk_widget_show(button); 1065 gtk_widget_show(button);
1036 1066
1037 gtk_widget_show(gc->meter); 1067 gtk_widget_show(meter->window);
1038 } 1068 }
1039 1069
1040 gtk_progress_bar_update(GTK_PROGRESS_BAR(gc->progress), howfar / LOGIN_STEPS); 1070 gtk_progress_bar_update(GTK_PROGRESS_BAR(meter->progress), howfar / LOGIN_STEPS);
1041 gtk_statusbar_pop(GTK_STATUSBAR(gc->status), 1); 1071 gtk_statusbar_pop(GTK_STATUSBAR(meter->status), 1);
1042 gtk_statusbar_push(GTK_STATUSBAR(gc->status), 1, message); 1072 gtk_statusbar_push(GTK_STATUSBAR(meter->status), 1, message);
1043 } 1073 }
1044 1074
1045 static void set_kick_null(GtkObject *obj, struct aim_user *u) 1075 static void set_kick_null(GtkObject *obj, struct aim_user *u)
1046 { 1076 {
1047 u->kick_dlg = NULL; 1077 u->kick_dlg = NULL;
1048 } 1078 }
1049 1079
1050 void hide_login_progress(struct gaim_connection *gc, char *why) 1080 void hide_login_progress(struct gaim_connection *gc, char *why)
1051 { 1081 {
1052 char buf[2048]; 1082 char buf[2048];
1083 struct signon_meter *meter = find_signon_meter(gc);
1053 sprintf(buf, _("%s\n%s was unable to sign on: %s"), full_date(), gc->username, why); 1084 sprintf(buf, _("%s\n%s was unable to sign on: %s"), full_date(), gc->username, why);
1054 if (gc->user->kick_dlg) 1085 if (gc->user->kick_dlg)
1055 gtk_widget_destroy(gc->user->kick_dlg); 1086 gtk_widget_destroy(gc->user->kick_dlg);
1056 gc->user->kick_dlg = do_error_dialog(buf, _("Signon Error")); 1087 gc->user->kick_dlg = do_error_dialog(buf, _("Signon Error"));
1057 gtk_signal_connect(GTK_OBJECT(gc->user->kick_dlg), "destroy", 1088 gtk_signal_connect(GTK_OBJECT(gc->user->kick_dlg), "destroy",
1058 GTK_SIGNAL_FUNC(set_kick_null), gc->user); 1089 GTK_SIGNAL_FUNC(set_kick_null), gc->user);
1059 if (gc->meter) 1090 if (meter) {
1060 gtk_widget_destroy(gc->meter); 1091 gtk_widget_destroy(meter->window);
1061 gc->meter = NULL; 1092 meters = g_slist_remove(meters, meter);
1093 g_free(meter);
1094 }
1062 } 1095 }
1063 1096
1064 void signoff_all(gpointer w, gpointer d) 1097 void signoff_all(gpointer w, gpointer d)
1065 { 1098 {
1066 GSList *c = connections; 1099 GSList *c = connections;