Mercurial > pidgin
diff pidgin/gtkutils.c @ 21402:9fef5d307a27
Create a PidginMiniDialog widget; make pidgin_make_mini_dialog() in gtkutils.c
a relatively thin wrapper around it.
author | Will Thompson <will.thompson@collabora.co.uk> |
---|---|
date | Sun, 04 Nov 2007 14:43:45 +0000 |
parents | d2bd7eae1c2c |
children | 7ea1f93cffe2 |
line wrap: on
line diff
--- a/pidgin/gtkutils.c Sat Nov 03 17:08:21 2007 +0000 +++ b/pidgin/gtkutils.c Sun Nov 04 14:43:45 2007 +0000 @@ -61,6 +61,7 @@ #include "pidginstock.h" #include "gtkthemes.h" #include "gtkutils.h" +#include "pidgin/minidialog.h" typedef struct { GtkWidget *menu; @@ -2908,6 +2909,22 @@ minidialogs = g_slist_remove(minidialogs, widget); } +struct _old_button_clicked_cb_data +{ + PidginUtilMiniDialogCallback cb; + gpointer data; +}; + +static void +old_mini_dialog_button_clicked_cb(PidginMiniDialog *mini_dialog, + GtkButton *button, + gpointer user_data) +{ + struct _old_button_clicked_cb_data *data = user_data; + data->cb(data->data, button); + g_free(data); +} + GtkWidget * pidgin_make_mini_dialog(PurpleConnection *gc, const char *icon_name, @@ -2916,83 +2933,37 @@ void *user_data, ...) { - GtkWidget *vbox; - GtkWidget *hbox; - GtkWidget *hbox2; - GtkWidget *label; - GtkWidget *button; - GtkWidget *img = NULL; - char label_text[2048]; + PidginMiniDialog *mini_dialog; const char *button_text; - GCallback callback; - char *primary_esc, *secondary_esc = NULL; va_list args; static gboolean first_call = TRUE; - img = gtk_image_new_from_stock(icon_name, gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL)); - gtk_misc_set_alignment(GTK_MISC(img), 0, 0); - - vbox = gtk_vbox_new(FALSE,0); - gtk_container_set_border_width(GTK_CONTAINER(vbox), PIDGIN_HIG_BOX_SPACE); - - g_object_set_data(G_OBJECT(vbox), "gc" ,gc); - minidialogs = g_slist_prepend(minidialogs, vbox); - g_signal_connect(G_OBJECT(vbox), "destroy", G_CALLBACK(alert_killed_cb), NULL); - if (first_call) { first_call = FALSE; purple_signal_connect(purple_connections_get_handle(), "signed-off", - pidgin_utils_get_handle(), - PURPLE_CALLBACK(connection_signed_off_cb), NULL); + pidgin_utils_get_handle(), + PURPLE_CALLBACK(connection_signed_off_cb), NULL); } - hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); - gtk_container_add(GTK_CONTAINER(vbox), hbox); - - if (img != NULL) - gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); - - primary_esc = g_markup_escape_text(primary, -1); - - if (secondary) - secondary_esc = g_markup_escape_text(secondary, -1); - g_snprintf(label_text, sizeof(label_text), - "<span weight=\"bold\" size=\"smaller\">%s</span>%s<span size=\"smaller\">%s</span>", - primary_esc, secondary ? "\n" : "", secondary_esc ? secondary_esc : ""); - g_free(primary_esc); - g_free(secondary_esc); - label = gtk_label_new(NULL); - gtk_widget_set_size_request(label, purple_prefs_get_int(PIDGIN_PREFS_ROOT "/blist/width")-25,-1); - gtk_label_set_markup(GTK_LABEL(label), label_text); - gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0); - gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0); - - hbox2 = gtk_hbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE, 0); + mini_dialog = pidgin_mini_dialog_new(primary, secondary, icon_name); + g_object_set_data(G_OBJECT(mini_dialog), "gc" ,gc); + g_signal_connect(G_OBJECT(mini_dialog), "destroy", + G_CALLBACK(alert_killed_cb), NULL); va_start(args, user_data); while ((button_text = va_arg(args, char*))) { - callback = va_arg(args, GCallback); - button = gtk_button_new(); - - if (callback) - g_signal_connect_swapped(G_OBJECT(button), "clicked", callback, user_data); - g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK(gtk_widget_destroy), vbox); - hbox = gtk_hbox_new(FALSE, 0); - gtk_container_add(GTK_CONTAINER(button), hbox); - gtk_container_set_border_width(GTK_CONTAINER(hbox), 0); - g_snprintf(label_text, sizeof(label_text), - "<span size=\"smaller\">%s</span>", button_text); - label = gtk_label_new(NULL); - gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), label_text); - gtk_misc_set_alignment(GTK_MISC(label), 0.5, 0.5); - gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0); - gtk_box_pack_end(GTK_BOX(hbox2), button, FALSE, FALSE, 0); + PidginUtilMiniDialogCallback callback = + va_arg(args, PidginUtilMiniDialogCallback); + struct _old_button_clicked_cb_data *data = + g_new0(struct _old_button_clicked_cb_data, 1); + data->cb = callback; + data->data = user_data; + pidgin_mini_dialog_add_button(mini_dialog, button_text, + old_mini_dialog_button_clicked_cb, data); } va_end(args); - return vbox; + return GTK_WIDGET(mini_dialog); } /*