| 824 /* Setup the main horizontal box */ |
849 /* Setup the main horizontal box */ |
| 825 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); |
850 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); |
| 826 gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), |
851 gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), |
| 827 hbox); |
852 hbox); |
| 828 |
853 |
| 829 img = pidgin_request_dialog_icon(cpar); |
854 img = pidgin_request_dialog_icon(PURPLE_REQUEST_ACTION, cpar); |
| 830 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); |
855 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); |
| 831 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); |
856 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); |
| 832 |
857 |
| 833 /* Vertical box */ |
858 /* Vertical box */ |
| 834 vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER); |
859 vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER); |
| 877 pidgin_auto_parent_window(dialog); |
902 pidgin_auto_parent_window(dialog); |
| 878 |
903 |
| 879 gtk_widget_show_all(dialog); |
904 gtk_widget_show_all(dialog); |
| 880 |
905 |
| 881 return data; |
906 return data; |
| |
907 } |
| |
908 |
| |
909 static void |
| |
910 wait_cancel_cb(GtkWidget *button, PidginRequestData *data) |
| |
911 { |
| |
912 generic_response_start(data); |
| |
913 |
| |
914 if (data->cbs[0] != NULL) |
| |
915 ((PurpleRequestCancelCb)data->cbs[0])(data->user_data); |
| |
916 |
| |
917 purple_request_close(PURPLE_REQUEST_FIELDS, data); |
| |
918 } |
| |
919 |
| |
920 static void * |
| |
921 pidgin_request_wait(const char *title, const char *primary, |
| |
922 const char *secondary, gboolean with_progress, |
| |
923 PurpleRequestCancelCb cancel_cb, PurpleRequestCommonParameters *cpar, |
| |
924 void *user_data) |
| |
925 { |
| |
926 PidginRequestData *data; |
| |
927 GtkWidget *dialog; |
| |
928 GtkWidget *hbox, *vbox, *img, *label, *button; |
| |
929 gchar *primary_esc, *secondary_esc, *label_text; |
| |
930 |
| |
931 data = g_new0(PidginRequestData, 1); |
| |
932 data->type = PURPLE_REQUEST_WAIT; |
| |
933 data->user_data = user_data; |
| |
934 |
| |
935 data->cb_count = 1; |
| |
936 data->cbs = g_new0(GCallback, 1); |
| |
937 data->cbs[0] = (GCallback)cancel_cb; |
| |
938 |
| |
939 data->dialog = dialog = gtk_dialog_new(); |
| |
940 |
| |
941 gtk_window_set_deletable(GTK_WINDOW(data->dialog), cancel_cb != NULL); |
| |
942 |
| |
943 if (title != NULL) |
| |
944 gtk_window_set_title(GTK_WINDOW(dialog), title); |
| |
945 else |
| |
946 gtk_window_set_title(GTK_WINDOW(dialog), _("Please wait")); |
| |
947 |
| |
948 /* Setup the dialog */ |
| |
949 gtk_container_set_border_width(GTK_CONTAINER(dialog), |
| |
950 PIDGIN_HIG_BORDER / 2); |
| |
951 gtk_container_set_border_width(GTK_CONTAINER( |
| |
952 gtk_dialog_get_content_area(GTK_DIALOG(dialog))), |
| |
953 PIDGIN_HIG_BORDER / 2); |
| |
954 gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); |
| |
955 gtk_box_set_spacing(GTK_BOX(gtk_dialog_get_content_area( |
| |
956 GTK_DIALOG(dialog))), PIDGIN_HIG_BORDER); |
| |
957 |
| |
958 /* Setup the main horizontal box */ |
| |
959 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); |
| |
960 gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area( |
| |
961 GTK_DIALOG(dialog))), hbox); |
| |
962 |
| |
963 img = pidgin_request_dialog_icon(PURPLE_REQUEST_WAIT, cpar); |
| |
964 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); |
| |
965 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); |
| |
966 |
| |
967 /* Cancel button */ |
| |
968 button = pidgin_dialog_add_button(GTK_DIALOG(dialog), |
| |
969 text_to_stock(_("Cancel")), G_CALLBACK(wait_cancel_cb), data); |
| |
970 gtk_widget_set_can_default(button, FALSE); |
| |
971 |
| |
972 /* Vertical box */ |
| |
973 vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER); |
| |
974 gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); |
| |
975 |
| |
976 pidgin_widget_decorate_account(hbox, |
| |
977 purple_request_cpar_get_account(cpar)); |
| |
978 |
| |
979 pidgin_request_add_help(GTK_DIALOG(dialog), cpar); |
| |
980 |
| |
981 /* Descriptive label */ |
| |
982 primary_esc = pidgin_request_escape(cpar, primary); |
| |
983 secondary_esc = pidgin_request_escape(cpar, secondary); |
| |
984 label_text = g_strdup_printf((primary ? "<span weight=\"bold\" " |
| |
985 "size=\"larger\">%s</span>%s%s" : "%s%s%s"), |
| |
986 (primary ? primary_esc : ""), |
| |
987 ((primary && secondary) ? "\n\n" : ""), |
| |
988 (secondary ? secondary_esc : "")); |
| |
989 g_free(primary_esc); |
| |
990 g_free(secondary_esc); |
| |
991 |
| |
992 label = gtk_label_new(NULL); |
| |
993 |
| |
994 gtk_label_set_markup(GTK_LABEL(label), label_text); |
| |
995 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); |
| |
996 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); |
| |
997 gtk_label_set_selectable(GTK_LABEL(label), FALSE); |
| |
998 gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0); |
| |
999 |
| |
1000 g_free(label_text); |
| |
1001 |
| |
1002 if (with_progress) { |
| |
1003 GtkProgressBar *bar; |
| |
1004 |
| |
1005 bar = data->u.wait.progress_bar = |
| |
1006 GTK_PROGRESS_BAR(gtk_progress_bar_new()); |
| |
1007 gtk_progress_bar_set_fraction(bar, 0); |
| |
1008 gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(bar), |
| |
1009 FALSE, FALSE, 0); |
| |
1010 } |
| |
1011 |
| |
1012 /* Move focus out of cancel button. */ |
| |
1013 gtk_widget_set_can_default(img, TRUE); |
| |
1014 gtk_widget_set_can_focus(img, TRUE); |
| |
1015 gtk_widget_grab_focus(img); |
| |
1016 gtk_widget_grab_default(img); |
| |
1017 |
| |
1018 /* Show everything. */ |
| |
1019 pidgin_auto_parent_window(dialog); |
| |
1020 |
| |
1021 gtk_widget_show_all(dialog); |
| |
1022 |
| |
1023 return data; |
| |
1024 } |
| |
1025 |
| |
1026 static void |
| |
1027 pidgin_request_wait_update(void *ui_handle, gboolean pulse, gfloat fraction) |
| |
1028 { |
| |
1029 GtkProgressBar *bar; |
| |
1030 PidginRequestData *data = ui_handle; |
| |
1031 |
| |
1032 g_return_if_fail(data->type == PURPLE_REQUEST_WAIT); |
| |
1033 |
| |
1034 bar = data->u.wait.progress_bar; |
| |
1035 if (pulse) |
| |
1036 gtk_progress_bar_pulse(bar); |
| |
1037 else |
| |
1038 gtk_progress_bar_set_fraction(bar, fraction); |
| 882 } |
1039 } |
| 883 |
1040 |
| 884 static void |
1041 static void |
| 885 req_entry_field_changed_cb(GtkWidget *entry, PurpleRequestField *field) |
1042 req_entry_field_changed_cb(GtkWidget *entry, PurpleRequestField *field) |
| 886 { |
1043 { |
| 1456 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); |
1613 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); |
| 1457 gtk_container_add(GTK_CONTAINER(pidgin_dialog_get_vbox(GTK_DIALOG(win))), hbox); |
1614 gtk_container_add(GTK_CONTAINER(pidgin_dialog_get_vbox(GTK_DIALOG(win))), hbox); |
| 1458 gtk_widget_show(hbox); |
1615 gtk_widget_show(hbox); |
| 1459 |
1616 |
| 1460 /* Dialog icon. */ |
1617 /* Dialog icon. */ |
| 1461 img = pidgin_request_dialog_icon(cpar); |
1618 img = pidgin_request_dialog_icon(PURPLE_REQUEST_FIELDS, cpar); |
| 1462 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); |
1619 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); |
| 1463 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); |
1620 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); |
| 1464 gtk_widget_show(img); |
1621 gtk_widget_show(img); |
| 1465 |
1622 |
| 1466 pidgin_request_add_help(GTK_DIALOG(win), cpar); |
1623 pidgin_request_add_help(GTK_DIALOG(win), cpar); |