summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Kamil Kozar <dkk089@gmail.com>2017-09-20 01:38:28 +0200
committerDaniel Kamil Kozar <dkk089@gmail.com>2017-09-20 01:38:28 +0200
commit3b89b04945adfb72d82e59ba5695588fa65b8cb7 (patch)
treee415a849e6bd2b166603ee623b15b2ea7a7551b9
parentaf29915c6a23a50b62f27bb3b82cb22c917992e6 (diff)
downloadpidgin-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.c17
-rw-r--r--pidgin/gtkdocklet.c20
-rw-r--r--pidgin/gtkdocklet.h4
-rw-r--r--pidgin/win32/gtkdocklet-win32.c2
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);