+/* Time to wait before exit, in seconds */
+#define EXIT_TIMEOUT 5
+
+
+static guint chat_count = 0;
+static guint exit_timeout = 0;
+
+
+static gboolean
+exit_timeout_cb (gpointer user_data)
+{
+ gossip_debug (DEBUG_DOMAIN, "Timeout, exiting");
+
+ gtk_main_quit ();
+
+ return FALSE;
+}
+
+static void
+exit_timeout_start (void)
+{
+ if (exit_timeout) {
+ return;
+ }
+
+ exit_timeout = g_timeout_add (EXIT_TIMEOUT * 1000,
+ (GSourceFunc) exit_timeout_cb,
+ NULL);
+}
+
+static void
+exit_timeout_stop (void)
+{
+ if (exit_timeout) {
+ gossip_debug (DEBUG_DOMAIN, "Exit timeout canceled");
+ g_source_remove (exit_timeout);
+ exit_timeout = 0;
+ }
+}
+
+static void
+chat_finalized_cb (gpointer user_data,
+ GossipChat *chat)
+{
+ chat_count--;
+ if (chat_count == 0) {
+ gossip_debug (DEBUG_DOMAIN, "No more chat, start exit timeout");
+ exit_timeout_start ();
+ }
+}
+