Mercurial > pidgin.yaz
comparison src/dialogs.c @ 4667:4bf9c6e8e432
[gaim-migrate @ 4978]
protocol-specific smileys in the smiley dialog
committer: Tailor Script <tailor@pidgin.im>
author | Nathan Walp <nwalp@pidgin.im> |
---|---|
date | Fri, 07 Mar 2003 23:49:10 +0000 |
parents | bf89c7598989 |
children | 794cc8ec1166 |
comparison
equal
deleted
inserted
replaced
4666:f8895ad921ee | 4667:4bf9c6e8e432 |
---|---|
60 #include "pixmaps/add.xpm" | 60 #include "pixmaps/add.xpm" |
61 #include "pixmaps/close.xpm" | 61 #include "pixmaps/close.xpm" |
62 | 62 |
63 #define PATHSIZE 1024 | 63 #define PATHSIZE 1024 |
64 | 64 |
65 int smiley_array[FACE_TOTAL]; | |
66 char *current_smiley; | |
67 GdkColor bgcolor; | 65 GdkColor bgcolor; |
68 GdkColor fgcolor; | 66 GdkColor fgcolor; |
69 | 67 |
70 static GtkWidget *imdialog = NULL; /*I only want ONE of these :) */ | 68 static GtkWidget *imdialog = NULL; /*I only want ONE of these :) */ |
71 static GList *dialogwindows = NULL; | 69 static GList *dialogwindows = NULL; |
3711 dialogwindows = g_list_remove(dialogwindows, gtkconv->dialogs.smiley); | 3709 dialogwindows = g_list_remove(dialogwindows, gtkconv->dialogs.smiley); |
3712 gtk_widget_destroy(gtkconv->dialogs.smiley); | 3710 gtk_widget_destroy(gtkconv->dialogs.smiley); |
3713 gtkconv->dialogs.smiley = NULL; | 3711 gtkconv->dialogs.smiley = NULL; |
3714 } | 3712 } |
3715 | 3713 |
3716 void set_smiley(GtkWidget *w, char *face) | |
3717 { | |
3718 current_smiley = face; | |
3719 } | |
3720 | |
3721 void set_smiley_array(GtkWidget *widget, int smiley_type) | |
3722 { | |
3723 int i; | |
3724 | |
3725 for (i = 0; i < FACE_TOTAL; i++) | |
3726 smiley_array[i] = 0; | |
3727 | |
3728 smiley_array[smiley_type] = 1; | |
3729 | |
3730 return; | |
3731 } | |
3732 | |
3733 void insert_smiley_text(GtkWidget *widget, struct gaim_conversation *c) | 3714 void insert_smiley_text(GtkWidget *widget, struct gaim_conversation *c) |
3734 { | 3715 { |
3735 struct gaim_gtk_conversation *gtkconv; | 3716 struct gaim_gtk_conversation *gtkconv; |
3717 char *smiley_text = g_object_get_data(G_OBJECT(widget), "smiley_text"); | |
3736 | 3718 |
3737 gtkconv = GAIM_GTK_CONVERSATION(c); | 3719 gtkconv = GAIM_GTK_CONVERSATION(c); |
3738 | 3720 |
3739 gtk_text_buffer_insert_at_cursor(gtkconv->entry_buffer, current_smiley, -1); | 3721 gtk_text_buffer_insert_at_cursor(gtkconv->entry_buffer, smiley_text, -1); |
3740 close_smiley_dialog(NULL, c); | 3722 close_smiley_dialog(NULL, c); |
3741 } | 3723 } |
3742 | 3724 |
3743 static void toolbar_add_smiley(struct gaim_conversation *c, GtkWidget *bar, char* path, char *filename, char *face) | 3725 static void add_smiley(struct gaim_conversation *c, GtkWidget *table, int row, int col, char *filename, char *face) |
3744 { | 3726 { |
3745 GtkWidget *image; | 3727 GtkWidget *image; |
3746 GtkWidget *button; | 3728 GtkWidget *button; |
3747 char *buf; | 3729 struct gaim_gtk_conversation *gtkconv = GAIM_GTK_CONVERSATION(c); |
3748 | 3730 |
3749 buf = g_build_filename(path, filename, NULL); | 3731 image = gtk_image_new_from_file(filename); |
3750 image = gtk_image_new_from_file(buf); | 3732 button = gtk_button_new(); |
3751 g_free(buf); | 3733 gtk_container_add(GTK_CONTAINER(button), image); |
3752 button = | 3734 g_object_set_data(G_OBJECT(button), "smiley_text", face); |
3753 gtk_toolbar_append_item(GTK_TOOLBAR(bar), NULL, NULL, NULL, | 3735 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(insert_smiley_text), c); |
3754 image, G_CALLBACK(set_smiley), (char *)face); | 3736 |
3755 g_signal_connect(GTK_OBJECT(button), "clicked", G_CALLBACK(insert_smiley_text), c); | 3737 gtk_tooltips_set_tip(gtkconv->tooltips, button, face, NULL); |
3738 | |
3739 gtk_table_attach_defaults(GTK_TABLE(table), button, col, col+1, row, row+1); | |
3756 | 3740 |
3757 /* these look really weird with borders */ | 3741 /* these look really weird with borders */ |
3758 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); | 3742 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); |
3743 | |
3744 gtk_widget_show(button); | |
3745 } | |
3746 | |
3747 static gboolean smiley_is_unique(GSList *list, GtkIMHtmlSmiley *smiley) { | |
3748 while(list) { | |
3749 GtkIMHtmlSmiley *cur = list->data; | |
3750 if(!strcmp(cur->file, smiley->file)) | |
3751 return FALSE; | |
3752 list = list->next; | |
3753 } | |
3754 return TRUE; | |
3759 } | 3755 } |
3760 | 3756 |
3761 void show_smiley_dialog(struct gaim_conversation *c, GtkWidget *widget) | 3757 void show_smiley_dialog(struct gaim_conversation *c, GtkWidget *widget) |
3762 { | 3758 { |
3763 struct gaim_gtk_conversation *gtkconv; | 3759 struct gaim_gtk_conversation *gtkconv; |
3764 GtkWidget *dialog; | 3760 GtkWidget *dialog; |
3765 GtkWidget *vbox, *smiley_box = NULL; | 3761 GtkWidget *smiley_table = NULL; |
3766 GtkWidget *win; | 3762 GSList *smileys, *unique_smileys = NULL; |
3767 GtkWidget *bbox; | 3763 int width; |
3768 char *smiley_path = 0; | 3764 int row = 0, col = 0; |
3769 | 3765 |
3770 gtkconv = GAIM_GTK_CONVERSATION(c); | 3766 gtkconv = GAIM_GTK_CONVERSATION(c); |
3771 | 3767 |
3772 if (gtkconv->dialogs.smiley) | 3768 if (gtkconv->dialogs.smiley) |
3773 return; | 3769 return; |
3774 | 3770 |
3775 win = GAIM_GTK_WINDOW(gaim_conversation_get_window(c))->window; | 3771 if(c->account) |
3772 smileys = get_proto_smileys(c->account->protocol); | |
3773 else | |
3774 smileys = get_proto_smileys(DEFAULT_PROTO); | |
3775 | |
3776 while(smileys) { | |
3777 GtkIMHtmlSmiley *smiley = smileys->data; | |
3778 if(!smiley->hidden) { | |
3779 if(smiley_is_unique(unique_smileys, smiley)) | |
3780 unique_smileys = g_slist_append(unique_smileys, smiley); | |
3781 } | |
3782 smileys = smileys->next; | |
3783 } | |
3784 | |
3785 | |
3786 width = floor(sqrt(g_slist_length(unique_smileys))); | |
3776 | 3787 |
3777 GAIM_DIALOG(dialog); | 3788 GAIM_DIALOG(dialog); |
3778 gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); | 3789 gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); |
3779 gtk_window_set_role(GTK_WINDOW(dialog), "smiley_dialog"); | 3790 gtk_window_set_role(GTK_WINDOW(dialog), "smiley_dialog"); |
3780 gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_MOUSE); | 3791 gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_MOUSE); |
3781 | 3792 |
3782 /* setup boxes */ | 3793 smiley_table = gtk_table_new(width, width, TRUE); |
3783 vbox = gtk_vbox_new(TRUE, 5); | |
3784 bbox = gtk_hbox_new(FALSE, 5); | |
3785 | |
3786 | |
3787 /* setup buttons */ | |
3788 | 3794 |
3789 /* pack buttons */ | 3795 /* pack buttons */ |
3790 | 3796 |
3791 smiley_box = gtk_toolbar_new(); | 3797 while(unique_smileys) { |
3792 gtk_box_pack_start(GTK_BOX(vbox), smiley_box, TRUE, TRUE, 0); | 3798 GtkIMHtmlSmiley *smiley = unique_smileys->data; |
3793 | 3799 if(!smiley->hidden) { |
3794 smiley_path = g_build_filename(DATADIR, "pixmaps", "gaim", "smileys", "default", NULL); | 3800 add_smiley(c, smiley_table, row, col, smiley->file, smiley->smile); |
3795 toolbar_add_smiley(c, smiley_box, smiley_path, "angel.png", "O:-)"); | 3801 if(++col >= width) { |
3796 toolbar_add_smiley(c, smiley_box, smiley_path, "bigsmile.png", ":-D"); | 3802 col = 0; |
3797 toolbar_add_smiley(c, smiley_box, smiley_path, "burp.png", ":-!"); | 3803 row++; |
3798 toolbar_add_smiley(c, smiley_box, smiley_path, "crossedlips.png", ":-X"); | 3804 } |
3799 | 3805 } |
3800 smiley_box = gtk_toolbar_new(); | 3806 unique_smileys = unique_smileys->next; |
3801 gtk_box_pack_start(GTK_BOX(vbox), smiley_box, TRUE, TRUE, 0); | 3807 } |
3802 toolbar_add_smiley(c, smiley_box, smiley_path, "cry.png", ":'("); | 3808 |
3803 toolbar_add_smiley(c, smiley_box, smiley_path, "embarrassed.png", ":-["); | 3809 gtk_container_add(GTK_CONTAINER(dialog), smiley_table); |
3804 toolbar_add_smiley(c, smiley_box, smiley_path, "kiss.png", ":-*"); | 3810 |
3805 toolbar_add_smiley(c, smiley_box, smiley_path, "moneymouth.png", ":-$"); | 3811 gtk_widget_show(smiley_table); |
3806 | 3812 |
3807 smiley_box = gtk_toolbar_new(); | |
3808 gtk_box_pack_start(GTK_BOX(vbox), smiley_box, TRUE, TRUE, 0); | |
3809 toolbar_add_smiley(c, smiley_box, smiley_path, "sad.png", ":-("); | |
3810 toolbar_add_smiley(c, smiley_box, smiley_path, "scream.png", "=-O"); | |
3811 toolbar_add_smiley(c, smiley_box, smiley_path, "smile.png", ":-)"); | |
3812 toolbar_add_smiley(c, smiley_box, smiley_path, "cool.png", "8-)"); | |
3813 | |
3814 smiley_box = gtk_toolbar_new(); | |
3815 gtk_box_pack_start(GTK_BOX(vbox), smiley_box, TRUE, TRUE, 0); | |
3816 toolbar_add_smiley(c, smiley_box, smiley_path, "think.png", ":-/"); | |
3817 toolbar_add_smiley(c, smiley_box, smiley_path, "tongue.png", ":-P"); | |
3818 toolbar_add_smiley(c, smiley_box, smiley_path, "wink.png", ";-)"); | |
3819 toolbar_add_smiley(c, smiley_box, smiley_path, "yell.png", ">:o"); | |
3820 | |
3821 g_free(smiley_path); | |
3822 | |
3823 gtk_container_add(GTK_CONTAINER(dialog), vbox); | |
3824 gtk_container_set_border_width(GTK_CONTAINER(dialog), 5); | 3813 gtk_container_set_border_width(GTK_CONTAINER(dialog), 5); |
3825 | 3814 |
3826 /* connect signals */ | 3815 /* connect signals */ |
3827 g_object_set_data(G_OBJECT(dialog), "dialog_type", "smiley dialog"); | 3816 g_object_set_data(G_OBJECT(dialog), "dialog_type", "smiley dialog"); |
3828 g_signal_connect(G_OBJECT(dialog), "delete_event", | 3817 g_signal_connect(G_OBJECT(dialog), "delete_event", |