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."