Request API: help button support

Thu, 12 Sep 2013 16:47:08 +0200

author
Tomasz Wasilczyk <twasilczyk@pidgin.im>
date
Thu, 12 Sep 2013 16:47:08 +0200
changeset 34341
b23d9c0b64d5
parent 34340
0d20ac3015b4
child 34342
81f9da8e86e9

Request API: help button support

libpurple/request.c file | annotate | diff | comparison | revisions
libpurple/request.h file | annotate | diff | comparison | revisions
pidgin/gtkrequest.c file | annotate | diff | comparison | revisions
--- a/libpurple/request.c	Thu Sep 12 15:52:07 2013 +0200
+++ b/libpurple/request.c	Thu Sep 12 16:47:08 2013 +0200
@@ -162,11 +162,17 @@
 
 	PurpleAccount *account;
 	PurpleConversation *conv;
+
 	PurpleRequestIconType icon_type;
 	gconstpointer icon_data;
 	gsize icon_size;
+
 	gboolean html;
+
 	gboolean compact;
+
+	PurpleRequestHelpCb help_cb;
+	gpointer help_data;
 };
 
 PurpleRequestCommonParameters *
@@ -336,6 +342,8 @@
 purple_request_cpar_set_compact(PurpleRequestCommonParameters *cpar,
 	gboolean compact)
 {
+	g_return_if_fail(cpar != NULL);
+
 	cpar->compact = compact;
 }
 
@@ -348,6 +356,28 @@
 	return cpar->compact;
 }
 
+void
+purple_request_cpar_set_help_cb(PurpleRequestCommonParameters *cpar,
+	PurpleRequestHelpCb cb, gpointer user_data)
+{
+	g_return_if_fail(cpar != NULL);
+
+	cpar->help_cb = cb;
+	cpar->help_data = cb ? user_data : NULL;
+}
+
+PurpleRequestHelpCb
+purple_request_cpar_get_help_cb(PurpleRequestCommonParameters *cpar,
+	gpointer *user_data)
+{
+	if (cpar == NULL)
+		return NULL;
+
+	if (user_data != NULL)
+		*user_data = cpar->help_data;
+	return cpar->help_cb;
+}
+
 PurpleRequestFields *
 purple_request_fields_new(void)
 {
--- a/libpurple/request.h	Thu Sep 12 15:52:07 2013 +0200
+++ b/libpurple/request.h	Thu Sep 12 16:47:08 2013 +0200
@@ -168,6 +168,7 @@
 typedef void (*PurpleRequestChoiceCb)(void *, gpointer);
 typedef void (*PurpleRequestFieldsCb)(void *, PurpleRequestFields *fields);
 typedef void (*PurpleRequestFileCb)(void *, const char *filename);
+typedef void (*PurpleRequestHelpCb)(gpointer);
 
 G_BEGIN_DECLS
 
@@ -356,6 +357,28 @@
 gboolean
 purple_request_cpar_is_compact(PurpleRequestCommonParameters *cpar);
 
+/**
+ * Sets the callback for the Help button.
+ *
+ * @param cpar      The parameters set.
+ * @param cb        The callback.
+ * @param user_data The data to be passed to the callback.
+ */
+void
+purple_request_cpar_set_help_cb(PurpleRequestCommonParameters *cpar,
+	PurpleRequestHelpCb cb, gpointer user_data);
+
+/**
+ * Gets the callback for the Help button.
+ *
+ * @param cpar      The parameters set (may be @c NULL).
+ * @param user_data The pointer to the variable, where user data (to be passed
+ *                  to callback function) should be stored.
+ */
+PurpleRequestHelpCb
+purple_request_cpar_get_help_cb(PurpleRequestCommonParameters *cpar,
+	gpointer *user_data);
+
 /*@}*/
 
 /**************************************************************************/
--- a/pidgin/gtkrequest.c	Thu Sep 12 15:52:07 2013 +0200
+++ b/pidgin/gtkrequest.c	Thu Sep 12 16:47:08 2013 +0200
@@ -1381,6 +1381,18 @@
 	gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0);
 	gtk_widget_show(img);
 
+	/* Help button */
+	if (purple_request_cpar_get_help_cb(cpar, NULL) != NULL) {
+		PurpleRequestHelpCb help_cb;
+		gpointer help_data;
+
+		help_cb = purple_request_cpar_get_help_cb(cpar, &help_data);
+		g_assert(help_cb != NULL);
+
+		button = gtk_dialog_add_button(GTK_DIALOG(win), GTK_STOCK_HELP, GTK_RESPONSE_HELP);
+		g_signal_connect(G_OBJECT(button), "clicked", (GCallback)help_cb, help_data);
+	}
+
 	/* Cancel button */
 	button = pidgin_dialog_add_button(GTK_DIALOG(win), text_to_stock(cancel_text), G_CALLBACK(multifield_cancel_cb), data);
 	gtk_widget_set_can_default(button, TRUE);

mercurial