pidgin/gtkdialogs.c

branch
next.minor
changeset 29529
b98e0b2e81ad
parent 28621
e9f7747ff365
parent 29528
c2a83193c0c8
child 29530
252b84468a95
equal deleted inserted replaced
28621:e9f7747ff365 29529:b98e0b2e81ad
45 #include "pidginstock.h" 45 #include "pidginstock.h"
46 46
47 static GList *dialogwindows = NULL; 47 static GList *dialogwindows = NULL;
48 48
49 static GtkWidget *about = NULL; 49 static GtkWidget *about = NULL;
50 static GtkWidget *buildinfo = NULL;
51 static GtkWidget *developer_info = NULL;
52 static GtkWidget *translator_info = NULL;
50 53
51 struct _PidginGroupMergeObject { 54 struct _PidginGroupMergeObject {
52 PurpleGroup* parent; 55 PurpleGroup* parent;
53 char *new_name; 56 char *new_name;
54 }; 57 };
349 gtk_widget_destroy(dialogwindows->data); 352 gtk_widget_destroy(dialogwindows->data);
350 dialogwindows = g_list_remove(dialogwindows, dialogwindows->data); 353 dialogwindows = g_list_remove(dialogwindows, dialogwindows->data);
351 } 354 }
352 } 355 }
353 356
357 static void destroy_developer_info(void)
358 {
359 if (developer_info != NULL)
360 gtk_widget_destroy(developer_info);
361 developer_info = NULL;
362 }
363
364 static void destroy_translator_info(void)
365 {
366 if (translator_info != NULL)
367 gtk_widget_destroy(translator_info);
368 translator_info = NULL;
369 }
370
371 static void destroy_buildinfo(void)
372 {
373 if (buildinfo != NULL)
374 gtk_widget_destroy(buildinfo);
375 buildinfo = NULL;
376 }
377
354 static void destroy_about(void) 378 static void destroy_about(void)
355 { 379 {
356 if (about != NULL) 380 if (about != NULL)
357 gtk_widget_destroy(about); 381 gtk_widget_destroy(about);
358 about = NULL; 382 about = NULL;
418 } 442 }
419 443
420 tmp = g_strdup_printf(_("About %s"), PIDGIN_NAME); 444 tmp = g_strdup_printf(_("About %s"), PIDGIN_NAME);
421 about = pidgin_create_dialog(tmp, PIDGIN_HIG_BORDER, "about", TRUE); 445 about = pidgin_create_dialog(tmp, PIDGIN_HIG_BORDER, "about", TRUE);
422 g_free(tmp); 446 g_free(tmp);
423 gtk_window_set_default_size(GTK_WINDOW(about), 340, 450); 447 gtk_window_set_default_size(GTK_WINDOW(about), 450, 450);
424 448
425 vbox = pidgin_dialog_get_vbox_with_properties(GTK_DIALOG(about), FALSE, PIDGIN_HIG_BORDER); 449 vbox = pidgin_dialog_get_vbox_with_properties(GTK_DIALOG(about), FALSE, PIDGIN_HIG_BORDER);
426 450
427 /* Generate a logo with a version number */ 451 /* Generate a logo with a version number */
428 logo = gtk_window_new(GTK_WINDOW_TOPLEVEL); 452 logo = gtk_window_new(GTK_WINDOW_TOPLEVEL);
448 gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0); 472 gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0);
449 473
450 str = g_string_sized_new(4096); 474 str = g_string_sized_new(4096);
451 475
452 g_string_append_printf(str, 476 g_string_append_printf(str,
453 "<CENTER><FONT SIZE=\"4\"><B>%s %s</B></FONT></CENTER><BR>(libpurple %s)<BR>%s<BR><BR>", PIDGIN_NAME, DISPLAY_VERSION, purple_core_get_version(), REVISION); 477 "<CENTER><FONT SIZE=\"4\"><B>%s %s</B></FONT></CENTER> (libpurple %s)"
478 "<BR>%s<BR><BR>", PIDGIN_NAME, DISPLAY_VERSION,
479 purple_core_get_version(), REVISION);
454 480
455 g_string_append_printf(str, 481 g_string_append_printf(str,
456 _("%s is a graphical modular messaging client based on " 482 _("%s is a messaging client based on libpurple which is capable of "
457 "libpurple which is capable of connecting to " 483 "connecting to multiple messaging services at once. %s is written "
458 "AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, SIP/SIMPLE, " 484 "in C using GTK+. %s is released, and may be modified and "
459 "Novell GroupWise, Lotus Sametime, Bonjour, Zephyr, " 485 "redistributed, under the terms of the GPL version 2 (or later). "
460 "MySpaceIM, Gadu-Gadu, and QQ all at once. " 486 "A copy of the GPL is distributed with %s. %s is copyrighted by "
461 "It is written using GTK+.<BR><BR>" 487 "its contributors, a list of whom is also distributed with %s. "
462 "You may modify and redistribute the program under " 488 "There is no warranty for %s.<BR><BR>"), PIDGIN_NAME, PIDGIN_NAME,
463 "the terms of the GPL (version 2 or later). A copy of the GPL is " 489 PIDGIN_NAME, PIDGIN_NAME, PIDGIN_NAME, PIDGIN_NAME, PIDGIN_NAME);
464 "contained in the 'COPYING' file distributed with %s. " 490
465 "%s is copyrighted by its contributors. See the 'COPYRIGHT' "
466 "file for the complete list of contributors. We provide no "
467 "warranty for this program.<BR><BR>"), PIDGIN_NAME, PIDGIN_NAME, PIDGIN_NAME);
468
469 g_string_append(str, "<FONT SIZE=\"4\">URL:</FONT> <A HREF=\""
470 PURPLE_WEBSITE "\">" PURPLE_WEBSITE "</A><BR/><BR/>");
471 g_string_append_printf(str, _("<FONT SIZE=\"4\">FAQ:</FONT> <A HREF=\""
472 "http://developer.pidgin.im/wiki/FAQ\">"
473 "http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>"));
474 g_string_append_printf(str, 491 g_string_append_printf(str,
475 _("<font size=\"4\">Help from other Pidgin users:</font> " 492 _("<FONT SIZE=\"4\"><B>Helpful Resources</B></FONT><BR>\t<A "
476 "<a href=\"mailto:support@pidgin.im\">support@pidgin.im</a><br/>" 493 "HREF=\"%s\">Website</A><BR>\t<A HREF=\"%s\">Frequently Asked "
477 "This is a <b>public</b> mailing list! " 494 "Questions</A><BR>\tIRC Channel: #pidgin on irc.freenode.net<BR>"
478 "(<a href=\"http://pidgin.im/pipermail/support/\">archive</a>)<br/>" 495 "\tXMPP MUC: devel@conference.pidgin.im<BR><BR>"), PURPLE_WEBSITE,
479 "We can't help with 3rd party protocols or plugins!<br/>" 496 "http://developer.pidgin.im/wiki/FAQ");
480 "This list's primary language is <b>English</b>. You are " 497
481 "welcome to post in another language, but the responses may " 498 g_string_append_printf(str,
482 "be less helpful.<br/><br/>")); 499 _("<font size=\"4\"><b>Help from other Pidgin users</b></font> is "
483 g_string_append_printf(str, _("<FONT SIZE=\"4\">IRC Channel:</FONT> " 500 "available by e-mailing <a "
484 "#pidgin on irc.freenode.net<BR><BR>")); 501 "href=\"mailto:support@pidgin.im\">support@pidgin.im</a><br/>"
485 g_string_append_printf(str, _("<FONT SIZE=\"4\">XMPP MUC:</FONT> " 502 "This is a <b>public</b> mailing list! "
486 "devel@conference.pidgin.im<BR><BR>")); 503 "(<a href=\"http://pidgin.im/pipermail/support/\">archive</a>)<br/>"
487 504 "We can't help with third-party protocols or plugins!<br/>"
488 /* Current Developers */ 505 "This list's primary language is <b>English</b>. You are "
489 g_string_append_printf(str, "<FONT SIZE=\"4\">%s:</FONT><BR/>", 506 "welcome to post in another language, but the responses may "
490 _("Current Developers")); 507 "be less helpful.<br/><br/>"));
491 add_developers(str, developers); 508
492 g_string_append(str, "<BR/>"); 509
493 510 gtk_imhtml_append_text(GTK_IMHTML(text), str->str, GTK_IMHTML_NO_SCROLL);
494 /* Crazy Patch Writers */ 511 g_string_free(str, TRUE);
495 g_string_append_printf(str, "<FONT SIZE=\"4\">%s:</FONT><BR/>", 512
496 _("Crazy Patch Writers")); 513 gtk_text_buffer_get_start_iter(gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)), &iter);
497 add_developers(str, patch_writers); 514 gtk_text_buffer_place_cursor(gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)), &iter);
498 g_string_append(str, "<BR/>"); 515
499 516 /* Close Button */
500 /* Retired Developers */ 517 button = pidgin_dialog_add_button(GTK_DIALOG(about), GTK_STOCK_CLOSE,
501 g_string_append_printf(str, "<FONT SIZE=\"4\">%s:</FONT><BR/>", 518 G_CALLBACK(destroy_about), about);
502 _("Retired Developers")); 519
503 add_developers(str, retired_developers); 520 g_signal_connect(G_OBJECT(about), "destroy",
504 g_string_append(str, "<BR/>"); 521 G_CALLBACK(destroy_about), G_OBJECT(about));
505 522
506 /* Retired Crazy Patch Writers */ 523 /* this makes the sizes not work? */
507 g_string_append_printf(str, "<FONT SIZE=\"4\">%s:</FONT><BR/>", 524 GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
508 _("Retired Crazy Patch Writers")); 525 gtk_widget_grab_default(button);
509 add_developers(str, retired_patch_writers); 526
510 g_string_append(str, "<BR/>"); 527 /* Let's give'em something to talk about -- woah woah woah */
511 528 buddylist = pidgin_blist_get_default_gtk_blist();
512 /* Current Translators */ 529 if (buddylist)
513 g_string_append_printf(str, "<FONT SIZE=\"4\">%s:</FONT><BR/>", 530 gtk_window_set_transient_for(GTK_WINDOW(about),
514 _("Current Translators")); 531 GTK_WINDOW(buddylist->window));
515 add_translators(str, translators); 532
516 g_string_append(str, "<BR/>"); 533 gtk_widget_show_all(about);
517 534 gtk_window_present(GTK_WINDOW(about));
518 /* Past Translators */ 535 }
519 g_string_append_printf(str, "<FONT SIZE=\"4\">%s:</FONT><BR/>", 536
520 _("Past Translators")); 537 void pidgin_dialogs_buildinfo()
521 add_translators(str, past_translators); 538 {
522 g_string_append(str, "<BR/>"); 539 GtkWidget *vbox;
523 540 GtkWidget *frame;
524 g_string_append_printf(str, "<FONT SIZE=\"4\">%s</FONT><br/>", _("Debugging Information")); 541 GtkWidget *text;
542 GtkWidget *button;
543 GtkTextIter iter;
544 GString *str;
545 char *tmp;
546 PidginBuddyList *buddylist;
547
548 if (about != NULL) {
549 gtk_window_present(GTK_WINDOW(about));
550 return;
551 }
552
553 tmp = g_strdup_printf(_("%s Build Information"), PIDGIN_NAME);
554 buildinfo = pidgin_create_dialog(tmp, PIDGIN_HIG_BORDER, "buildinfo", TRUE);
555 g_free(tmp);
556 gtk_window_set_default_size(GTK_WINDOW(buildinfo), 450, 450);
557
558 vbox = pidgin_dialog_get_vbox_with_properties(GTK_DIALOG(buildinfo), FALSE, PIDGIN_HIG_BORDER);
559
560 frame = pidgin_create_imhtml(FALSE, &text, NULL, NULL);
561 gtk_imhtml_set_format_functions(GTK_IMHTML(text), GTK_IMHTML_ALL ^ GTK_IMHTML_SMILEY);
562 gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0);
563
564 str = g_string_sized_new(4096);
565
566 g_string_append_printf(str,
567 "<FONT SIZE=\"4\"><B>%s %s</B></FONT> (libpurple %s)<BR>%s<BR><BR>", PIDGIN_NAME, DISPLAY_VERSION, purple_core_get_version(), REVISION);
568
569 g_string_append_printf(str, "<FONT SIZE=\"4\"><B>%s</B></FONT><br/>", _("Build Information"));
525 570
526 /* The following primarly intented for user/developer interaction and thus 571 /* The following primarly intented for user/developer interaction and thus
527 ought not be translated */ 572 ought not be translated */
528 573
529 #ifdef CONFIG_ARGS /* win32 build doesn't use configure */ 574 #ifdef CONFIG_ARGS /* win32 build doesn't use configure */
703 748
704 gtk_text_buffer_get_start_iter(gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)), &iter); 749 gtk_text_buffer_get_start_iter(gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)), &iter);
705 gtk_text_buffer_place_cursor(gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)), &iter); 750 gtk_text_buffer_place_cursor(gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)), &iter);
706 751
707 /* Close Button */ 752 /* Close Button */
708 button = pidgin_dialog_add_button(GTK_DIALOG(about), GTK_STOCK_CLOSE, 753 button = pidgin_dialog_add_button(GTK_DIALOG(buildinfo), GTK_STOCK_CLOSE,
709 G_CALLBACK(destroy_about), about); 754 G_CALLBACK(destroy_buildinfo), about);
710 755
711 g_signal_connect(G_OBJECT(about), "destroy", 756 g_signal_connect(G_OBJECT(buildinfo), "destroy",
712 G_CALLBACK(destroy_about), G_OBJECT(about)); 757 G_CALLBACK(destroy_buildinfo), G_OBJECT(buildinfo));
713 758
714 /* this makes the sizes not work? */ 759 /* this makes the sizes not work? */
715 GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); 760 GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
716 gtk_widget_grab_default(button); 761 gtk_widget_grab_default(button);
717 762
718 /* Let's give'em something to talk about -- woah woah woah */ 763 /* Let's give'em something to talk about -- woah woah woah */
719 buddylist = pidgin_blist_get_default_gtk_blist(); 764 buddylist = pidgin_blist_get_default_gtk_blist();
720 if (buddylist) 765 if (buddylist)
721 gtk_window_set_transient_for(GTK_WINDOW(about), 766 gtk_window_set_transient_for(GTK_WINDOW(buildinfo),
722 GTK_WINDOW(buddylist->window)); 767 GTK_WINDOW(buddylist->window));
723 768
724 gtk_widget_show_all(about); 769 gtk_widget_show_all(buildinfo);
725 gtk_window_present(GTK_WINDOW(about)); 770 gtk_window_present(GTK_WINDOW(buildinfo));
771 }
772
773 void pidgin_dialogs_developers()
774 {
775 GtkWidget *vbox;
776 GtkWidget *frame;
777 GtkWidget *text;
778 GtkWidget *button;
779 GtkTextIter iter;
780 GString *str;
781 char *tmp;
782 PidginBuddyList *buddylist;
783
784 if (about != NULL) {
785 gtk_window_present(GTK_WINDOW(about));
786 return;
787 }
788
789 tmp = g_strdup_printf(_("%s Developer Information"), PIDGIN_NAME);
790 developer_info = pidgin_create_dialog(tmp, PIDGIN_HIG_BORDER, "developer_info", TRUE);
791 g_free(tmp);
792 gtk_window_set_default_size(GTK_WINDOW(developer_info), 450, 450);
793
794 vbox = pidgin_dialog_get_vbox_with_properties(GTK_DIALOG(developer_info), FALSE, PIDGIN_HIG_BORDER);
795
796 frame = pidgin_create_imhtml(FALSE, &text, NULL, NULL);
797 gtk_imhtml_set_format_functions(GTK_IMHTML(text), GTK_IMHTML_ALL ^ GTK_IMHTML_SMILEY);
798 gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0);
799
800 str = g_string_sized_new(4096);
801
802 /* Current Developers */
803 g_string_append_printf(str, "<FONT SIZE=\"4\"><B>%s:</B></FONT><BR/>",
804 _("Current Developers"));
805 add_developers(str, developers);
806 g_string_append(str, "<BR/>");
807
808 /* Crazy Patch Writers */
809 g_string_append_printf(str, "<FONT SIZE=\"4\"><B>%s:</B></FONT><BR/>",
810 _("Crazy Patch Writers"));
811 add_developers(str, patch_writers);
812 g_string_append(str, "<BR/>");
813
814 /* Retired Developers */
815 g_string_append_printf(str, "<FONT SIZE=\"4\"><B>%s:</B></FONT><BR/>",
816 _("Retired Developers"));
817 add_developers(str, retired_developers);
818 g_string_append(str, "<BR/>");
819
820 /* Retired Crazy Patch Writers */
821 g_string_append_printf(str, "<FONT SIZE=\"4\"><B>%s:</B></FONT><BR/>",
822 _("Retired Crazy Patch Writers"));
823 add_developers(str, retired_patch_writers);
824 g_string_append(str, "<BR/>");
825
826 gtk_imhtml_append_text(GTK_IMHTML(text), str->str, GTK_IMHTML_NO_SCROLL);
827 g_string_free(str, TRUE);
828
829 gtk_text_buffer_get_start_iter(gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)), &iter);
830 gtk_text_buffer_place_cursor(gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)), &iter);
831
832 /* Close Button */
833 button = pidgin_dialog_add_button(GTK_DIALOG(developer_info), GTK_STOCK_CLOSE,
834 G_CALLBACK(destroy_developer_info), about);
835
836 g_signal_connect(G_OBJECT(developer_info), "destroy",
837 G_CALLBACK(destroy_developer_info), G_OBJECT(developer_info));
838
839 /* this makes the sizes not work? */
840 GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
841 gtk_widget_grab_default(button);
842
843 /* Let's give'em something to talk about -- woah woah woah */
844 buddylist = pidgin_blist_get_default_gtk_blist();
845 if (buddylist)
846 gtk_window_set_transient_for(GTK_WINDOW(developer_info),
847 GTK_WINDOW(buddylist->window));
848
849 gtk_widget_show_all(developer_info);
850 gtk_window_present(GTK_WINDOW(developer_info));
851 }
852
853 void pidgin_dialogs_translators()
854 {
855 GtkWidget *vbox;
856 GtkWidget *frame;
857 GtkWidget *text;
858 GtkWidget *button;
859 GtkTextIter iter;
860 GString *str;
861 char *tmp;
862 PidginBuddyList *buddylist;
863
864 if (about != NULL) {
865 gtk_window_present(GTK_WINDOW(about));
866 return;
867 }
868
869 tmp = g_strdup_printf(_("%s Translator Information"), PIDGIN_NAME);
870 translator_info = pidgin_create_dialog(tmp, PIDGIN_HIG_BORDER, "translator_info", TRUE);
871 g_free(tmp);
872 gtk_window_set_default_size(GTK_WINDOW(translator_info), 450, 450);
873
874 vbox = pidgin_dialog_get_vbox_with_properties(GTK_DIALOG(translator_info), FALSE, PIDGIN_HIG_BORDER);
875
876 frame = pidgin_create_imhtml(FALSE, &text, NULL, NULL);
877 gtk_imhtml_set_format_functions(GTK_IMHTML(text), GTK_IMHTML_ALL ^ GTK_IMHTML_SMILEY);
878 gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0);
879
880 str = g_string_sized_new(4096);
881
882 /* Current Translators */
883 g_string_append_printf(str, "<FONT SIZE=\"4\">%s:</FONT><BR/>",
884 _("Current Translators"));
885 add_translators(str, translators);
886 g_string_append(str, "<BR/>");
887
888 /* Past Translators */
889 g_string_append_printf(str, "<FONT SIZE=\"4\">%s:</FONT><BR/>",
890 _("Past Translators"));
891 add_translators(str, past_translators);
892 g_string_append(str, "<BR/>");
893
894 gtk_imhtml_append_text(GTK_IMHTML(text), str->str, GTK_IMHTML_NO_SCROLL);
895 g_string_free(str, TRUE);
896
897 gtk_text_buffer_get_start_iter(gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)), &iter);
898 gtk_text_buffer_place_cursor(gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)), &iter);
899
900 /* Close Button */
901 button = pidgin_dialog_add_button(GTK_DIALOG(translator_info), GTK_STOCK_CLOSE,
902 G_CALLBACK(destroy_translator_info), about);
903
904 g_signal_connect(G_OBJECT(translator_info), "destroy",
905 G_CALLBACK(destroy_translator_info), G_OBJECT(translator_info));
906
907 /* this makes the sizes not work? */
908 GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
909 gtk_widget_grab_default(button);
910
911 /* Let's give'em something to talk about -- woah woah woah */
912 buddylist = pidgin_blist_get_default_gtk_blist();
913 if (buddylist)
914 gtk_window_set_transient_for(GTK_WINDOW(translator_info),
915 GTK_WINDOW(buddylist->window));
916
917 gtk_widget_show_all(translator_info);
918 gtk_window_present(GTK_WINDOW(translator_info));
726 } 919 }
727 920
728 static void 921 static void
729 pidgin_dialogs_im_cb(gpointer data, PurpleRequestFields *fields) 922 pidgin_dialogs_im_cb(gpointer data, PurpleRequestFields *fields)
730 { 923 {

mercurial