--- a/ChangeLog.API Thu Jul 22 22:32:11 2021 -0500
+++ b/ChangeLog.API Thu Jul 22 22:33:54 2021 -0500
@@ -670,6 +670,9 @@
* PALETTE_NUM_COLORS renamed to PIDGIN_PALETTE_NUM_COLORS
* pidgin_account_option_menu_* renamed to
+ * pidgin_make_mini_dialog renamed to + pidgin_mini_dialog_new_with_buttons; note the argument order + has changed to match pidgin_mini_dialog_new * pidgin_new_item_from_stock renamed to pidgin_new_menu_item and
removed the accel related parameters.
* pidgin_setup_screenname_autocomplete now takes a filter function and
@@ -750,6 +753,8 @@
* pidgin_create_window, use pidgin_window_new instead.
* pidgin_dialogs_alias_contact
+ * pidgin_make_mini_dialog_with_custom_icon; use + pidgin_mini_dialog_new_with_custom_icon instead. * pidgin_make_pretty_arrows
* pidgin_menu_position_func_helper
* pidgin_mini_dialog_links_supported
@@ -796,6 +801,8 @@
* pidgin_tooltip_setup_for_widget
+ * PidginUtilMiniDialogCallback; use PidginMiniDialogCallback * struct _GtkIMHtmlAnimation
* struct _GtkIMHtmlFontDetail
--- a/pidgin/gtkaccount.c Thu Jul 22 22:32:11 2021 -0500
+++ b/pidgin/gtkaccount.c Thu Jul 22 22:33:54 2021 -0500
@@ -2422,16 +2422,21 @@
-free_add_user_data(PidginAccountAddUserData *data)
+free_add_user_data(G_GNUC_UNUSED PidginMiniDialog *mini_dialog, + G_GNUC_UNUSED GtkButton *button, + PidginAccountAddUserData *data = user_data; -add_user_cb(PidginAccountAddUserData *data)
+add_user_cb(G_GNUC_UNUSED PidginMiniDialog *mini_dialog, + G_GNUC_UNUSED GtkButton *button, gpointer user_data) + PidginAccountAddUserData *data = user_data; PurpleConnection *gc = purple_account_get_connection(data->account);
if (g_list_find(purple_connections_get_all(), gc))
@@ -2440,7 +2445,7 @@
- free_add_user_data(data);
+ free_add_user_data(NULL, NULL, user_data); @@ -2476,8 +2481,9 @@
gc = purple_account_get_connection(account);
buffer = make_info(account, gc, remote_user, id, alias, msg);
- alert = pidgin_make_mini_dialog(gc, "dialog-information", buffer,
- NULL, NULL, _("Close"), NULL, NULL);
+ alert = pidgin_mini_dialog_new_with_buttons( + buffer, NULL, "dialog-information", NULL, + _("Close"), NULL, NULL); pidgin_blist_add_alert(alert);
@@ -2501,10 +2507,9 @@
data->alias = g_strdup(alias);
buffer = make_info(account, gc, remote_user, id, alias, msg);
- alert = pidgin_make_mini_dialog(gc, "dialog-question",
- _("Add buddy to your list?"), buffer, data,
- _("Add"), G_CALLBACK(add_user_cb),
- _("Cancel"), G_CALLBACK(free_add_user_data), NULL);
+ alert = pidgin_mini_dialog_new_with_buttons( + _("Add buddy to your list?"), buffer, "dialog-question", data, + _("Add"), add_user_cb, _("Cancel"), free_add_user_data, NULL); pidgin_blist_add_alert(alert);
@@ -2545,8 +2550,10 @@
-authorize_reason_cb(struct auth_request *ar)
+authorize_reason_cb(G_GNUC_UNUSED PidginMiniDialog *mini_dialog, + G_GNUC_UNUSED GtkButton *button, gpointer user_data) + struct auth_request *ar = user_data; PurpleProtocol *protocol = purple_account_get_protocol(ar->account);
if (protocol && (purple_protocol_get_options(protocol) & OPT_PROTO_AUTHORIZATION_GRANTED_MESSAGE)) {
@@ -2584,8 +2591,10 @@
-deny_reason_cb(struct auth_request *ar)
+deny_reason_cb(G_GNUC_UNUSED PidginMiniDialog *mini_dialog, + G_GNUC_UNUSED GtkButton *button, gpointer user_data) + struct auth_request *ar = user_data; PurpleProtocol *protocol = purple_account_get_protocol(ar->account);
if (protocol && (purple_protocol_get_options(protocol) & OPT_PROTO_AUTHORIZATION_DENIED_MESSAGE)) {
@@ -2621,8 +2630,8 @@
-send_im_cb(PidginMiniDialog *mini_dialog,
+send_im_cb(G_GNUC_UNUSED PidginMiniDialog *mini_dialog, + G_GNUC_UNUSED GtkButton *button, struct auth_request *ar = data;
@@ -2694,17 +2703,15 @@
aa->add_buddy_after_auth = !on_list;
- alert = pidgin_make_mini_dialog_with_custom_icon(
- _("Authorize buddy?"), NULL, aa,
- _("Authorize"), authorize_reason_cb,
- _("Deny"), deny_reason_cb,
- dialog = PIDGIN_MINI_DIALOG(alert);
+ dialog = pidgin_mini_dialog_new_with_custom_icon( + _("Authorize buddy?"), NULL, protocol_icon); + alert = GTK_WIDGET(dialog); pidgin_mini_dialog_enable_description_markup(dialog);
pidgin_mini_dialog_set_link_callback(dialog, G_CALLBACK(get_user_info_cb), aa);
pidgin_mini_dialog_set_description(dialog, buffer);
+ pidgin_mini_dialog_add_button(dialog, _("Authorize"), authorize_reason_cb, aa); + pidgin_mini_dialog_add_button(dialog, _("Deny"), deny_reason_cb, aa); pidgin_mini_dialog_add_non_closing_button(dialog, _("Send Instant Message"), send_im_cb, aa);
g_signal_connect_swapped(G_OBJECT(alert), "destroy", G_CALLBACK(free_auth_request), aa);
--- a/pidgin/gtkblist.c Thu Jul 22 22:32:11 2021 -0500
+++ b/pidgin/gtkblist.c Thu Jul 22 22:33:54 2021 -0500
@@ -4266,15 +4266,30 @@
/* Generic error buttons */
-generic_error_modify_cb(PurpleAccount *account)
+generic_account_connect_cb(G_GNUC_UNUSED PidginMiniDialog *mini_dialog, + G_GNUC_UNUSED GtkButton *button, + PurpleAccount *account = user_data; + purple_account_connect(account); +generic_error_modify_cb(G_GNUC_UNUSED PidginMiniDialog *mini_dialog, + G_GNUC_UNUSED GtkButton *button, + PurpleAccount *account = user_data; purple_account_clear_current_error(account);
pidgin_account_dialog_show(PIDGIN_MODIFY_ACCOUNT_DIALOG, account);
-generic_error_enable_cb(PurpleAccount *account)
+generic_error_enable_cb(G_GNUC_UNUSED PidginMiniDialog *mini_dialog, + G_GNUC_UNUSED GtkButton *button, + PurpleAccount *account = user_data; purple_account_clear_current_error(account);
purple_account_set_enabled(account, purple_core_get_ui(), TRUE);
@@ -4316,12 +4331,11 @@
primary = g_strdup_printf(_("%s disabled"), username);
- mini_dialog = pidgin_make_mini_dialog(NULL, "dialog-error",
- primary, err->description, account,
- (enabled ? _("Reconnect") : _("Re-enable")),
- (enabled ? PURPLE_CALLBACK(purple_account_connect)
- : PURPLE_CALLBACK(generic_error_enable_cb)),
- _("Modify Account"), PURPLE_CALLBACK(generic_error_modify_cb),
+ mini_dialog = pidgin_mini_dialog_new_with_buttons( + primary, err->description, "dialog-error", account, + enabled ? _("Reconnect") : _("Re-enable"), + enabled ? generic_account_connect_cb : generic_error_enable_cb, + _("Modify Account"), generic_error_modify_cb, --- a/pidgin/gtkutils.c Thu Jul 22 22:32:11 2021 -0500
+++ b/pidgin/gtkutils.c Thu Jul 22 22:33:54 2021 -0500
@@ -110,18 +110,11 @@
-struct _old_button_clicked_cb_data
- PidginUtilMiniDialogCallback cb;
/******************************************************************************
*****************************************************************************/
static guint accels_save_timer = 0;
-static GSList *minidialogs = NULL;
/******************************************************************************
@@ -1687,116 +1680,6 @@
-pidgin_utils_get_handle(void)
-static void connection_signed_off_cb(PurpleConnection *gc)
- for (list = minidialogs; list; list = l_next) {
- if (g_object_get_data(G_OBJECT(list->data), "gc") == gc) {
- gtk_widget_destroy(GTK_WIDGET(list->data));
-static void alert_killed_cb(GtkWidget *widget)
- minidialogs = g_slist_remove(minidialogs, widget);
-old_mini_dialog_button_clicked_cb(PidginMiniDialog *mini_dialog,
- struct _old_button_clicked_cb_data *data = user_data;
- data->cb(data->data, button);
-old_mini_dialog_destroy_cb(GtkWidget *dialog,
- g_list_free_full(cb_datas, g_free);
-mini_dialog_init(PidginMiniDialog *mini_dialog, PurpleConnection *gc, void *user_data, va_list args)
- const char *button_text;
- GList *cb_datas = NULL;
- static gboolean first_call = TRUE;
- purple_signal_connect(purple_connections_get_handle(), "signed-off",
- pidgin_utils_get_handle(),
- PURPLE_CALLBACK(connection_signed_off_cb), NULL);
- g_object_set_data(G_OBJECT(mini_dialog), "gc" ,gc);
- g_signal_connect(G_OBJECT(mini_dialog), "destroy",
- G_CALLBACK(alert_killed_cb), NULL);
- while ((button_text = va_arg(args, char*))) {
- struct _old_button_clicked_cb_data *data = NULL;
- PidginMiniDialogCallback wrapper_cb = NULL;
- PidginUtilMiniDialogCallback callback =
- va_arg(args, PidginUtilMiniDialogCallback);
- if (callback != NULL) {
- data = g_new0(struct _old_button_clicked_cb_data, 1);
- data->data = user_data;
- wrapper_cb = old_mini_dialog_button_clicked_cb;
- pidgin_mini_dialog_add_button(mini_dialog, button_text,
- cb_datas = g_list_append(cb_datas, data);
- g_signal_connect(G_OBJECT(mini_dialog), "destroy",
- G_CALLBACK(old_mini_dialog_destroy_cb), cb_datas);
-#define INIT_AND_RETURN_MINI_DIALOG(mini_dialog) \
- va_start(args, user_data); \
- mini_dialog_init(mini_dialog, gc, user_data, args); \
- return GTK_WIDGET(mini_dialog);
-pidgin_make_mini_dialog(PurpleConnection *gc,
- PidginMiniDialog *mini_dialog = pidgin_mini_dialog_new(primary, secondary, icon_name);
- INIT_AND_RETURN_MINI_DIALOG(mini_dialog);
-pidgin_make_mini_dialog_with_custom_icon(PurpleConnection *gc,
- GdkPixbuf *custom_icon,
- PidginMiniDialog *mini_dialog = pidgin_mini_dialog_new_with_custom_icon(primary, secondary, custom_icon);
- INIT_AND_RETURN_MINI_DIALOG(mini_dialog);
* "This is so dead sexy."
--- a/pidgin/gtkutils.h Thu Jul 22 22:32:11 2021 -0500
+++ b/pidgin/gtkutils.h Thu Jul 22 22:33:54 2021 -0500
@@ -416,73 +416,6 @@
gpointer pidgin_convert_buddy_icon(PurpleProtocol *protocol, const char *path, size_t *len);
- * PidginUtilMiniDialogCallback:
- * The type of callbacks passed to pidgin_make_mini_dialog().
-typedef void (*PidginUtilMiniDialogCallback)(gpointer user_data, GtkButton *button);
- * pidgin_make_mini_dialog:
- * @handle: The #PurpleConnection to which this mini-dialog
- * refers, or %NULL if it does not refer to a
- * connection. If @handle is supplied, the mini-dialog
- * will be automatically removed and destroyed when the
- * connection signs off.
- * @stock_id: The ID of a stock image to use in the mini dialog.
- * @primary: The primary text
- * @secondary: The secondary text, or %NULL for no description.
- * @user_data: Data to pass to the callbacks
- * @...: a %NULL-terminated list of button labels
- * (<type>char *</type>) and callbacks
- * (#PidginUtilMiniDialogCallback). @user_data will be
- * passed as the first argument. (Callbacks may lack a
- * second argument, or be %NULL to take no action when
- * the corresponding button is pressed.) When a button is
- * pressed, the callback (if any) will be called; when
- * the callback returns the dialog will be destroyed.
- * Creates a #PidginMiniDialog, tied to a #PurpleConnection, suitable for
- * embedding in the buddy list scrollbook with pidgin_blist_add_alert().
- * See <link linkend="pidgin-pidginstock">Stock Resources</link>.
- * Returns: (transfer full): A #PidginMiniDialog, suitable for passing to
- * pidgin_blist_add_alert().
-GtkWidget *pidgin_make_mini_dialog(PurpleConnection *handle,
- const char* stock_id, const char *primary, const char *secondary,
- void *user_data, ...) G_GNUC_NULL_TERMINATED;
- * pidgin_make_mini_dialog_with_custom_icon:
- * @custom_icon: A custom GdkPixbuf to use.
- * @primary: The primary text
- * @secondary: The secondary text, or %NULL for no description.
- * @user_data: Data to pass to the callbacks
- * @...: a %NULL-terminated list of button labels
- * (<type>char *</type>) and callbacks
- * (#PidginUtilMiniDialogCallback). @user_data will be
- * passed as the first argument. (Callbacks may lack a
- * second argument, or be %NULL to take no action when
- * the corresponding button is pressed.) When a button is
- * pressed, the callback (if any) will be called; when
- * the callback returns the dialog will be destroyed.
- * Does exactly what pidgin_make_mini_dialog() does, except you can specify
- * a custom icon for the dialog.
- * Returns: (transfer full): A #PidginMiniDialog, suitable for passing to
- * pidgin_blist_add_alert().
-GtkWidget *pidgin_make_mini_dialog_with_custom_icon(PurpleConnection *gc,
- GdkPixbuf *custom_icon,
- ...) G_GNUC_NULL_TERMINATED;
* pidgin_tree_view_search_equal_func:
* This is a callback function to be used for Ctrl+F searching in treeviews.
--- a/pidgin/minidialog.c Thu Jul 22 22:32:11 2021 -0500
+++ b/pidgin/minidialog.c Thu Jul 22 22:33:54 2021 -0500
@@ -379,6 +379,31 @@
+pidgin_mini_dialog_new_with_buttons(const gchar *title, + const gchar *description, + const gchar *icon_name, gpointer user_data, + PidginMiniDialog *mini_dialog = NULL; + const gchar *button_text = NULL; + mini_dialog = pidgin_mini_dialog_new(title, description, icon_name); + va_start(args, user_data); + while ((button_text = va_arg(args, gchar *)) != NULL) { + PidginMiniDialogCallback callback = + va_arg(args, PidginMiniDialogCallback); + pidgin_mini_dialog_add_button(mini_dialog, button_text, callback, + return GTK_WIDGET(mini_dialog); pidgin_mini_dialog_set_title(PidginMiniDialog *mini_dialog, const gchar *title)
--- a/pidgin/minidialog.h Thu Jul 22 22:32:11 2021 -0500
+++ b/pidgin/minidialog.h Thu Jul 22 22:33:54 2021 -0500
@@ -124,6 +124,32 @@
const gchar *description, GdkPixbuf *custom_icon);
+ * pidgin_mini_dialog_new_with_buttons: + * @title: The primary text. + * @description: The secondary text, or %NULL for no description. + * @icon_name: The name of an icon to use in the mini dialog. + * @user_data: Data to pass to the callbacks. + * @...: A %NULL-terminated list of button labels (<type>char *</type>) and + * callbacks (#PidginMiniDialogCallback). (Callbacks may be %NULL to + * take no action when the corresponding button is pressed.) When a + * button is pressed, the callback (if any) will be called; when the + * callback returns the dialog will be destroyed. + * Creates a #PidginMiniDialog, suitable for embedding in the buddy list + * scrollbook with pidgin_blist_add_alert(). + * Returns: (transfer full): A #PidginMiniDialog, suitable for passing to + * pidgin_blist_add_alert(). +GtkWidget *pidgin_mini_dialog_new_with_buttons(const gchar *title, + const gchar *description, + const gchar *icon_name, + gpointer user_data, ...) + G_GNUC_NULL_TERMINATED; * pidgin_mini_dialog_set_title:
* @mini_dialog: a mini-dialog
* @title: the new title for @mini_dialog
--- a/pidgin/plugins/relnot.c Thu Jul 22 22:32:11 2021 -0500
+++ b/pidgin/plugins/relnot.c Thu Jul 22 22:33:54 2021 -0500
@@ -34,14 +34,18 @@
#define MIN_CHECK_INTERVAL 60 * 60 * 24
+release_hide(G_GNUC_UNUSED PidginMiniDialog *mini_dialog, + G_GNUC_UNUSED GtkButton *button, + G_GNUC_UNUSED gpointer user_data) /* No-op. We may use this method in the future to avoid showing
+release_show(G_GNUC_UNUSED PidginMiniDialog *mini_dialog, + G_GNUC_UNUSED GtkButton *button, + G_GNUC_UNUSED gpointer user_data) purple_notify_uri(NULL, PURPLE_WEBSITE);
@@ -77,14 +81,9 @@
g_string_append_printf(message, _("You can upgrade to %s %s today."),
- release_dialog = pidgin_make_mini_dialog(
- NULL, "dialog-information",
- _("New Version Available"),
- _("Later"), PURPLE_CALLBACK(release_hide),
- _("Download Now"), PURPLE_CALLBACK(release_show),
+ release_dialog = pidgin_mini_dialog_new_with_buttons( + _("New Version Available"), message->str, "dialog-information", NULL, + _("Later"), release_hide, _("Download Now"), release_show, NULL); pidgin_blist_add_alert(release_dialog);