Blame SOURCES/pidgin-2.10.11-Rework-tray-icon-blinking.patch

e5e7b7
From a7afe74af90b2bdd24052844c36236d2ba031354 Mon Sep 17 00:00:00 2001
e5e7b7
From: Daniel Kamil Kozar <dkk089@gmail.com>
e5e7b7
Date: Wed, 20 Sep 2017 01:38:28 +0200
e5e7b7
Subject: [PATCH 1/3] Rework tray icon blinking
e5e7b7
e5e7b7
Imported from https://developer.pidgin.im/ticket/17174 , authored by
e5e7b7
Zephaniah E. Loss-Cutler-Hull .
e5e7b7
e5e7b7
--HG--
e5e7b7
branch : trac-17174
e5e7b7
---
e5e7b7
 pidgin/gtkdocklet-gtk.c         | 17 +++++++----------
e5e7b7
 pidgin/gtkdocklet.c             | 20 ++++++++++++--------
e5e7b7
 pidgin/gtkdocklet.h             |  4 ++--
e5e7b7
 pidgin/win32/gtkdocklet-win32.c |  2 +-
e5e7b7
 4 files changed, 22 insertions(+), 21 deletions(-)
e5e7b7
e5e7b7
diff --git a/pidgin/gtkdocklet-gtk.c b/pidgin/gtkdocklet-gtk.c
e5e7b7
index f70916bb5772..460d1c84739a 100644
e5e7b7
--- a/pidgin/gtkdocklet-gtk.c
e5e7b7
+++ b/pidgin/gtkdocklet-gtk.c
e5e7b7
@@ -134,7 +134,7 @@ docklet_gtk_status_clicked_cb(GtkStatusIcon *status_icon, guint button, guint ac
e5e7b7
 }
e5e7b7
 
e5e7b7
 static void
