Mercurial > pidgin
comparison pidgin/gtkutils.c @ 30358:c62fac7ada0d
Display the protocol icon for the authorization request dialog
instead of a question mark. Refs #5038.
The dialog is still pretty unusable, though. There should be either
a link to the user profile or a button to start a conversation (or maybe both),
but these seemingly trivial things were surprisingly tough to implement.
I think I'll return to this ticket at the end of the summer.
author | ivan.komarov@soc.pidgin.im |
---|---|
date | Wed, 26 May 2010 20:35:02 +0000 |
parents | 9e9c20b705d3 |
children | 6ee64d62c43c |
comparison
equal
deleted
inserted
replaced
30357:674a656893a3 | 30358:c62fac7ada0d |
---|---|
2609 g_free(cb_datas->data); | 2609 g_free(cb_datas->data); |
2610 cb_datas = g_list_delete_link(cb_datas, cb_datas); | 2610 cb_datas = g_list_delete_link(cb_datas, cb_datas); |
2611 } | 2611 } |
2612 } | 2612 } |
2613 | 2613 |
2614 static void | |
2615 mini_dialog_init(PidginMiniDialog *mini_dialog, PurpleConnection *gc, void *user_data, va_list args) | |
2616 { | |
2617 const char *button_text; | |
2618 GList *cb_datas = NULL; | |
2619 static gboolean first_call = TRUE; | |
2620 | |
2621 if (first_call) { | |
2622 first_call = FALSE; | |
2623 purple_signal_connect(purple_connections_get_handle(), "signed-off", | |
2624 pidgin_utils_get_handle(), | |
2625 PURPLE_CALLBACK(connection_signed_off_cb), NULL); | |
2626 } | |
2627 | |
2628 g_object_set_data(G_OBJECT(mini_dialog), "gc" ,gc); | |
2629 g_signal_connect(G_OBJECT(mini_dialog), "destroy", | |
2630 G_CALLBACK(alert_killed_cb), NULL); | |
2631 | |
2632 while ((button_text = va_arg(args, char*))) { | |
2633 struct _old_button_clicked_cb_data *data = NULL; | |
2634 PidginMiniDialogCallback wrapper_cb = NULL; | |
2635 PidginUtilMiniDialogCallback callback = | |
2636 va_arg(args, PidginUtilMiniDialogCallback); | |
2637 | |
2638 if (callback != NULL) { | |
2639 data = g_new0(struct _old_button_clicked_cb_data, 1); | |
2640 data->cb = callback; | |
2641 data->data = user_data; | |
2642 wrapper_cb = old_mini_dialog_button_clicked_cb; | |
2643 } | |
2644 pidgin_mini_dialog_add_button(mini_dialog, button_text, | |
2645 wrapper_cb, data); | |
2646 cb_datas = g_list_append(cb_datas, data); | |
2647 } | |
2648 | |
2649 g_signal_connect(G_OBJECT(mini_dialog), "destroy", | |
2650 G_CALLBACK(old_mini_dialog_destroy_cb), cb_datas); | |
2651 } | |
2652 | |
2653 #define INIT_AND_RETURN_MINI_DIALOG(mini_dialog) \ | |
2654 va_list args; \ | |
2655 va_start(args, user_data); \ | |
2656 mini_dialog_init(mini_dialog, gc, user_data, args); \ | |
2657 va_end(args); \ | |
2658 return GTK_WIDGET(mini_dialog); | |
2659 | |
2614 GtkWidget * | 2660 GtkWidget * |
2615 pidgin_make_mini_dialog(PurpleConnection *gc, | 2661 pidgin_make_mini_dialog(PurpleConnection *gc, |
2616 const char *icon_name, | 2662 const char *icon_name, |
2617 const char *primary, | 2663 const char *primary, |
2618 const char *secondary, | 2664 const char *secondary, |
2619 void *user_data, | 2665 void *user_data, |
2620 ...) | 2666 ...) |
2621 { | 2667 { |
2622 PidginMiniDialog *mini_dialog; | 2668 PidginMiniDialog *mini_dialog = pidgin_mini_dialog_new(primary, secondary, icon_name); |
2623 const char *button_text; | 2669 INIT_AND_RETURN_MINI_DIALOG(mini_dialog); |
2624 GList *cb_datas = NULL; | 2670 } |
2625 va_list args; | 2671 |
2626 static gboolean first_call = TRUE; | 2672 GtkWidget * |
2627 | 2673 pidgin_make_mini_dialog_with_custom_icon(PurpleConnection *gc, |
2628 if (first_call) { | 2674 GdkPixbuf *custom_icon, |
2629 first_call = FALSE; | 2675 const char *primary, |
2630 purple_signal_connect(purple_connections_get_handle(), "signed-off", | 2676 const char *secondary, |
2631 pidgin_utils_get_handle(), | 2677 void *user_data, |
2632 PURPLE_CALLBACK(connection_signed_off_cb), NULL); | 2678 ...) |
2633 } | 2679 { |
2634 | 2680 PidginMiniDialog *mini_dialog = pidgin_mini_dialog_new_with_custom_icon(primary, secondary, custom_icon); |
2635 mini_dialog = pidgin_mini_dialog_new(primary, secondary, icon_name); | 2681 INIT_AND_RETURN_MINI_DIALOG(mini_dialog); |
2636 g_object_set_data(G_OBJECT(mini_dialog), "gc" ,gc); | |
2637 g_signal_connect(G_OBJECT(mini_dialog), "destroy", | |
2638 G_CALLBACK(alert_killed_cb), NULL); | |
2639 | |
2640 va_start(args, user_data); | |
2641 while ((button_text = va_arg(args, char*))) { | |
2642 struct _old_button_clicked_cb_data *data = NULL; | |
2643 PidginMiniDialogCallback wrapper_cb = NULL; | |
2644 PidginUtilMiniDialogCallback callback = | |
2645 va_arg(args, PidginUtilMiniDialogCallback); | |
2646 | |
2647 if (callback != NULL) { | |
2648 data = g_new0(struct _old_button_clicked_cb_data, 1); | |
2649 data->cb = callback; | |
2650 data->data = user_data; | |
2651 wrapper_cb = old_mini_dialog_button_clicked_cb; | |
2652 } | |
2653 pidgin_mini_dialog_add_button(mini_dialog, button_text, | |
2654 wrapper_cb, data); | |
2655 cb_datas = g_list_append(cb_datas, data); | |
2656 } | |
2657 va_end(args); | |
2658 | |
2659 g_signal_connect(G_OBJECT(mini_dialog), "destroy", | |
2660 G_CALLBACK(old_mini_dialog_destroy_cb), cb_datas); | |
2661 | |
2662 return GTK_WIDGET(mini_dialog); | |
2663 } | 2682 } |
2664 | 2683 |
2665 /* | 2684 /* |
2666 * "This is so dead sexy." | 2685 * "This is so dead sexy." |
2667 * "Two thumbs up." | 2686 * "Two thumbs up." |