Mercurial > pidgin.yaz
comparison src/gtkimhtmltoolbar.c @ 10134:0aca774bef87
[gaim-migrate @ 11198]
Patch 1051145, from Nathan Fredrickson, a rewrite of the smiley selection
dialog:
This patch replaces the smiely selection dialog with a
smiley popup menu. The smileys are still arranged in a
square grid.
Screenshots here:
http://worksintheory.org/files/gaim/smiley-menu/
One outstanding issue is with the yahoo smileys. Some
of them are extra wide, and it seems that pixmap width
affects menuitem height due to gtk's calculation of the
"toggle size". The result is unecesseary vertical
spacing. Not sure whether this is a gtk bug or not.
Even with the extra vertical spacing, which only
effects yahoo smiley's, I prefer this menu to the
original dialog.
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Sat, 23 Oct 2004 18:07:11 +0000 |
parents | ee50e4797352 |
children | 3855d3467437 |
comparison
equal
deleted
inserted
replaced
10133:e144efd6a5be | 10134:0aca774bef87 |
---|---|
36 static GtkHBoxClass *parent_class = NULL; | 36 static GtkHBoxClass *parent_class = NULL; |
37 | 37 |
38 static void do_bold(GtkWidget *bold, GtkIMHtmlToolbar *toolbar) | 38 static void do_bold(GtkWidget *bold, GtkIMHtmlToolbar *toolbar) |
39 { | 39 { |
40 GObject *object; | 40 GObject *object; |
41 | 41 |
42 g_return_if_fail(toolbar); | 42 g_return_if_fail(toolbar); |
43 | 43 |
44 /* block the format_function_toggle handler */ | 44 /* block the format_function_toggle handler */ |
45 object = g_object_ref(G_OBJECT(GTK_IMHTML(toolbar->imhtml))); | 45 object = g_object_ref(G_OBJECT(GTK_IMHTML(toolbar->imhtml))); |
46 g_signal_handlers_block_matched(object, G_SIGNAL_MATCH_DATA, 0, 0, NULL, | 46 g_signal_handlers_block_matched(object, G_SIGNAL_MATCH_DATA, 0, 0, NULL, |
47 NULL, toolbar); | 47 NULL, toolbar); |
48 gtk_imhtml_toggle_bold(GTK_IMHTML(toolbar->imhtml)); | 48 gtk_imhtml_toggle_bold(GTK_IMHTML(toolbar->imhtml)); |
49 g_signal_handlers_unblock_matched(object, G_SIGNAL_MATCH_DATA, 0, 0, NULL, | 49 g_signal_handlers_unblock_matched(object, G_SIGNAL_MATCH_DATA, 0, 0, NULL, |
50 NULL, toolbar); | 50 NULL, toolbar); |
51 g_object_unref(object); | 51 g_object_unref(object); |
52 | 52 |
53 gtk_widget_grab_focus(toolbar->imhtml); | 53 gtk_widget_grab_focus(toolbar->imhtml); |
54 } | 54 } |
55 | 55 |
56 static void | 56 static void |
57 do_italic(GtkWidget *italic, GtkIMHtmlToolbar *toolbar) | 57 do_italic(GtkWidget *italic, GtkIMHtmlToolbar *toolbar) |
58 { | 58 { |
59 GObject *object; | 59 GObject *object; |
60 | 60 |
61 g_return_if_fail(toolbar); | 61 g_return_if_fail(toolbar); |
62 | 62 |
63 /* block the format_function_toggle handler */ | 63 /* block the format_function_toggle handler */ |
64 object = g_object_ref(G_OBJECT(GTK_IMHTML(toolbar->imhtml))); | 64 object = g_object_ref(G_OBJECT(GTK_IMHTML(toolbar->imhtml))); |
65 g_signal_handlers_block_matched(object, G_SIGNAL_MATCH_DATA, 0, 0, NULL, | 65 g_signal_handlers_block_matched(object, G_SIGNAL_MATCH_DATA, 0, 0, NULL, |
66 NULL, toolbar); | 66 NULL, toolbar); |
67 gtk_imhtml_toggle_italic(GTK_IMHTML(toolbar->imhtml)); | 67 gtk_imhtml_toggle_italic(GTK_IMHTML(toolbar->imhtml)); |
68 g_signal_handlers_unblock_matched(object, G_SIGNAL_MATCH_DATA, 0, 0, NULL, | 68 g_signal_handlers_unblock_matched(object, G_SIGNAL_MATCH_DATA, 0, 0, NULL, |
69 NULL, toolbar); | 69 NULL, toolbar); |
70 g_object_unref(object); | 70 g_object_unref(object); |
71 | 71 |
72 gtk_widget_grab_focus(toolbar->imhtml); | 72 gtk_widget_grab_focus(toolbar->imhtml); |
73 } | 73 } |
74 | 74 |
75 static void | 75 static void |
76 do_underline(GtkWidget *underline, GtkIMHtmlToolbar *toolbar) | 76 do_underline(GtkWidget *underline, GtkIMHtmlToolbar *toolbar) |
77 { | 77 { |
78 GObject *object; | 78 GObject *object; |
79 | 79 |
80 g_return_if_fail(toolbar); | 80 g_return_if_fail(toolbar); |
81 | 81 |
82 /* block the format_function_toggle handler */ | 82 /* block the format_function_toggle handler */ |
83 object = g_object_ref(G_OBJECT(GTK_IMHTML(toolbar->imhtml))); | 83 object = g_object_ref(G_OBJECT(GTK_IMHTML(toolbar->imhtml))); |
84 g_signal_handlers_block_matched(object, G_SIGNAL_MATCH_DATA, 0, 0, NULL, | 84 g_signal_handlers_block_matched(object, G_SIGNAL_MATCH_DATA, 0, 0, NULL, |
85 NULL, toolbar); | 85 NULL, toolbar); |
86 gtk_imhtml_toggle_underline(GTK_IMHTML(toolbar->imhtml)); | 86 gtk_imhtml_toggle_underline(GTK_IMHTML(toolbar->imhtml)); |
87 g_signal_handlers_unblock_matched(object, G_SIGNAL_MATCH_DATA, 0, 0, NULL, | 87 g_signal_handlers_unblock_matched(object, G_SIGNAL_MATCH_DATA, 0, 0, NULL, |
88 NULL, toolbar); | 88 NULL, toolbar); |
89 g_object_unref(object); | 89 g_object_unref(object); |
90 | 90 |
91 gtk_widget_grab_focus(toolbar->imhtml); | 91 gtk_widget_grab_focus(toolbar->imhtml); |
92 } | 92 } |
93 | 93 |
94 static void | 94 static void |
95 do_small(GtkWidget *smalltb, GtkIMHtmlToolbar *toolbar) | 95 do_small(GtkWidget *smalltb, GtkIMHtmlToolbar *toolbar) |
174 | 174 |
175 if (!toolbar->font_dialog) { | 175 if (!toolbar->font_dialog) { |
176 toolbar->font_dialog = gtk_font_selection_dialog_new(_("Select Font")); | 176 toolbar->font_dialog = gtk_font_selection_dialog_new(_("Select Font")); |
177 | 177 |
178 g_object_set_data(G_OBJECT(toolbar->font_dialog), "gaim_toolbar", toolbar); | 178 g_object_set_data(G_OBJECT(toolbar->font_dialog), "gaim_toolbar", toolbar); |
179 | 179 |
180 if(fontname) { | 180 if(fontname) { |
181 char fonttif[128]; | 181 char fonttif[128]; |
182 g_snprintf(fonttif, sizeof(fonttif), "%s 12", fontname); | 182 g_snprintf(fonttif, sizeof(fonttif), "%s 12", fontname); |
183 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog), | 183 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog), |
184 fonttif); | 184 fonttif); |
549 } | 549 } |
550 | 550 |
551 gtk_widget_grab_focus(toolbar->imhtml); | 551 gtk_widget_grab_focus(toolbar->imhtml); |
552 } | 552 } |
553 | 553 |
554 | 554 static void |
555 static void | 555 destroy_smiley_menu(GtkWidget *widget, GtkIMHtmlToolbar *toolbar) |
556 close_smiley_dialog(GtkWidget *widget, GdkEvent *event, | 556 { |
557 GtkIMHtmlToolbar *toolbar) | 557 if (toolbar->smiley_menu != NULL) |
558 { | |
559 gtk_widget_destroy(toolbar->smiley_menu); | |
560 toolbar->smiley_menu = NULL; | |
561 } | |
562 } | |
563 | |
564 static void | |
565 deactivate_smiley_menu(GtkWidget *widget, GtkIMHtmlToolbar *toolbar) | |
558 { | 566 { |
559 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->smiley), FALSE); | 567 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->smiley), FALSE); |
560 | 568 gtk_button_released(GTK_BUTTON(toolbar->smiley)); |
561 if (toolbar->smiley_dialog != NULL) | 569 } |
562 { | |
563 gtk_widget_destroy(toolbar->smiley_dialog); | |
564 toolbar->smiley_dialog = NULL; | |
565 } | |
566 } | |
567 | |
568 | 570 |
569 static void | 571 static void |
570 insert_smiley_text(GtkWidget *widget, GtkIMHtmlToolbar *toolbar) | 572 insert_smiley_text(GtkWidget *widget, GtkIMHtmlToolbar *toolbar) |
571 { | 573 { |
572 char *smiley_text, *escaped_smiley; | 574 char *smiley_text, *escaped_smiley; |
577 gtk_imhtml_insert_smiley(GTK_IMHTML(toolbar->imhtml), | 579 gtk_imhtml_insert_smiley(GTK_IMHTML(toolbar->imhtml), |
578 GTK_IMHTML(toolbar->imhtml)->protocol_name, | 580 GTK_IMHTML(toolbar->imhtml)->protocol_name, |
579 escaped_smiley); | 581 escaped_smiley); |
580 | 582 |
581 g_free(escaped_smiley); | 583 g_free(escaped_smiley); |
582 close_smiley_dialog(NULL, NULL, toolbar); | 584 destroy_smiley_menu(NULL, toolbar); |
583 } | 585 } |
584 | 586 |
585 | 587 static void add_smiley(GtkIMHtmlToolbar *toolbar, GtkWidget *menu, int row, int col, char *filename, char *face) |
586 static void add_smiley(GtkIMHtmlToolbar *toolbar, GtkWidget *table, int row, int col, char *filename, char *face) | |
587 { | 588 { |
588 GtkWidget *image; | 589 GtkWidget *image; |
589 GtkWidget *button; | 590 GtkWidget *menuitem; |
590 | 591 |
591 image = gtk_image_new_from_file(filename); | 592 image = gtk_image_new_from_file(filename); |
592 button = gtk_button_new(); | 593 menuitem = gtk_image_menu_item_new_with_label(""); |
593 gtk_container_add(GTK_CONTAINER(button), image); | 594 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), image); |
594 g_object_set_data(G_OBJECT(button), "smiley_text", face); | 595 g_object_set_data(G_OBJECT(menuitem), "smiley_text", face); |
595 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(insert_smiley_text), toolbar); | 596 gtk_tooltips_set_tip(toolbar->tooltips, menuitem, face, NULL); |
596 | 597 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(insert_smiley_text), toolbar); |
597 gtk_tooltips_set_tip(toolbar->tooltips, button, face, NULL); | 598 gtk_menu_attach(GTK_MENU(menu), menuitem, col, col+1, row, row+1); |
598 | 599 } |
599 gtk_table_attach_defaults(GTK_TABLE(table), button, col, col+1, row, row+1); | |
600 | |
601 /* these look really weird with borders */ | |
602 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); | |
603 | |
604 gtk_widget_show(button); | |
605 } | |
606 | |
607 | 600 |
608 static gboolean smiley_is_unique(GSList *list, GtkIMHtmlSmiley *smiley) { | 601 static gboolean smiley_is_unique(GSList *list, GtkIMHtmlSmiley *smiley) { |
609 while(list) { | 602 while(list) { |
610 GtkIMHtmlSmiley *cur = list->data; | 603 GtkIMHtmlSmiley *cur = list->data; |
611 if(!strcmp(cur->file, smiley->file)) | 604 if(!strcmp(cur->file, smiley->file)) |
617 | 610 |
618 | 611 |
619 static void | 612 static void |
620 insert_smiley_cb(GtkWidget *smiley, GtkIMHtmlToolbar *toolbar) | 613 insert_smiley_cb(GtkWidget *smiley, GtkIMHtmlToolbar *toolbar) |
621 { | 614 { |
622 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(smiley))) { | 615 GtkWidget *menu; |
623 | 616 GSList *smileys, *unique_smileys = NULL; |
624 GtkWidget *dialog; | 617 int width; |
625 GtkWidget *smiley_table = NULL; | 618 int row = 0, col = 0; |
626 GSList *smileys, *unique_smileys = NULL; | 619 |
627 int width; | 620 destroy_smiley_menu(NULL, toolbar); |
628 int row = 0, col = 0; | 621 |
629 | 622 if (toolbar->sml) |
630 if (toolbar->smiley_dialog) { | 623 smileys = get_proto_smileys(toolbar->sml); |
631 gtk_widget_grab_focus(toolbar->imhtml); | 624 else |
632 return; | 625 smileys = get_proto_smileys(NULL); |
626 | |
627 while(smileys) { | |
628 GtkIMHtmlSmiley *smiley = smileys->data; | |
629 if(!smiley->hidden) { | |
630 if(smiley_is_unique(unique_smileys, smiley)) | |
631 unique_smileys = g_slist_append(unique_smileys, smiley); | |
633 } | 632 } |
634 | 633 smileys = smileys->next; |
635 if (toolbar->sml) | 634 } |
636 smileys = get_proto_smileys(toolbar->sml); | 635 |
637 else | 636 menu = gtk_menu_new(); |
638 smileys = get_proto_smileys(NULL); | 637 |
639 | 638 if(g_slist_length(unique_smileys)) { |
640 while(smileys) { | 639 |
641 GtkIMHtmlSmiley *smiley = smileys->data; | 640 width = floor(sqrt(g_slist_length(unique_smileys))); |
641 | |
642 /* build menu */ | |
643 while(unique_smileys) { | |
644 GtkIMHtmlSmiley *smiley = unique_smileys->data; | |
642 if(!smiley->hidden) { | 645 if(!smiley->hidden) { |
643 if(smiley_is_unique(unique_smileys, smiley)) | 646 add_smiley(toolbar, menu, row, col, smiley->file, smiley->smile); |
644 unique_smileys = g_slist_append(unique_smileys, smiley); | 647 |
648 if(++col >= width) { | |
649 col = 0; | |
650 row++; | |
651 } | |
645 } | 652 } |
646 smileys = smileys->next; | 653 unique_smileys = unique_smileys->next; |
647 } | 654 } |
648 | 655 } |
649 GAIM_DIALOG(dialog); | 656 else { |
650 | 657 GtkWidget *menuitem; |
651 gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); | 658 menuitem = gtk_menu_item_new_with_label(_("This theme has no available smileys.")); |
652 gtk_window_set_role(GTK_WINDOW(dialog), "smiley_dialog"); | 659 gtk_widget_set_sensitive(menuitem, FALSE); |
653 gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_MOUSE); | 660 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); |
654 | 661 } |
655 if(g_slist_length(unique_smileys)) { | 662 |
656 | 663 /* connect signals */ |
657 width = floor(sqrt(g_slist_length(unique_smileys))); | 664 g_signal_connect(G_OBJECT(menu), "deactivate", |
658 | 665 G_CALLBACK(deactivate_smiley_menu), toolbar); |
659 smiley_table = gtk_table_new(width, width, TRUE); | 666 g_signal_connect(G_OBJECT(menu), "selection-done", |
660 | 667 G_CALLBACK(destroy_smiley_menu), toolbar); |
661 /* pack buttons */ | 668 |
662 | 669 /* show everything */ |
663 while(unique_smileys) { | 670 gtk_widget_show_all(menu); |
664 GtkIMHtmlSmiley *smiley = unique_smileys->data; | 671 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 0, gtk_get_current_event_time()); |
665 if(!smiley->hidden) { | 672 toolbar->smiley_menu = menu; |
666 add_smiley(toolbar, smiley_table, row, col, smiley->file, smiley->smile); | 673 |
667 if(++col >= width) { | |
668 col = 0; | |
669 row++; | |
670 } | |
671 } | |
672 unique_smileys = unique_smileys->next; | |
673 } | |
674 } | |
675 else { | |
676 smiley_table = gtk_label_new(_("This theme has no available smileys.")); | |
677 } | |
678 | |
679 gtk_container_add(GTK_CONTAINER(dialog), smiley_table); | |
680 | |
681 gtk_widget_show(smiley_table); | |
682 | |
683 gtk_container_set_border_width(GTK_CONTAINER(dialog), 5); | |
684 | |
685 /* connect signals */ | |
686 g_object_set_data(G_OBJECT(dialog), "dialog_type", "smiley dialog"); | |
687 g_signal_connect(G_OBJECT(dialog), "delete_event", | |
688 G_CALLBACK(close_smiley_dialog), toolbar); | |
689 | |
690 /* show everything */ | |
691 gtk_window_set_title(GTK_WINDOW(dialog), _("Smile!")); | |
692 gtk_widget_show_all(dialog); | |
693 | |
694 toolbar->smiley_dialog = dialog; | |
695 | |
696 } else if (toolbar->smiley_dialog) { | |
697 close_smiley_dialog(smiley, NULL, toolbar); | |
698 } | |
699 gtk_widget_grab_focus(toolbar->imhtml); | 674 gtk_widget_grab_focus(toolbar->imhtml); |
700 } | 675 } |
701 | 676 |
702 static void update_buttons_cb(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons, GtkIMHtmlToolbar *toolbar) | 677 static void update_buttons_cb(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons, GtkIMHtmlToolbar *toolbar) |
703 { | 678 { |
758 static void reset_buttons_cb(GtkIMHtml *imhtml, GtkIMHtmlToolbar *toolbar) | 733 static void reset_buttons_cb(GtkIMHtml *imhtml, GtkIMHtmlToolbar *toolbar) |
759 { | 734 { |
760 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->bold))) | 735 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->bold))) |
761 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->bold), FALSE, | 736 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->bold), FALSE, |
762 toolbar); | 737 toolbar); |
763 | 738 |
764 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->italic))) | 739 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->italic))) |
765 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->italic), | 740 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->italic), |
766 FALSE, toolbar); | 741 FALSE, toolbar); |
767 | 742 |
768 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->underline))) | 743 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->underline))) |
769 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->underline), | 744 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->underline), |
770 FALSE, toolbar); | 745 FALSE, toolbar); |
771 } | 746 } |
772 | 747 |
773 static void update_buttons(GtkIMHtmlToolbar *toolbar) { | 748 static void update_buttons(GtkIMHtmlToolbar *toolbar) { |
774 gboolean bold, italic, underline; | 749 gboolean bold, italic, underline; |
775 | 750 |
776 bold = italic = underline = FALSE; | 751 bold = italic = underline = FALSE; |
777 gtk_imhtml_get_current_format(GTK_IMHTML(toolbar->imhtml), | 752 gtk_imhtml_get_current_format(GTK_IMHTML(toolbar->imhtml), |
778 &bold, &italic, &underline); | 753 &bold, &italic, &underline); |
779 | 754 |
780 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->bold)) != bold) | 755 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->bold)) != bold) |
817 { | 792 { |
818 gtk_widget_destroy(toolbar->image_dialog); | 793 gtk_widget_destroy(toolbar->image_dialog); |
819 toolbar->image_dialog = NULL; | 794 toolbar->image_dialog = NULL; |
820 } | 795 } |
821 | 796 |
822 if (toolbar->font_dialog != NULL) | 797 destroy_toolbar_font(NULL, NULL, toolbar); |
823 { | 798 destroy_smiley_menu(NULL, toolbar); |
824 gtk_widget_destroy(toolbar->font_dialog); | 799 destroy_toolbar_bgcolor(NULL, NULL, toolbar); |
825 toolbar->font_dialog = NULL; | 800 destroy_toolbar_fgcolor(NULL, NULL, toolbar); |
826 } | 801 close_link_dialog(toolbar); |
827 | |
828 if (toolbar->smiley_dialog != NULL) | |
829 { | |
830 gtk_widget_destroy(toolbar->smiley_dialog); | |
831 toolbar->smiley_dialog = NULL; | |
832 } | |
833 | |
834 if (toolbar->bgcolor_dialog != NULL) | |
835 { | |
836 gtk_widget_destroy(toolbar->bgcolor_dialog); | |
837 toolbar->bgcolor_dialog = NULL; | |
838 } | |
839 | |
840 if (toolbar->fgcolor_dialog != NULL) | |
841 { | |
842 gtk_widget_destroy(toolbar->fgcolor_dialog); | |
843 toolbar->fgcolor_dialog = NULL; | |
844 } | |
845 | |
846 if (toolbar->link_dialog != NULL) | |
847 { | |
848 gaim_request_close(GAIM_REQUEST_FIELDS, toolbar->link_dialog); | |
849 toolbar->link_dialog = NULL; | |
850 } | |
851 | 802 |
852 if (toolbar->sml) | 803 if (toolbar->sml) |
853 free(toolbar->sml); | 804 free(toolbar->sml); |
854 gtk_object_sink(GTK_OBJECT(toolbar->tooltips)); | 805 gtk_object_sink(GTK_OBJECT(toolbar->tooltips)); |
855 | 806 |
877 toolbar->imhtml = NULL; | 828 toolbar->imhtml = NULL; |
878 toolbar->font_dialog = NULL; | 829 toolbar->font_dialog = NULL; |
879 toolbar->fgcolor_dialog = NULL; | 830 toolbar->fgcolor_dialog = NULL; |
880 toolbar->bgcolor_dialog = NULL; | 831 toolbar->bgcolor_dialog = NULL; |
881 toolbar->link_dialog = NULL; | 832 toolbar->link_dialog = NULL; |
882 toolbar->smiley_dialog = NULL; | 833 toolbar->smiley_menu = NULL; |
883 toolbar->image_dialog = NULL; | 834 toolbar->image_dialog = NULL; |
884 | 835 |
885 toolbar->tooltips = gtk_tooltips_new(); | 836 toolbar->tooltips = gtk_tooltips_new(); |
886 | 837 |
887 gtk_box_set_spacing(GTK_BOX(toolbar), 6); | 838 gtk_box_set_spacing(GTK_BOX(toolbar), 6); |
888 sg = gtk_size_group_new(GTK_SIZE_GROUP_BOTH); | 839 sg = gtk_size_group_new(GTK_SIZE_GROUP_BOTH); |
889 | 840 |
890 /* Bold */ | 841 /* Bold */ |
891 button = gaim_pixbuf_toolbar_button_from_stock(GTK_STOCK_BOLD); | 842 button = gaim_pixbuf_toolbar_button_from_stock(GTK_STOCK_BOLD); |
1018 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_SMILEY); | 969 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_SMILEY); |
1019 gtk_size_group_add_widget(sg, button); | 970 gtk_size_group_add_widget(sg, button); |
1020 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | 971 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); |
1021 gtk_tooltips_set_tip(toolbar->tooltips, button, _("Insert smiley"), NULL); | 972 gtk_tooltips_set_tip(toolbar->tooltips, button, _("Insert smiley"), NULL); |
1022 | 973 |
1023 g_signal_connect(G_OBJECT(button), "clicked", | 974 g_signal_connect(G_OBJECT(button), "pressed", |
1024 G_CALLBACK(insert_smiley_cb), toolbar); | 975 G_CALLBACK(insert_smiley_cb), toolbar); |
1025 | 976 |
1026 toolbar->smiley = button; | 977 toolbar->smiley = button; |
1027 | 978 |
1028 toolbar->sml = NULL; | 979 toolbar->sml = NULL; |
1080 update_buttons_cb(GTK_IMHTML(imhtml), buttons, toolbar); | 1031 update_buttons_cb(GTK_IMHTML(imhtml), buttons, toolbar); |
1081 | 1032 |
1082 bold = italic = underline = FALSE; | 1033 bold = italic = underline = FALSE; |
1083 | 1034 |
1084 gtk_imhtml_get_current_format(GTK_IMHTML(imhtml), &bold, &italic, &underline); | 1035 gtk_imhtml_get_current_format(GTK_IMHTML(imhtml), &bold, &italic, &underline); |
1085 | 1036 |
1086 if(bold) | 1037 if(bold) |
1087 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->bold), bold, | 1038 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->bold), bold, |
1088 toolbar); | 1039 toolbar); |
1089 | 1040 |
1090 if(italic) | 1041 if(italic) |
1091 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->italic), italic, | 1042 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->italic), italic, |
1092 toolbar); | 1043 toolbar); |
1093 | 1044 |
1094 if(underline) | 1045 if(underline) |
1098 | 1049 |
1099 void gtk_imhtmltoolbar_associate_smileys(GtkIMHtmlToolbar *toolbar, const char *proto_id) | 1050 void gtk_imhtmltoolbar_associate_smileys(GtkIMHtmlToolbar *toolbar, const char *proto_id) |
1100 { | 1051 { |
1101 if (toolbar->sml) | 1052 if (toolbar->sml) |
1102 g_free(toolbar->sml); | 1053 g_free(toolbar->sml); |
1103 | 1054 |
1104 toolbar->sml = g_strdup(proto_id); | 1055 toolbar->sml = g_strdup(proto_id); |
1105 } | 1056 } |