e5e7b7
-docklet_gtk_status_update_icon(PurpleStatusPrimitive status, gboolean connecting, gboolean pending)
e5e7b7
+docklet_gtk_status_update_icon(PurpleStatusPrimitive status, gboolean connecting, gboolean pending, gboolean blinked)
e5e7b7
 {
e5e7b7
 	const gchar *icon_name = NULL;
e5e7b7
 
e5e7b7
@@ -159,19 +159,16 @@ docklet_gtk_status_update_icon(PurpleStatusPrimitive status, gboolean connecting
e5e7b7
 			break;
e5e7b7
 	}
e5e7b7
 
e5e7b7
-	if (pending)
e5e7b7
-		icon_name = PIDGIN_STOCK_TRAY_PENDING;
e5e7b7
-	if (connecting)
e5e7b7
+	if (connecting) {
e5e7b7
 		icon_name = PIDGIN_STOCK_TRAY_CONNECT;
e5e7b7
+	}
e5e7b7
 
e5e7b7
-	if (icon_name) {
e5e7b7
-		gtk_status_icon_set_from_icon_name(docklet, icon_name);
e5e7b7
+	if (!blinked && pending) {
e5e7b7
+		icon_name = PIDGIN_STOCK_TRAY_PENDING;
e5e7b7
 	}
e5e7b7
 
e5e7b7
-	if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/docklet/blink")) {
e5e7b7
-		gtk_status_icon_set_blinking(docklet, (pending && !connecting));
e5e7b7
-	} else if (gtk_status_icon_get_blinking(docklet)) {
e5e7b7
-		gtk_status_icon_set_blinking(docklet, FALSE);
e5e7b7
+	if (icon_name) {
e5e7b7
+		gtk_status_icon_set_from_icon_name(docklet, icon_name);
e5e7b7
 	}
e5e7b7
 }
e5e7b7
 
e5e7b7
diff --git a/pidgin/gtkdocklet.c b/pidgin/gtkdocklet.c
e5e7b7
index bbf997bc6380..2d8955fa9c8e 100644
e5e7b7
--- a/pidgin/gtkdocklet.c
e5e7b7
+++ b/pidgin/gtkdocklet.c
e5e7b7
@@ -69,17 +69,21 @@ docklet_blink_icon(gpointer data)
e5e7b7
 
e5e7b7
 	blinked = !blinked;
e5e7b7
 
e5e7b7
-	if(pending && !connecting) {
e5e7b7
-		if (blinked) {
e5e7b7
-			if (ui_ops && ui_ops->blank_icon)
e5e7b7
+	if (pending) {
e5e7b7
+		if (ui_ops && ui_ops->blank_icon) {
e5e7b7
+			if (blinked) {
e5e7b7
 				ui_ops->blank_icon();
e5e7b7
+			} else {
e5e7b7
+				pidgin_docklet_update_icon(blinked);
e5e7b7
+			}
e5e7b7
 		} else {
e5e7b7
-			pidgin_docklet_update_icon();
e5e7b7
+			pidgin_docklet_update_icon(blinked);
e5e7b7
 		}
e5e7b7
 		ret = TRUE; /* keep blinking */
e5e7b7
 	} else {
e5e7b7
 		docklet_blinking_timer = 0;
e5e7b7
 		blinked = FALSE;
e5e7b7
+		pidgin_docklet_update_icon(FALSE);
e5e7b7
 	}
e5e7b7
 
e5e7b7
 	return ret;
e5e7b7
@@ -207,7 +211,7 @@ docklet_update_status(void)
e5e7b7
 		pending = newpending;
e5e7b7
 		connecting = newconnecting;
e5e7b7
 
e5e7b7
-		pidgin_docklet_update_icon();
e5e7b7
+		pidgin_docklet_update_icon(FALSE);
e5e7b7
 
e5e7b7
 		/* and schedule the blinker function if messages are pending */
e5e7b7
 		if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/docklet/blink")
e5e7b7
@@ -758,10 +762,10 @@ docklet_menu(void)
e5e7b7
  * public api for ui_ops
e5e7b7
  **************************************************************************/
e5e7b7
 void
e5e7b7
-pidgin_docklet_update_icon()
e5e7b7
+pidgin_docklet_update_icon(gboolean blinked)
e5e7b7
 {
e5e7b7
 	if (ui_ops && ui_ops->update_icon)
e5e7b7
-		ui_ops->update_icon(status, connecting, pending);
e5e7b7
+		ui_ops->update_icon(status, connecting, pending, blinked);
e5e7b7
 }
e5e7b7
 
e5e7b7
 void
e5e7b7
@@ -795,7 +799,7 @@ pidgin_docklet_embedded()
e5e7b7
 	}
e5e7b7
 	visible = TRUE;
e5e7b7
 	docklet_update_status();
e5e7b7
-	pidgin_docklet_update_icon();
e5e7b7
+	pidgin_docklet_update_icon(FALSE);
e5e7b7
 }
e5e7b7
 
e5e7b7
 void
e5e7b7
diff --git a/pidgin/gtkdocklet.h b/pidgin/gtkdocklet.h
e5e7b7
index 34f88a14f5c4..7f188b92a204 100644
e5e7b7
--- a/pidgin/gtkdocklet.h
e5e7b7
+++ b/pidgin/gtkdocklet.h
e5e7b7
@@ -31,7 +31,7 @@ struct docklet_ui_ops
e5e7b7
 {
e5e7b7
 	void (*create)(void);
e5e7b7
 	void (*destroy)(void);
e5e7b7
-	void (*update_icon)(PurpleStatusPrimitive, gboolean, gboolean);
e5e7b7
+	void (*update_icon)(PurpleStatusPrimitive, gboolean, gboolean, gboolean);
e5e7b7
 	void (*blank_icon)(void);
e5e7b7
 	void (*set_tooltip)(gchar *);
e5e7b7
 	GtkMenuPositionFunc position_menu;
e5e7b7
@@ -39,7 +39,7 @@ struct docklet_ui_ops
e5e7b7
 
e5e7b7
 
e5e7b7
 /* functions in gtkdocklet.c */
e5e7b7
-void pidgin_docklet_update_icon(void);
e5e7b7
+void pidgin_docklet_update_icon(gboolean blinked);
e5e7b7
 void pidgin_docklet_clicked(int);
e5e7b7
 void pidgin_docklet_embedded(void);
e5e7b7
 void pidgin_docklet_remove(void);
e5e7b7
diff --git a/pidgin/win32/gtkdocklet-win32.c b/pidgin/win32/gtkdocklet-win32.c
e5e7b7
index b02666078e49..84609f111d64 100644
e5e7b7
--- a/pidgin/win32/gtkdocklet-win32.c
e5e7b7
+++ b/pidgin/win32/gtkdocklet-win32.c
e5e7b7
@@ -497,7 +497,7 @@ static void systray_remove_nid(void) {
e5e7b7
 }
e5e7b7
 
e5e7b7
 static void winpidgin_tray_update_icon(PurpleStatusPrimitive status,
e5e7b7
-		gboolean connecting, gboolean pending) {
e5e7b7
+		gboolean connecting, gboolean pending, gboolean blinked) {
e5e7b7
 
e5e7b7
 	int icon_index;
e5e7b7
 	g_return_if_fail(image != NULL);
e5e7b7
-- 
e5e7b7
2.14.4
e5e7b7
e5e7b7
e5e7b7
From 3d2c01f1a472670ca7b8960fabbf4e6b4e41cc02 Mon Sep 17 00:00:00 2001
e5e7b7
From: Daniel Kamil Kozar <dkk089@gmail.com>
e5e7b7
Date: Wed, 29 Nov 2017 21:13:54 +0100
e5e7b7
Subject: [PATCH 2/3] Use gtk_status_icon_get_icon_name instead of a new
e5e7b7
 boolean variable
e5e7b7
e5e7b7
--HG--
e5e7b7
branch : trac-17174
e5e7b7
---
e5e7b7
 pidgin/gtkdocklet-gtk.c         |  7 ++++---
e5e7b7
 pidgin/gtkdocklet.c             | 14 +++++++-------
e5e7b7
 pidgin/gtkdocklet.h             |  4 ++--
e5e7b7
 pidgin/win32/gtkdocklet-win32.c |  2 +-
e5e7b7
 4 files changed, 14 insertions(+), 13 deletions(-)
e5e7b7
e5e7b7
diff --git a/pidgin/gtkdocklet-gtk.c b/pidgin/gtkdocklet-gtk.c
e5e7b7
index 460d1c84739a..a948a0d7d5d8 100644
e5e7b7
--- a/pidgin/gtkdocklet-gtk.c
e5e7b7
+++ b/pidgin/gtkdocklet-gtk.c
e5e7b7
@@ -134,9 +134,10 @@ docklet_gtk_status_clicked_cb(GtkStatusIcon *status_icon, guint button, guint ac
e5e7b7
 }
e5e7b7
 
e5e7b7
 static void
e5e7b7
-docklet_gtk_status_update_icon(PurpleStatusPrimitive status, gboolean connecting, gboolean pending, gboolean blinked)
e5e7b7
+docklet_gtk_status_update_icon(PurpleStatusPrimitive status, gboolean connecting, gboolean pending)
e5e7b7
 {
e5e7b7
 	const gchar *icon_name = NULL;
e5e7b7
+	const gchar *current_icon_name = gtk_status_icon_get_icon_name(docklet);
e5e7b7
 
e5e7b7
 	switch (status) {
e5e7b7
 		case PURPLE_STATUS_OFFLINE:
e5e7b7
@@ -159,11 +160,11 @@ docklet_gtk_status_update_icon(PurpleStatusPrimitive status, gboolean connecting
e5e7b7
 			break;
e5e7b7
 	}
e5e7b7
 
e5e7b7
-	if (connecting) {
e5e7b7
+	if (connecting && strcmp(current_icon_name, PIDGIN_STOCK_TRAY_CONNECT) != 0) {
e5e7b7
 		icon_name = PIDGIN_STOCK_TRAY_CONNECT;
e5e7b7
 	}
e5e7b7
 
e5e7b7
-	if (!blinked && pending) {
e5e7b7
+	if (pending && strcmp(current_icon_name, PIDGIN_STOCK_TRAY_PENDING) != 0) {
e5e7b7
 		icon_name = PIDGIN_STOCK_TRAY_PENDING;
e5e7b7
 	}
e5e7b7
 
e5e7b7
diff --git a/pidgin/gtkdocklet.c b/pidgin/gtkdocklet.c
e5e7b7
index 2d8955fa9c8e..9614dcc76d12 100644
e5e7b7
--- a/pidgin/gtkdocklet.c
e5e7b7
+++ b/pidgin/gtkdocklet.c
e5e7b7
@@ -74,16 +74,16 @@ docklet_blink_icon(gpointer data)
e5e7b7
 			if (blinked) {
e5e7b7
 				ui_ops->blank_icon();
e5e7b7
 			} else {
e5e7b7
-				pidgin_docklet_update_icon(blinked);
e5e7b7
+				pidgin_docklet_update_icon();
e5e7b7
 			}
e5e7b7
 		} else {
e5e7b7
-			pidgin_docklet_update_icon(blinked);
e5e7b7
+			pidgin_docklet_update_icon();
e5e7b7
 		}
e5e7b7
 		ret = TRUE; /* keep blinking */
e5e7b7
 	} else {
e5e7b7
 		docklet_blinking_timer = 0;
e5e7b7
 		blinked = FALSE;
e5e7b7
-		pidgin_docklet_update_icon(FALSE);
e5e7b7
+		pidgin_docklet_update_icon();
e5e7b7
 	}
e5e7b7
 
e5e7b7
 	return ret;
e5e7b7
@@ -211,7 +211,7 @@ docklet_update_status(void)
e5e7b7
 		pending = newpending;
e5e7b7
 		connecting = newconnecting;
e5e7b7
 
e5e7b7
-		pidgin_docklet_update_icon(FALSE);
e5e7b7
+		pidgin_docklet_update_icon();
e5e7b7
 
e5e7b7
 		/* and schedule the blinker function if messages are pending */
e5e7b7
 		if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/docklet/blink")
e5e7b7
@@ -762,10 +762,10 @@ docklet_menu(void)
e5e7b7
  * public api for ui_ops
e5e7b7
  **************************************************************************/
e5e7b7
 void
e5e7b7
-pidgin_docklet_update_icon(gboolean blinked)
e5e7b7
+pidgin_docklet_update_icon()
e5e7b7
 {
e5e7b7
 	if (ui_ops && ui_ops->update_icon)
e5e7b7
-		ui_ops->update_icon(status, connecting, pending, blinked);
e5e7b7
+		ui_ops->update_icon(status, connecting, pending);
e5e7b7
 }
e5e7b7
 
e5e7b7
 void
e5e7b7
@@ -799,7 +799,7 @@ pidgin_docklet_embedded()
e5e7b7
 	}
e5e7b7
 	visible = TRUE;
e5e7b7
 	docklet_update_status();
e5e7b7
-	pidgin_docklet_update_icon(FALSE);
e5e7b7
+	pidgin_docklet_update_icon();
e5e7b7
 }
e5e7b7
 
e5e7b7
 void
e5e7b7
diff --git a/pidgin/gtkdocklet.h b/pidgin/gtkdocklet.h
e5e7b7
index 7f188b92a204..34f88a14f5c4 100644
e5e7b7
--- a/pidgin/gtkdocklet.h
e5e7b7
+++ b/pidgin/gtkdocklet.h
e5e7b7
@@ -31,7 +31,7 @@ struct docklet_ui_ops
e5e7b7
 {
e5e7b7
 	void (*create)(void);
e5e7b7
 	void (*destroy)(void);
e5e7b7
-	void (*update_icon)(PurpleStatusPrimitive, gboolean, gboolean, gboolean);
e5e7b7
+	void (*update_icon)(PurpleStatusPrimitive, gboolean, gboolean);
e5e7b7
 	void (*blank_icon)(void);
e5e7b7
 	void (*set_tooltip)(gchar *);
e5e7b7
 	GtkMenuPositionFunc position_menu;
e5e7b7
@@ -39,7 +39,7 @@ struct docklet_ui_ops
e5e7b7
 
e5e7b7
 
e5e7b7
 /* functions in gtkdocklet.c */
e5e7b7
-void pidgin_docklet_update_icon(gboolean blinked);
e5e7b7
+void pidgin_docklet_update_icon(void);
e5e7b7
 void pidgin_docklet_clicked(int);
e5e7b7
 void pidgin_docklet_embedded(void);
e5e7b7
 void pidgin_docklet_remove(void);
e5e7b7
diff --git a/pidgin/win32/gtkdocklet-win32.c b/pidgin/win32/gtkdocklet-win32.c
e5e7b7
index 84609f111d64..b02666078e49 100644
e5e7b7
--- a/pidgin/win32/gtkdocklet-win32.c
e5e7b7
+++ b/pidgin/win32/gtkdocklet-win32.c
e5e7b7
@@ -497,7 +497,7 @@ static void systray_remove_nid(void) {
e5e7b7
 }
e5e7b7
 
e5e7b7
 static void winpidgin_tray_update_icon(PurpleStatusPrimitive status,
e5e7b7
-		gboolean connecting, gboolean pending, gboolean blinked) {
e5e7b7
+		gboolean connecting, gboolean pending) {
e5e7b7
 
e5e7b7
 	int icon_index;
e5e7b7
 	g_return_if_fail(image != NULL);
e5e7b7
-- 
e5e7b7
2.14.4
e5e7b7
e5e7b7
e5e7b7
From 158cc7bfb197be31401b01393f3a17522da16537 Mon Sep 17 00:00:00 2001
e5e7b7
From: Daniel Kamil Kozar <dkk089@gmail.com>
e5e7b7
Date: Sun, 10 Dec 2017 20:34:19 +0100
e5e7b7
Subject: [PATCH 3/3] Use purple_strequal instead of strcmp
e5e7b7
e5e7b7
--HG--
e5e7b7
branch : trac-17174
e5e7b7
---
e5e7b7
 pidgin/gtkdocklet-gtk.c | 4 ++--
e5e7b7
 1 file changed, 2 insertions(+), 2 deletions(-)
e5e7b7
e5e7b7
diff --git a/pidgin/gtkdocklet-gtk.c b/pidgin/gtkdocklet-gtk.c
e5e7b7
index a948a0d7d5d8..4771e1e51483 100644
e5e7b7
--- a/pidgin/gtkdocklet-gtk.c
e5e7b7
+++ b/pidgin/gtkdocklet-gtk.c
e5e7b7
@@ -160,11 +160,11 @@ docklet_gtk_status_update_icon(PurpleStatusPrimitive status, gboolean connecting
e5e7b7
 			break;
e5e7b7
 	}
e5e7b7
 
e5e7b7
-	if (connecting && strcmp(current_icon_name, PIDGIN_STOCK_TRAY_CONNECT) != 0) {
e5e7b7
+	if (connecting && !purple_strequal(current_icon_name, PIDGIN_STOCK_TRAY_CONNECT)) {
e5e7b7
 		icon_name = PIDGIN_STOCK_TRAY_CONNECT;
e5e7b7
 	}
e5e7b7
 
e5e7b7
-	if (pending && strcmp(current_icon_name, PIDGIN_STOCK_TRAY_PENDING) != 0) {
e5e7b7
+	if (pending && !purple_strequal(current_icon_name, PIDGIN_STOCK_TRAY_PENDING)) {
e5e7b7
 		icon_name = PIDGIN_STOCK_TRAY_PENDING;
e5e7b7
 	}
e5e7b7
 
e5e7b7
-- 
e5e7b7
2.14.4
e5e7b7