Tue, 18 Feb 2025 23:34:01 -0600
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/
--- 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);