X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fping.c;h=83202493acc8f29c6bff1af7e27a56f5394cac96;hb=db49122dece88956856606fe4c17158859f81837;hp=8bd333d395cf096454cee83d5b40289f74ddcfed;hpb=ea481338b5f16fd81a7b33e036ead39b918a51af;p=chaz%2Fopenbox diff --git a/openbox/ping.c b/openbox/ping.c index 8bd333d3..83202493 100644 --- a/openbox/ping.c +++ b/openbox/ping.c @@ -38,7 +38,7 @@ static guint32 ping_next_id = 1; #define PING_TIMEOUT (G_USEC_PER_SEC * 3) /*! Warn the user after this many PING_TIMEOUT intervals */ -#define PING_TIMEOUT_WARN 3 +#define PING_TIMEOUT_WARN 1 static void ping_send(ObPingTarget *t); static void ping_end(ObClient *client, gpointer data); @@ -69,11 +69,12 @@ void ping_start(struct _ObClient *client, ObPingEventHandler h) { ObPingTarget *t; - /* make sure we're not already pinging the client */ - g_assert(g_hash_table_find(ping_ids, find_client, client) == NULL); - + /* make sure the client supports ping! */ g_assert(client->ping == TRUE); + /* make sure we're not already pinging the client */ + if (g_hash_table_find(ping_ids, find_client, client) != NULL) return; + t = g_new0(ObPingTarget, 1); t->client = client; t->h = h; @@ -89,26 +90,24 @@ void ping_start(struct _ObClient *client, ObPingEventHandler h) g_assert(g_hash_table_find(ping_ids, find_client, client) != NULL); } -void ping_stop(struct _ObClient *c) -{ - ping_end(c, NULL); -} - void ping_got_pong(guint32 id) { ObPingTarget *t; if ((t = g_hash_table_lookup(ping_ids, &id))) { - /*ob_debug("-PONG: '%s' (id %u)\n", t->client->title, t->id);*/ + /*ob_debug("-PONG: '%s' (id %u)", t->client->title, t->id);*/ if (t->waiting > PING_TIMEOUT_WARN) { /* we had notified that they weren't responding, so now we need to notify that they are again */ t->h(t->client, FALSE); } t->waiting = 0; /* not waiting for a reply anymore */ + + /* we got a pong so we're happy now */ + ping_end(t->client, NULL); } else - ob_debug("Got PONG with id %u but not waiting for one\n", id); + ob_debug("Got PONG with id %u but not waiting for one", id); } static gboolean find_client(gpointer key, gpointer value, gpointer client) @@ -131,7 +130,7 @@ static void ping_send(ObPingTarget *t) g_hash_table_insert(ping_ids, &t->id, t); } - /*ob_debug("+PING: '%s' (id %u)\n", t->client->title, t->id);*/ + /*ob_debug("+PING: '%s' (id %u)", t->client->title, t->id);*/ OBT_PROP_MSG_TO(t->client->window, t->client->window, WM_PROTOCOLS, OBT_PROP_ATOM(NET_WM_PING), t->id, t->client->window, 0, 0, NoEventMask);