diff options
author | Daniel Kamil Kozar <dkk089@gmail.com> | 2017-09-20 01:38:28 +0200 |
---|---|---|
committer | Daniel Kamil Kozar <dkk089@gmail.com> | 2017-09-20 01:38:28 +0200 |
commit | 3b89b04945adfb72d82e59ba5695588fa65b8cb7 (patch) | |
tree | e415a849e6bd2b166603ee623b15b2ea7a7551b9 | |
parent | af29915c6a23a50b62f27bb3b82cb22c917992e6 (diff) | |
download | pidgin-3b89b04945adfb72d82e59ba5695588fa65b8cb7.tar.gz |
Rework tray icon blinking
Imported from https://developer.pidgin.im/ticket/17174 , authored by
Zephaniah E. Loss-Cutler-Hull .
-rw-r--r-- | pidgin/gtkdocklet-gtk.c | 17 | ||||
-rw-r--r-- | pidgin/gtkdocklet.c | 20 | ||||
-rw-r--r-- | pidgin/gtkdocklet.h | 4 | ||||
-rw-r--r-- | pidgin/win32/gtkdocklet-win32.c | 2 |
4 files changed, 22 insertions, 21 deletions
diff --git a/pidgin/gtkdocklet-gtk.c b/pidgin/gtkdocklet-gtk.c index f70916bb57..460d1c8473 100644 --- a/pidgin/gtkdocklet-gtk.c +++ b/pidgin/gtkdocklet-gtk.c @@ -134,7 +134,7 @@ docklet_gtk_status_clicked_cb(GtkStatusIcon *status_icon, guint button, guint ac } static void -docklet_gtk_status_update_icon(PurpleStatusPrimitive status, gboolean connecting, gboolean pending) +docklet_gtk_status_update_icon(PurpleStatusPrimitive status, gboolean connecting, gboolean pending, gboolean blinked) { const gchar *icon_name = NULL; @@ -159,19 +159,16 @@ docklet_gtk_status_update_icon(PurpleStatusPrimitive status, gboolean connecting break; } - if (pending) - icon_name = PIDGIN_STOCK_TRAY_PENDING; - if (connecting) + if (connecting) { icon_name = PIDGIN_STOCK_TRAY_CONNECT; + } - if (icon_name) { - gtk_status_icon_set_from_icon_name(docklet, icon_name); + if (!blinked && pending) { + icon_name = PIDGIN_STOCK_TRAY_PENDING; } - if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/docklet/blink")) { - gtk_status_icon_set_blinking(docklet, (pending && !connecting)); - } else if (gtk_status_icon_get_blinking(docklet)) { - gtk_status_icon_set_blinking(docklet, FALSE); + if (icon_name) { + gtk_status_icon_set_from_icon_name(docklet, icon_name); } } diff --git a/pidgin/gtkdocklet.c b/pidgin/gtkdocklet.c index 443e990f0a..489ccbc557 100644 --- a/pidgin/gtkdocklet.c +++ b/pidgin/gtkdocklet.c @@ -69,17 +69,21 @@ docklet_blink_icon(gpointer data) blinked = !blinked; - if(pending && !connecting) { - if (blinked) { - if (ui_ops && ui_ops->blank_icon) + if (pending) { + if (ui_ops && ui_ops->blank_icon) { + if (blinked) { ui_ops->blank_icon(); + } else { + pidgin_docklet_update_icon(blinked); + } } else { - pidgin_docklet_update_icon(); + pidgin_docklet_update_icon(blinked); } ret = TRUE; /* keep blinking */ } else { docklet_blinking_timer = 0; blinked = FALSE; + pidgin_docklet_update_icon(FALSE); } return ret; @@ -207,7 +211,7 @@ docklet_update_status(void) pending = newpending; connecting = newconnecting; - pidgin_docklet_update_icon(); + pidgin_docklet_update_icon(FALSE); /* and schedule the blinker function if messages are pending */ if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/docklet/blink") @@ -758,10 +762,10 @@ docklet_menu(void) * public api for ui_ops **************************************************************************/ void -pidgin_docklet_update_icon() +pidgin_docklet_update_icon(gboolean blinked) { if (ui_ops && ui_ops->update_icon) - ui_ops->update_icon(status, connecting, pending); + ui_ops->update_icon(status, connecting, pending, blinked); } void @@ -795,7 +799,7 @@ pidgin_docklet_embedded() } visible = TRUE; docklet_update_status(); - pidgin_docklet_update_icon(); + pidgin_docklet_update_icon(FALSE); } void diff --git a/pidgin/gtkdocklet.h b/pidgin/gtkdocklet.h index 34f88a14f5..7f188b92a2 100644 --- a/pidgin/gtkdocklet.h +++ b/pidgin/gtkdocklet.h @@ -31,7 +31,7 @@ struct docklet_ui_ops { void (*create)(void); void (*destroy)(void); - void (*update_icon)(PurpleStatusPrimitive, gboolean, gboolean); + void (*update_icon)(PurpleStatusPrimitive, gboolean, gboolean, gboolean); void (*blank_icon)(void); void (*set_tooltip)(gchar *); GtkMenuPositionFunc position_menu; @@ -39,7 +39,7 @@ struct docklet_ui_ops /* functions in gtkdocklet.c */ -void pidgin_docklet_update_icon(void); +void pidgin_docklet_update_icon(gboolean blinked); void pidgin_docklet_clicked(int); void pidgin_docklet_embedded(void); void pidgin_docklet_remove(void); diff --git a/pidgin/win32/gtkdocklet-win32.c b/pidgin/win32/gtkdocklet-win32.c index b02666078e..84609f111d 100644 --- a/pidgin/win32/gtkdocklet-win32.c +++ b/pidgin/win32/gtkdocklet-win32.c @@ -497,7 +497,7 @@ static void systray_remove_nid(void) { } static void winpidgin_tray_update_icon(PurpleStatusPrimitive status, - gboolean connecting, gboolean pending) { + gboolean connecting, gboolean pending, gboolean blinked) { int icon_index; g_return_if_fail(image != NULL); |