pidgin/pidgin

Don't connect an extra signal for req_field_changed_cb

19 months ago, Elliott Sales de Andrade
67b0fe9f32f3
Parents 9315e7772780
Children 0cb7833d756b
Don't connect an extra signal for req_field_changed_cb

Instead, call it in the existing signal handlers. This also fixes one case (`req_entry_field_changed_cb`) which doesn't trigger this common handler.

Testing Done:
Compiled only.

Reviewed at https://reviews.imfreedom.org/r/1997/
--- a/pidgin/gtkrequest.c Sat Oct 29 01:37:54 2022 -0500
+++ b/pidgin/gtkrequest.c Sat Oct 29 01:40:10 2022 -0500
@@ -226,10 +226,44 @@
}
static void
+req_field_changed_common(GtkWidget *widget, PurpleRequestField *field)
+{
+ PurpleRequestFieldGroup *group;
+ PurpleRequestFields *fields;
+ PidginRequestData *req_data;
+ const GList *it;
+
+ group = purple_request_field_get_group(field);
+ fields = purple_request_field_group_get_fields_list(group);
+ req_data = purple_request_fields_get_ui_data(fields);
+
+ gtk_widget_set_sensitive(req_data->ok_button,
+ purple_request_fields_all_required_filled(fields) &&
+ purple_request_fields_all_valid(fields));
+
+ it = purple_request_fields_get_autosensitive(fields);
+ for(; it != NULL; it = g_list_next(it)) {
+ PurpleRequestField *field = it->data;
+ GtkWidget *widget = purple_request_field_get_ui_data(field);
+ gboolean sensitive;
+
+ sensitive = purple_request_field_is_sensitive(field);
+ gtk_widget_set_sensitive(widget, sensitive);
+
+ /* XXX: and what about multiline? */
+ if(GTK_IS_EDITABLE(widget)) {
+ gtk_editable_set_editable(GTK_EDITABLE(widget), sensitive);
+ }
+ }
+}
+
+static void
field_bool_cb(GtkCheckButton *button, PurpleRequestField *field)
{
purple_request_field_bool_set_value(field,
gtk_check_button_get_active(button));
+
+ req_field_changed_common(GTK_WIDGET(button), field);
}
static void
@@ -274,6 +308,8 @@
purple_request_field_account_set_value(
field, pidgin_account_chooser_get_selected(chooser));
+
+ req_field_changed_common(GTK_WIDGET(w), field);
}
static void
@@ -1033,11 +1069,8 @@
if (purple_request_field_get_field_type(field) == PURPLE_REQUEST_FIELD_INTEGER) {
int value = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(entry));
purple_request_field_int_set_value(field, value);
- return;
- }
-
- if (purple_request_field_string_is_multiline(field))
- {
+
+ } else if (purple_request_field_string_is_multiline(field)) {
char *text;
GtkTextIter start_iter, end_iter;
@@ -1047,44 +1080,14 @@
text = gtk_text_buffer_get_text(GTK_TEXT_BUFFER(entry), &start_iter, &end_iter, FALSE);
purple_request_field_string_set_value(field, (!text || !*text) ? NULL : text);
g_free(text);
- }
- else
- {
+
+ } else {
const char *text = NULL;
text = gtk_editable_get_text(GTK_EDITABLE(entry));
purple_request_field_string_set_value(field, (*text == '\0') ? NULL : text);
}
-}
-
-static void
-req_field_changed_cb(GtkWidget *widget, PurpleRequestField *field)
-{
- PurpleRequestFieldGroup *group;
- PurpleRequestFields *fields;
- PidginRequestData *req_data;
- const GList *it;
-
- group = purple_request_field_get_group(field);
- fields = purple_request_field_group_get_fields_list(group);
- req_data = purple_request_fields_get_ui_data(fields);
-
- gtk_widget_set_sensitive(req_data->ok_button,
- purple_request_fields_all_required_filled(fields) &&
- purple_request_fields_all_valid(fields));
-
- it = purple_request_fields_get_autosensitive(fields);
- for (; it != NULL; it = g_list_next(it)) {
- PurpleRequestField *field = it->data;
- GtkWidget *widget = purple_request_field_get_ui_data(field);
- gboolean sensitive;
-
- sensitive = purple_request_field_is_sensitive(field);
- gtk_widget_set_sensitive(widget, sensitive);
-
- /* XXX: and what about multiline? */
- if (GTK_IS_EDITABLE(widget))
- gtk_editable_set_editable(GTK_EDITABLE(widget), sensitive);
- }
+
+ req_field_changed_common(entry, field);
}
static void
@@ -1094,10 +1097,8 @@
g_object_set(entry, "activates-default", TRUE, NULL);
- g_signal_connect(G_OBJECT(entry), "changed",
- G_CALLBACK(req_entry_field_changed_cb), field);
- g_signal_connect(G_OBJECT(entry), "changed",
- G_CALLBACK(req_field_changed_cb), field);
+ g_signal_connect(entry, "changed", G_CALLBACK(req_entry_field_changed_cb),
+ field);
if ((type_hint = purple_request_field_get_field_type_hint(field)) != NULL)
{
@@ -1175,8 +1176,8 @@
if (purple_request_field_is_required(field))
{
GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
- g_signal_connect(G_OBJECT(buffer), "changed",
- G_CALLBACK(req_entry_field_changed_cb), field);
+ g_signal_connect(buffer, "changed",
+ G_CALLBACK(req_entry_field_changed_cb), field);
}
widget = gtk_scrolled_window_new();
@@ -1253,10 +1254,7 @@
gtk_check_button_set_active(GTK_CHECK_BUTTON(widget),
purple_request_field_bool_get_default_value(field));
- g_signal_connect(G_OBJECT(widget), "toggled",
- G_CALLBACK(field_bool_cb), field);
- g_signal_connect(widget, "toggled",
- G_CALLBACK(req_field_changed_cb), field);
+ g_signal_connect(widget, "toggled", G_CALLBACK(field_bool_cb), field);
return widget;
}
@@ -1441,8 +1439,6 @@
field);
gtk_widget_set_tooltip_text(widget, purple_request_field_get_tooltip(field));
- g_signal_connect(widget, "changed",
- G_CALLBACK(req_field_changed_cb), field);
return widget;
}