pidgin/pidgin

Parents 873811ad2eab
Children b9ef2851fdc0
IRCv3: Add detail to the ack and nak signals for PurpleIRCv3Capabilities

This allows you to tell g_signal_connect what capability you care about when
connecting to the signals. This avoids your signal callback being called
multiple times and having to do a string comparison to check if it's the
capability you care about.

Testing Done:
Added a `g_warning` to `purple_ircv3_sasl_ack_cb` and verified it only got called for `sasl` and not `cap-notify`.

Bugs closed: PIDGIN-17743

Reviewed at https://reviews.imfreedom.org/r/2221/
--- a/libpurple/protocols/ircv3/purpleircv3capabilities.c Sun Jan 29 12:05:48 2023 -0600
+++ b/libpurple/protocols/ircv3/purpleircv3capabilities.c Sun Jan 29 12:07:06 2023 -0600
@@ -267,7 +267,7 @@
signals[SIG_ACK] = g_signal_new_class_handler(
"ack",
G_OBJECT_CLASS_TYPE(klass),
- G_SIGNAL_RUN_LAST,
+ G_SIGNAL_DETAILED | G_SIGNAL_RUN_LAST,
NULL,
NULL,
NULL,
@@ -291,7 +291,7 @@
signals[SIG_NAK] = g_signal_new_class_handler(
"nak",
G_OBJECT_CLASS_TYPE(klass),
- G_SIGNAL_RUN_LAST,
+ G_SIGNAL_DETAILED | G_SIGNAL_RUN_LAST,
NULL,
NULL,
NULL,
@@ -428,7 +428,7 @@
gboolean found = FALSE;
gboolean ret = TRUE;
- g_signal_emit(capabilities, sig, 0, caps);
+ g_signal_emit(capabilities, sig, g_quark_from_string(caps), caps);
found = g_ptr_array_find_with_equal_func(capabilities->requests, caps,
g_str_equal, &index);
--- a/libpurple/protocols/ircv3/purpleircv3sasl.c Sun Jan 29 12:05:48 2023 -0600
+++ b/libpurple/protocols/ircv3/purpleircv3sasl.c Sun Jan 29 12:07:06 2023 -0600
@@ -299,13 +299,10 @@
* Callbacks
*****************************************************************************/
static void
-purple_ircv3_sasl_ack_cb(PurpleIRCv3Capabilities *caps, const char *capability,
+purple_ircv3_sasl_ack_cb(PurpleIRCv3Capabilities *caps,
+ G_GNUC_UNUSED const char *capability,
G_GNUC_UNUSED gpointer data)
{
- if(!purple_strequal(capability, "sasl")) {
- return;
- }
-
purple_ircv3_sasl_start(caps);
}
@@ -316,7 +313,7 @@
purple_ircv3_sasl_request(PurpleIRCv3Capabilities *capabilities) {
purple_ircv3_capabilities_request(capabilities, "sasl");
- g_signal_connect(capabilities, "ack",
+ g_signal_connect(capabilities, "ack::sasl",
G_CALLBACK(purple_ircv3_sasl_ack_cb), NULL);
}