diff src/buddy.c @ 1058:4927ce25d8cc

[gaim-migrate @ 1068] idle times for single connections; deleting an account signs it off if need be committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Fri, 03 Nov 2000 20:23:38 +0000
parents d50d3abb9eb7
children 04cce2035541
line wrap: on
line diff
--- a/src/buddy.c	Fri Nov 03 10:46:58 2000 +0000
+++ b/src/buddy.c	Fri Nov 03 20:23:38 2000 +0000
@@ -1353,6 +1353,10 @@
 	gtk_box_pack_start(GTK_BOX(box), b->label, TRUE, TRUE, 1);
 	gtk_widget_show(b->label);
 
+	b->idle = gtk_label_new("");
+	gtk_box_pack_start(GTK_BOX(box), b->idle, FALSE, FALSE, 1);
+	gtk_widget_show(b->idle);
+
 	gs->members = g_slist_insert(gs->members, b, pos);
 	return b;
 }
@@ -1416,6 +1420,58 @@
 	return FALSE;
 }
 
+static void update_idle_time(struct buddy_show *bs) {
+	char idlet[16];
+	time_t t;
+	int ihrs, imin;
+	struct buddy *b;
+	GSList *c;
+
+	time(&t);
+	if (g_slist_length(bs->connlist) == 1) {
+		b = find_buddy(bs->connlist->data, bs->name);
+		if (!b) return;
+		ihrs = (t - b->idle) / 3600; imin = ((t - b->idle) / 60) % 60;
+
+		if (ihrs)
+			g_snprintf(idlet, sizeof idlet, "(%d:%02d)", ihrs, imin);
+		else
+			g_snprintf(idlet, sizeof idlet, "(%d)", imin);
+
+		gtk_widget_hide(bs->idle);
+		if (b->idle)
+			gtk_label_set(GTK_LABEL(bs->idle), idlet);
+		else
+			gtk_label_set(GTK_LABEL(bs->idle), "");
+		if (display_options & OPT_DISP_SHOW_IDLETIME)
+			gtk_widget_show(bs->idle);
+	} else {
+		/* FIXME */
+	}
+}
+
+void update_idle_times() {
+	GSList *grp = shows;
+	GSList *mem;
+	struct buddy_show *b;
+	struct group_show *g;
+	struct buddy *bud;
+	time_t t;
+	char idlet[16];
+	int ihrs, imin;
+
+	while (grp) {
+		g = (struct group_show *)grp->data;
+		mem = g->members;
+		while (mem) {
+			b = (struct buddy_show *)mem->data;
+			update_idle_time(b);
+			mem = mem->next;
+		}
+		grp = grp->next;
+	}
+}
+
 void set_buddy(struct gaim_connection *gc, struct buddy *b)
 {
 	struct group *g = find_group_by_buddy(gc, b->name);
@@ -1424,6 +1480,7 @@
 	GdkPixmap *pm;
 	GdkBitmap *bm;
 	char **xpm = NULL;
+
 	if (b->present) {
 		if ((gs = find_group_show(g->name)) == NULL)
 			gs = new_group_show(g->name);
@@ -1460,6 +1517,7 @@
 			gdk_pixmap_unref(pm);
 			gdk_bitmap_unref(bm);
 		}
+		update_idle_time(bs);
 	} else {
 		play_sound(BUDDY_LEAVE);
 		gs = find_group_show(g->name);