diff src/multi.c @ 988:9523b772e546

[gaim-migrate @ 998] progress meters for signing in. UI should be changed but at least there's something there now committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Fri, 13 Oct 2000 19:56:11 +0000
parents 7ec6b092f227
children eacd93d0089a
line wrap: on
line diff
--- a/src/multi.c	Fri Oct 13 18:55:04 2000 +0000
+++ b/src/multi.c	Fri Oct 13 19:56:11 2000 +0000
@@ -87,6 +87,8 @@
 	connections = g_slist_remove(connections, gc);
 	g_free(gc);
 	redo_convo_menus();
+	if (!connections && mainwindow)
+		gtk_widget_show(mainwindow);
 }
 
 struct gaim_connection *find_gaim_conn_by_name(char *name) {
@@ -620,6 +622,9 @@
 {
 	struct aim_user *u;
 	int i;
+	if (gc->meter)
+		gtk_widget_destroy(gc->meter);
+	gc->meter = NULL;
 	if (!acctedit) return;
 	u = find_user(gc->username);
 	i = gtk_clist_find_row_from_data(GTK_CLIST(list), u);
@@ -654,3 +659,63 @@
 		u = u->next;
 	}
 }
+
+static void meter_destroy(GtkWidget *meter, struct gaim_connection *gc) {
+	gtk_widget_destroy(meter);
+	gc->meter = NULL;
+}
+
+void set_login_progress(struct gaim_connection *gc, float howfar, char *message) {
+	if (mainwindow)
+		gtk_widget_hide(mainwindow);
+
+	if (!gc->meter) {
+		GtkWidget *box, *label;
+		char buf[256];
+
+		gc->meter = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+		gtk_window_set_policy(GTK_WINDOW(gc->meter), 0, 0, 1);
+		gtk_window_set_wmclass(GTK_WINDOW(gc->meter), "signon", "Gaim");
+		gtk_container_set_border_width(GTK_CONTAINER(gc->meter), 5);
+		g_snprintf(buf, sizeof(buf), "%s Signing On", gc->username);
+		gtk_window_set_title(GTK_WINDOW(gc->meter), buf);
+		gtk_signal_connect(GTK_OBJECT(gc->meter), "destroy",
+				   GTK_SIGNAL_FUNC(meter_destroy), gc);
+		gtk_widget_realize(gc->meter);
+		aol_icon(gc->meter->window);
+
+		box = gtk_vbox_new(FALSE, 5);
+		gtk_container_add(GTK_CONTAINER(gc->meter), box);
+		gtk_widget_show(box);
+
+		label = gtk_label_new(buf);
+		gtk_box_pack_start(GTK_BOX(box), label, 0, 0, 5);
+		gtk_widget_show(label);
+
+		gc->progress = gtk_progress_bar_new();
+		gtk_widget_set_usize(gc->progress, 150, 0);
+		gtk_box_pack_start(GTK_BOX(box), gc->progress, 0, 0, 5);
+		gtk_widget_show(gc->progress);
+
+		gc->status = gtk_statusbar_new();
+		gtk_widget_set_usize(gc->status, 150, 0);
+		gtk_box_pack_start(GTK_BOX(box), gc->status, 0, 0, 5);
+		gtk_widget_show(gc->status);
+
+		gtk_widget_show(gc->meter);
+	}
+
+	gtk_progress_bar_update(GTK_PROGRESS_BAR(gc->progress), howfar / 5);
+	gtk_statusbar_pop(GTK_STATUSBAR(gc->status), 1);
+	gtk_statusbar_push(GTK_STATUSBAR(gc->status), 1, message);
+}
+
+void hide_login_progress(struct gaim_connection *gc, char *why)
+{
+	char buf[2048];
+	sprintf(buf, _("%s was unable to sign on: %s"), gc->username, why);
+	do_error_dialog(buf, _("Signon Error"));
+	if (gc->meter)
+		gtk_widget_destroy(gc->meter);
+	gc->meter = NULL;
+}