GTK Request: better html support

Tue, 17 Sep 2013 18:20:00 +0200

author
Tomasz Wasilczyk <twasilczyk@pidgin.im>
date
Tue, 17 Sep 2013 18:20:00 +0200
changeset 34445
43e91cccb4da
parent 34444
4fe0e2422d82
child 34446
c6efc471c8a1
child 34948
e31ee6f00ff8

GTK Request: better html support

libpurple/request.c file | annotate | diff | comparison | revisions
pidgin/gtkrequest.c file | annotate | diff | comparison | revisions
--- a/libpurple/request.c	Tue Sep 17 14:06:44 2013 +0200
+++ b/libpurple/request.c	Tue Sep 17 18:20:00 2013 +0200
@@ -2099,6 +2099,31 @@
 		cancel_cb ? 1 : 0, _("Cancel"), cancel_cb);
 }
 
+static void
+purple_request_fields_strip_html(PurpleRequestFields *fields)
+{
+	GList *itg;
+
+	for (itg = fields->groups; itg != NULL; itg = g_list_next(itg)) {
+		PurpleRequestFieldGroup *group = itg->data;
+		GList *itf;
+
+		for (itf = group->fields; itf != NULL; itf = g_list_next(itf)) {
+			PurpleRequestField *field = itf->data;
+			gchar *new_label;
+
+			new_label = purple_request_strip_html_custom(
+				field->label);
+			if (g_strcmp0(new_label, field->label) == 0) {
+				g_free(new_label);
+				continue;
+			}
+			g_free(field->label);
+			field->label = new_label;
+		}
+	}
+}
+
 void *
 purple_request_fields(void *handle, const char *title, const char *primary,
 	const char *secondary, PurpleRequestFields *fields, const char *ok_text,
@@ -2120,6 +2145,12 @@
 
 	ops = purple_request_get_ui_ops();
 
+	if (purple_request_cpar_is_html(cpar) &&
+		!((ops->features & PURPLE_REQUEST_FEATURE_HTML)))
+	{
+		purple_request_fields_strip_html(fields);
+	}
+
 	if (ops != NULL && ops->request_fields != NULL) {
 		PurpleRequestInfo *info;
 		gchar **tmp;
--- a/pidgin/gtkrequest.c	Tue Sep 17 14:06:44 2013 +0200
+++ b/pidgin/gtkrequest.c	Tue Sep 17 18:20:00 2013 +0200
@@ -1068,12 +1068,16 @@
 }
 
 static GtkWidget *
-create_bool_field(PurpleRequestField *field)
+create_bool_field(PurpleRequestField *field,
+	PurpleRequestCommonParameters *cpar)
 {
 	GtkWidget *widget;
+	gchar *label;
 
-	widget = gtk_check_button_new_with_label(
+	label = pidgin_request_escape(cpar,
 		purple_request_field_get_label(field));
+	widget = gtk_check_button_new_with_label(label);
+	g_free(label);
 
 	gtk_widget_set_tooltip_text(widget, purple_request_field_get_tooltip(field));
 
@@ -1630,7 +1634,7 @@
 				size_t col_offset = col_num * 2;
 				PurpleRequestFieldType type;
 				GtkWidget *widget = NULL;
-				const char *field_label;
+				gchar *field_label;
 
 				label = NULL;
 				field = fl->data;
@@ -1641,14 +1645,16 @@
 				}
 
 				type = purple_request_field_get_type(field);
-				field_label = purple_request_field_get_label(field);
+				field_label = pidgin_request_escape(cpar,
+					purple_request_field_get_label(field));
 
 				if (type != PURPLE_REQUEST_FIELD_BOOLEAN && field_label)
 				{
 					char *text = NULL;
 
 					if (field_label[strlen(field_label) - 1] != ':' &&
-						field_label[strlen(field_label) - 1] != '?')
+						field_label[strlen(field_label) - 1] != '?' &&
+						type != PURPLE_REQUEST_FIELD_LABEL)
 					{
 						text = g_strdup_printf("%s:", field_label);
 					}
@@ -1684,6 +1690,7 @@
 					}
 
 					gtk_widget_show(label);
+					g_free(field_label);
 				}
 
 				widget = GTK_WIDGET(purple_request_field_get_ui_data(field));
@@ -1694,7 +1701,7 @@
 					else if (type == PURPLE_REQUEST_FIELD_INTEGER)
 						widget = create_int_field(field);
 					else if (type == PURPLE_REQUEST_FIELD_BOOLEAN)
-						widget = create_bool_field(field);
+						widget = create_bool_field(field, cpar);
 					else if (type == PURPLE_REQUEST_FIELD_CHOICE)
 						widget = create_choice_field(field, cpar);
 					else if (type == PURPLE_REQUEST_FIELD_LIST)

mercurial