Mercurial > pidgin
comparison src/dialogs.c @ 7927:1441648fe974
[gaim-migrate @ 8598]
De-uglify the insert link and insert image buttons a bit. Closing the
insert image dialog via the window manager now makes the insert image
button un-depress itself.
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Thu, 25 Dec 2003 09:23:27 +0000 |
parents | 2014b91db201 |
children | 451d2946423e |
comparison
equal
deleted
inserted
replaced
7926:68900f9cb540 | 7927:1441648fe974 |
---|---|
78 GtkWidget *ok; | 78 GtkWidget *ok; |
79 GtkWidget *cancel; | 79 GtkWidget *cancel; |
80 GtkWidget *window; | 80 GtkWidget *window; |
81 GtkWidget *url; | 81 GtkWidget *url; |
82 GtkWidget *text; | 82 GtkWidget *text; |
83 GtkWidget *toggle; | |
84 GtkWidget *entry; | 83 GtkWidget *entry; |
85 GaimConversation *c; | 84 GaimConversation *c; |
86 }; | 85 }; |
87 | 86 |
88 struct view_log { | 87 struct view_log { |
232 hbox = gtk_hbox_new(FALSE, 6); | 231 hbox = gtk_hbox_new(FALSE, 6); |
233 gtk_container_add(GTK_CONTAINER(vbox), hbox); | 232 gtk_container_add(GTK_CONTAINER(vbox), hbox); |
234 img = gtk_image_new_from_stock(GTK_STOCK_DIALOG_INFO, GTK_ICON_SIZE_MENU); | 233 img = gtk_image_new_from_stock(GTK_STOCK_DIALOG_INFO, GTK_ICON_SIZE_MENU); |
235 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); | 234 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); |
236 labeltext = _("<b>Anonymous warnings are less severe.</b>"); | 235 labeltext = _("<b>Anonymous warnings are less severe.</b>"); |
237 /* labeltext = _("Anonymous warnings are less severe."); */ | |
238 label = gtk_label_new(NULL); | 236 label = gtk_label_new(NULL); |
239 gtk_label_set_markup(GTK_LABEL(label), labeltext); | 237 gtk_label_set_markup(GTK_LABEL(label), labeltext); |
240 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); | 238 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); |
241 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); | 239 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); |
242 | 240 |
676 gtk_widget_show_all(window); | 674 gtk_widget_show_all(window); |
677 gtk_widget_grab_focus(GTK_WIDGET(info->entry)); | 675 gtk_widget_grab_focus(GTK_WIDGET(info->entry)); |
678 } | 676 } |
679 | 677 |
680 | 678 |
681 static void | |
682 free_dialog(GtkWidget *w, void *data) | |
683 { | |
684 g_free(data); | |
685 } | |
686 | |
687 /*------------------------------------------------------*/ | 679 /*------------------------------------------------------*/ |
688 /* Link Dialog */ | 680 /* Link Dialog */ |
689 /*------------------------------------------------------*/ | 681 /*------------------------------------------------------*/ |
690 | 682 |
691 void cancel_link(GtkWidget *widget, GaimConversation *c) | 683 void dialog_link_destroy(GaimConversation *c) |
692 { | 684 { |
693 GaimGtkConversation *gtkconv; | 685 GaimGtkConversation *gtkconv; |
694 GtkWidget *link_dialog; | |
695 | 686 |
696 gtkconv = GAIM_GTK_CONVERSATION(c); | 687 gtkconv = GAIM_GTK_CONVERSATION(c); |
697 | 688 |
698 if (gtkconv->toolbar.link) { | 689 gtk_widget_destroy(gtkconv->dialogs.link); |
699 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.link), | |
700 FALSE); | |
701 } | |
702 | |
703 link_dialog = gtkconv->dialogs.link; | |
704 gtkconv->dialogs.link = NULL; | 690 gtkconv->dialogs.link = NULL; |
705 destroy_dialog(NULL, link_dialog); | 691 } |
706 } | 692 |
707 | 693 static void do_insert_link(GtkWidget *w, int resp, struct linkdlg *a) |
708 void do_insert_link(GtkWidget *w, int resp, struct linkdlg *b) | |
709 { | 694 { |
710 GaimGtkConversation *gtkconv; | 695 GaimGtkConversation *gtkconv; |
711 char *open_tag; | |
712 const char *urltext, *showtext; | 696 const char *urltext, *showtext; |
713 | 697 |
714 gtkconv = GAIM_GTK_CONVERSATION(b->c); | 698 gtkconv = GAIM_GTK_CONVERSATION(a->c); |
715 | 699 |
716 if (resp == GTK_RESPONSE_OK) { | 700 if (resp == GTK_RESPONSE_OK) { |
717 | 701 urltext = gtk_entry_get_text(GTK_ENTRY(a->url)); |
718 open_tag = g_malloc(2048); | 702 showtext = gtk_entry_get_text(GTK_ENTRY(a->text)); |
719 | |
720 urltext = gtk_entry_get_text(GTK_ENTRY(b->url)); | |
721 showtext = gtk_entry_get_text(GTK_ENTRY(b->text)); | |
722 | 703 |
723 if (!strlen(showtext)) | 704 if (!strlen(showtext)) |
724 showtext = urltext; | 705 showtext = urltext; |
725 | 706 |
726 gtk_imhtml_insert_link(GTK_IMHTML(gtkconv->entry), urltext, showtext); | 707 gtk_imhtml_insert_link(GTK_IMHTML(gtkconv->entry), urltext, showtext); |
727 | 708 gaim_gtk_advance_past(gtkconv, "<A HREF>", "</A>"); |
728 g_free(open_tag); | 709 } |
729 } | 710 |
730 | 711 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.link), FALSE); |
731 if (gtkconv->toolbar.link) { | 712 } |
732 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.link), | 713 |
733 FALSE); | 714 static void dialog_link_freedata(GtkWidget *w, gpointer user_data) |
734 } | 715 { |
735 | 716 struct linkdlg *a = user_data; |
736 gtkconv->dialogs.link = NULL; | 717 |
737 destroy_dialog(NULL, b->window); | 718 g_free(a); |
738 } | 719 } |
739 | 720 |
740 void show_insert_link(GtkWidget *linky, GaimConversation *c) | 721 void dialog_link_show(GaimConversation *c) |
741 { | 722 { |
742 GaimGtkConversation *gtkconv; | 723 GaimGtkConversation *gtkconv; |
743 GaimGtkWindow *gtkwin; | 724 GaimGtkWindow *gtkwin; |
744 GtkWidget *table; | 725 GtkWidget *table; |
745 GtkWidget *label; | 726 GtkWidget *label; |
746 GtkWidget *hbox; | 727 GtkWidget *hbox; |
747 GtkWidget *vbox; | 728 GtkWidget *vbox; |
729 struct linkdlg *a; | |
730 GtkWidget *img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG); | |
748 | 731 |
749 gtkconv = GAIM_GTK_CONVERSATION(c); | 732 gtkconv = GAIM_GTK_CONVERSATION(c); |
750 gtkwin = GAIM_GTK_WINDOW(gaim_conversation_get_window(c)); | 733 gtkwin = GAIM_GTK_WINDOW(gaim_conversation_get_window(c)); |
751 | 734 |
752 if (gtkconv->dialogs.link == NULL) { | 735 a = g_new0(struct linkdlg, 1); |
753 struct linkdlg *a = g_new0(struct linkdlg, 1); | 736 |
754 GtkWidget *img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG); | 737 a->c = c; |
755 | 738 a->window = gtk_dialog_new_with_buttons(_("Insert Link"), |
756 a->c = c; | 739 GTK_WINDOW(gtkwin->window), 0, GTK_STOCK_CANCEL, |
757 a->window = gtk_dialog_new_with_buttons(_("Insert Link"), | 740 GTK_RESPONSE_CANCEL, _("_Insert"), GTK_RESPONSE_OK, NULL); |
758 GTK_WINDOW(gtkwin->window), 0, GTK_STOCK_CANCEL, | 741 gtk_dialog_set_default_response(GTK_DIALOG(a->window), GTK_RESPONSE_OK); |
759 GTK_RESPONSE_CANCEL, _("_Insert"), GTK_RESPONSE_OK, NULL); | 742 g_signal_connect(G_OBJECT(a->window), "response", |
760 gtk_dialog_set_default_response(GTK_DIALOG(a->window), GTK_RESPONSE_OK); | 743 G_CALLBACK(do_insert_link), a); |
761 g_signal_connect(G_OBJECT(a->window), "response", | 744 g_signal_connect(G_OBJECT(a->window), "destroy", |
762 G_CALLBACK(do_insert_link), a); | 745 G_CALLBACK(dialog_link_freedata), a); |
763 | 746 |
764 gtk_dialog_set_default_response(GTK_DIALOG(a->window), GTK_RESPONSE_OK); | 747 gtk_dialog_set_default_response(GTK_DIALOG(a->window), GTK_RESPONSE_OK); |
765 gtk_container_set_border_width(GTK_CONTAINER(a->window), 6); | 748 gtk_container_set_border_width(GTK_CONTAINER(a->window), 6); |
766 gtk_window_set_resizable(GTK_WINDOW(a->window), FALSE); | 749 gtk_window_set_resizable(GTK_WINDOW(a->window), FALSE); |
767 gtk_dialog_set_has_separator(GTK_DIALOG(a->window), FALSE); | 750 gtk_dialog_set_has_separator(GTK_DIALOG(a->window), FALSE); |
768 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(a->window)->vbox), 12); | 751 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(a->window)->vbox), 12); |
769 gtk_container_set_border_width( | 752 gtk_container_set_border_width( |
770 GTK_CONTAINER(GTK_DIALOG(a->window)->vbox), 6); | 753 GTK_CONTAINER(GTK_DIALOG(a->window)->vbox), 6); |
771 gtk_window_set_role(GTK_WINDOW(a->window), "insert_link"); | 754 gtk_window_set_role(GTK_WINDOW(a->window), "insert_link"); |
772 gtk_dialog_set_response_sensitive(GTK_DIALOG(a->window), GTK_RESPONSE_OK, FALSE); | 755 gtk_dialog_set_response_sensitive(GTK_DIALOG(a->window), GTK_RESPONSE_OK, FALSE); |
773 | 756 |
774 hbox = gtk_hbox_new(FALSE, 12); | 757 hbox = gtk_hbox_new(FALSE, 12); |
775 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(a->window)->vbox), hbox); | 758 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(a->window)->vbox), hbox); |
776 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); | 759 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); |
777 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); | 760 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); |
778 | 761 |
779 vbox = gtk_vbox_new(FALSE, 0); | 762 vbox = gtk_vbox_new(FALSE, 0); |
780 gtk_container_add(GTK_CONTAINER(hbox), vbox); | 763 gtk_container_add(GTK_CONTAINER(hbox), vbox); |
781 | 764 |
782 label = gtk_label_new(_("Please enter the URL and description of " | 765 label = gtk_label_new(_("Please enter the URL and description of " |
783 "the link that you want to insert. The " | 766 "the link that you want to insert. The " |
784 "description is optional.\n")); | 767 "description is optional.\n")); |
785 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); | 768 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); |
786 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | 769 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); |
787 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); | 770 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); |
788 | 771 |
789 table = gtk_table_new(2, 2, FALSE); | 772 table = gtk_table_new(2, 2, FALSE); |
790 gtk_table_set_row_spacings(GTK_TABLE(table), 6); | 773 gtk_table_set_row_spacings(GTK_TABLE(table), 6); |
791 gtk_table_set_col_spacings(GTK_TABLE(table), 6); | 774 gtk_table_set_col_spacings(GTK_TABLE(table), 6); |
792 gtk_container_set_border_width(GTK_CONTAINER(table), 0); | 775 gtk_container_set_border_width(GTK_CONTAINER(table), 0); |
793 gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); | 776 gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); |
794 | 777 |
795 label = gtk_label_new_with_mnemonic(_("_URL:")); | 778 label = gtk_label_new_with_mnemonic(_("_URL:")); |
796 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); | 779 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); |
797 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1); | 780 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1); |
798 | 781 |
799 a->url = gtk_entry_new(); | 782 a->url = gtk_entry_new(); |
800 gtk_table_attach_defaults(GTK_TABLE(table), a->url, 1, 2, 0, 1); | 783 gtk_table_attach_defaults(GTK_TABLE(table), a->url, 1, 2, 0, 1); |
801 gtk_label_set_mnemonic_widget(GTK_LABEL(label), GTK_WIDGET(a->url)); | 784 gtk_label_set_mnemonic_widget(GTK_LABEL(label), GTK_WIDGET(a->url)); |
802 gtk_widget_grab_focus(a->url); | 785 gtk_widget_grab_focus(a->url); |
803 | 786 |
804 gtk_entry_set_activates_default (GTK_ENTRY(a->url), TRUE); | 787 gtk_entry_set_activates_default (GTK_ENTRY(a->url), TRUE); |
805 g_signal_connect(G_OBJECT(a->url), "changed", | 788 g_signal_connect(G_OBJECT(a->url), "changed", |
806 G_CALLBACK(gaim_gtk_set_sensitive_if_input), a->window); | 789 G_CALLBACK(gaim_gtk_set_sensitive_if_input), a->window); |
807 | 790 |
808 label = gtk_label_new_with_mnemonic(_("_Description:")); | 791 label = gtk_label_new_with_mnemonic(_("_Description:")); |
809 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); | 792 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); |
810 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2); | 793 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2); |
811 | 794 |
812 a->text = gtk_entry_new(); | 795 a->text = gtk_entry_new(); |
813 gtk_table_attach_defaults(GTK_TABLE(table), a->text, 1, 2, 1, 2); | 796 gtk_table_attach_defaults(GTK_TABLE(table), a->text, 1, 2, 1, 2); |
814 gtk_label_set_mnemonic_widget(GTK_LABEL(label), GTK_WIDGET(a->text)); | 797 gtk_label_set_mnemonic_widget(GTK_LABEL(label), GTK_WIDGET(a->text)); |
815 gtk_entry_set_activates_default (GTK_ENTRY(a->text), TRUE); | 798 gtk_entry_set_activates_default (GTK_ENTRY(a->text), TRUE); |
816 | 799 |
817 g_signal_connect(G_OBJECT(a->window), "destroy", | 800 gtkconv->dialogs.link = a->window; |
818 G_CALLBACK(free_dialog), a); | |
819 dialogwindows = g_list_prepend(dialogwindows, a->window); | |
820 | |
821 a->toggle = linky; | |
822 gtkconv->dialogs.link = a->window; | |
823 } | |
824 | 801 |
825 gtk_widget_show_all(gtkconv->dialogs.link); | 802 gtk_widget_show_all(gtkconv->dialogs.link); |
826 gdk_window_raise(gtkconv->dialogs.link->window); | 803 gdk_window_raise(gtkconv->dialogs.link->window); |
827 } | 804 } |
828 | 805 |