# HG changeset patch # User Herman Bloggs # Date 1058503599 0 # Node ID 9fd7716068d9b5d33cf89b1876683201b385c80a # Parent a5b8abff64611dbc9ea695fa9b7d4fe15bc276ed [gaim-migrate @ 6697] robot101: fairly self-explanatory robot101: less retarded blinking code, and stop blinking correctly when away/all queues are cleared committer: Tailor Script diff -r a5b8abff6461 -r 9fd7716068d9 plugins/docklet/docklet.c --- a/plugins/docklet/docklet.c Fri Jul 18 04:36:57 2003 +0000 +++ b/plugins/docklet/docklet.c Fri Jul 18 04:46:39 2003 +0000 @@ -54,7 +54,6 @@ GaimPlugin *handle = NULL; static struct docklet_ui_ops *ui_ops = NULL; static enum docklet_status status = offline; -static enum docklet_status icon = offline; #ifdef _WIN32 __declspec(dllimport) GSList *unread_message_queue; __declspec(dllimport) GSList *away_messages; @@ -195,8 +194,13 @@ static gboolean docklet_blink_icon() { + static gboolean blinked = FALSE; + enum docklet_status icon = status; + + blinked = !blinked; + if (status == online_pending) { - if (status == icon) { + if (blinked) { /* last icon was the right one... let's change it */ icon = online; } else { @@ -204,7 +208,7 @@ icon = online_pending; } } else if (status == away_pending) { - if (status == icon) { + if (blinked) { /* last icon was the right one... let's change it */ icon = away; } else { @@ -213,6 +217,7 @@ } } else { /* no messages, stop blinking */ + blinked = FALSE; return FALSE; } @@ -253,9 +258,8 @@ /* update the icon if we changed status */ if (status != oldstatus) { - icon = status; if (ui_ops->update_icon) - ui_ops->update_icon(icon); + ui_ops->update_icon(status); /* and schedule the blinker function if messages are pending */ if (status == online_pending || status == away_pending) { @@ -295,7 +299,6 @@ case 1: if (unread_message_queue) { docklet_flush_queue(); - g_idle_add(docklet_update_status, &handle); } else { gaim_gtk_blist_docklet_toggle(); } @@ -323,7 +326,7 @@ docklet_update_status(); if (ui_ops->update_icon) - ui_ops->update_icon(icon); + ui_ops->update_icon(status); } void @@ -384,6 +387,14 @@ g_idle_add(docklet_update_status, &handle); } +static void +gaim_new_conversation(char *who, void *data) +{ + /* queue a callback here so if the queue is being + flushed, we stop flashing. thanks javabsp. */ + g_idle_add(docklet_update_status, &handle); +} + /* static void gaim_buddy_signon(GaimConnection *gc, char *who, void *data) { } @@ -394,9 +405,6 @@ } static void gaim_buddy_back(GaimConnection *gc, char *who, void *data) { -} - -static void gaim_new_conversation(char *who, void *data) { } */ /* plugin glue */ @@ -419,11 +427,11 @@ gaim_signal_connect(plugin, event_connecting, gaim_connecting, NULL); gaim_signal_connect(plugin, event_away, gaim_away, NULL); gaim_signal_connect(plugin, event_im_recv, gaim_im_recv, NULL); + gaim_signal_connect(plugin, event_new_conversation, gaim_new_conversation, NULL); /* gaim_signal_connect(plugin, event_buddy_signon, gaim_buddy_signon, NULL); gaim_signal_connect(plugin, event_buddy_signoff, gaim_buddy_signoff, NULL); gaim_signal_connect(plugin, event_buddy_away, gaim_buddy_away, NULL); - gaim_signal_connect(plugin, event_buddy_back, gaim_buddy_back, NULL); - gaim_signal_connect(plugin, event_new_conversation, gaim_new_conversation, NULL); */ + gaim_signal_connect(plugin, event_buddy_back, gaim_buddy_back, NULL); */ gaim_prefs_add_none("/plugins/gtk/docklet"); gaim_prefs_add_bool("/plugins/gtk/docklet/queue_messages", FALSE); @@ -439,6 +447,7 @@ /* XXX: do this while gaim has no other way to toggle the global mute */ gaim_gtk_sound_set_mute(FALSE); + docklet_remove_callbacks(); gaim_debug(GAIM_DEBUG_INFO, "tray icon", "plugin unloaded\n");