Add simple tool tips to badges.

Tue, 18 Feb 2025 23:34:01 -0600

author
Gary Kramlich <grim@reaperworld.com>
date
Tue, 18 Feb 2025 23:34:01 -0600
changeset 43184
d01d9aeec436
parent 43183
2d03fb0c0ff2
child 43185
c7b0c4b88dfb

Add simple tool tips to badges.

This just uses Purple.Badge:description for now but we should expand this to
use all of the properites on Purple.Badge at a later time.

Testing Done:
Opened a conversation with myself in the demo protocol plugin and verified it displayed. Also joined an IRC room where there was an operator and verified the tooltip worked there as well.

Bugs closed: PIDGIN-18046

Reviewed at https://reviews.imfreedom.org/r/3842/

pidgin/resources/badge-item.ui file | annotate | diff | comparison | revisions
protocols/demo/purpledemoprotocolconversation.c file | annotate | diff | comparison | revisions
protocols/ircv3/purpleircv3messagehandlers.c file | annotate | diff | comparison | revisions
--- a/pidgin/resources/badge-item.ui	Tue Feb 18 23:31:14 2025 -0600
+++ b/pidgin/resources/badge-item.ui	Tue Feb 18 23:34:01 2025 -0600
@@ -26,6 +26,12 @@
     <property name="child">
       <object class="GtkImage">
         <property name="icon-size">normal</property>
+        <property name="has-tooltip">true</property>
+        <binding name="tooltip-text">
+          <lookup name="description" type="PurpleBadge">
+            <lookup name="item">GtkListItem</lookup>
+          </lookup>
+        </binding>
         <binding name="icon-name">
           <lookup name="icon-name" type="PurpleBadge">
             <lookup name="item">GtkListItem</lookup>
--- a/protocols/demo/purpledemoprotocolconversation.c	Tue Feb 18 23:31:14 2025 -0600
+++ b/protocols/demo/purpledemoprotocolconversation.c	Tue Feb 18 23:34:01 2025 -0600
@@ -192,6 +192,7 @@
 				id = g_strdup_printf("demo-badge-%s", badge_id);
 				icon_name = g_strdup_printf("demo-badge-%s", badge_id);
 				badge = purple_badge_new(id, 0, icon_name, " ");
+				purple_badge_set_description(badge, badge_id);
 				g_free(id);
 				g_free(icon_name);
 
--- a/protocols/ircv3/purpleircv3messagehandlers.c	Tue Feb 18 23:31:14 2025 -0600
+++ b/protocols/ircv3/purpleircv3messagehandlers.c	Tue Feb 18 23:34:01 2025 -0600
@@ -79,32 +79,38 @@
 
 	while(iter != NULL) {
 		PurpleBadge *badge = NULL;
+		const char *description = NULL;
 		const char *id = NULL;
 		const char *mnemonic = NULL;
 		int priority = 0;
 
 		switch(g_utf8_get_char(iter)) {
 		case '~':
+			description = _("Founder");
 			id = "ircv3-badge-founder";
 			priority = 500;
 			mnemonic = "~";
 			break;
 		case '&':
+			description = _("Protected");
 			id = "ircv3-badge-protected";
 			priority = 400;
 			mnemonic = "&";
 			break;
 		case '@':
+			description = _("Operator");
 			id = "ircv3-badge-operator";
 			priority = 300;
 			mnemonic = "@";
 			break;
 		case '%':
+			description = _("Half Operator");
 			id = "ircv3-badge-halfop";
 			priority = 200;
 			mnemonic = "%%";
 			break;
 		case '+':
+			description = _("Voice");
 			id = "ircv3-badge-voice";
 			priority = 100;
 			mnemonic = "+";
@@ -120,6 +126,10 @@
 			purple_badges_add_badge(badges, badge);
 		} else {
 			badge = purple_badge_new(id, priority, id, mnemonic);
+			if(!purple_strempty(description)) {
+				purple_badge_set_description(badge, description);
+			}
+
 			purple_badge_manager_add(manager, badge);
 			purple_badges_add_badge(badges, badge);
 			g_clear_object(&badge);

mercurial