Mercurial > pidgin.yaz
comparison pidgin/gtkimhtml.c @ 23163:99ef50c8da91
Modified patch from malu to "Add context menu alternative to add received
custom smiley". Closes #5855.
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Wed, 21 May 2008 17:56:20 +0000 |
parents | 25161f5ea347 |
children | 9f94bf3743c2 |
comparison
equal
deleted
inserted
replaced
23162:e0e57b83b359 | 23163:99ef50c8da91 |
---|---|
30 #endif | 30 #endif |
31 | 31 |
32 #include "internal.h" | 32 #include "internal.h" |
33 #include "pidgin.h" | 33 #include "pidgin.h" |
34 #include "pidginstock.h" | 34 #include "pidginstock.h" |
35 #include "gtkutils.h" | |
36 #include "smiley.h" | |
37 #include "imgstore.h" | |
35 | 38 |
36 #include "debug.h" | 39 #include "debug.h" |
37 #include "util.h" | 40 #include "util.h" |
38 #include "gtkimhtml.h" | 41 #include "gtkimhtml.h" |
42 #include "gtksmiley.h" | |
39 #include "gtksourceiter.h" | 43 #include "gtksourceiter.h" |
40 #include "gtksourceundomanager.h" | 44 #include "gtksourceundomanager.h" |
41 #include "gtksourceview-marshal.h" | 45 #include "gtksourceview-marshal.h" |
42 #include <gtk/gtk.h> | 46 #include <gtk/gtk.h> |
43 #include <glib/gerror.h> | 47 #include <glib/gerror.h> |
3685 #endif /* FILECHOOSER */ | 3689 #endif /* FILECHOOSER */ |
3686 | 3690 |
3687 gtk_widget_show(image->filesel); | 3691 gtk_widget_show(image->filesel); |
3688 } | 3692 } |
3689 | 3693 |
3694 static void | |
3695 gtk_imhtml_custom_smiley_save(GtkWidget *w, GtkIMHtmlImage *image) | |
3696 { | |
3697 /* Create an add dialog */ | |
3698 PidginSmiley *editor = pidgin_smiley_edit(NULL, NULL); | |
3699 pidgin_smiley_editor_set_shortcut(editor, image->filename); | |
3700 pidgin_smiley_editor_set_image(editor, image->pixbuf); | |
3701 } | |
3702 | |
3690 /* | 3703 /* |
3691 * So, um, AIM Direct IM lets you send any file, not just images. You can | 3704 * So, um, AIM Direct IM lets you send any file, not just images. You can |
3692 * just insert a sound or a file or whatever in a conversation. It's | 3705 * just insert a sound or a file or whatever in a conversation. It's |
3693 * basically like file transfer, except there is an icon to open the file | 3706 * basically like file transfer, except there is an icon to open the file |
3694 * embedded in the conversation. Someone should make the Purple core handle | 3707 * embedded in the conversation. Someone should make the Purple core handle |
3709 item = gtk_image_menu_item_new_with_mnemonic(text); | 3722 item = gtk_image_menu_item_new_with_mnemonic(text); |
3710 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), img); | 3723 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), img); |
3711 g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(gtk_imhtml_image_save), image); | 3724 g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(gtk_imhtml_image_save), image); |
3712 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); | 3725 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); |
3713 | 3726 |
3727 /* Add menu item for adding custom smiley to local smileys */ | |
3728 /* we only add the menu if the image is of "custom smiley size" | |
3729 <= 96x96 pixels */ | |
3730 if (image->width <= 96 && image->height <= 96) { | |
3731 text = g_strdup_printf(_("_Add Custom Smiley...")); | |
3732 img = gtk_image_new_from_stock(GTK_STOCK_ADD, GTK_ICON_SIZE_MENU); | |
3733 item = gtk_image_menu_item_new_with_mnemonic(text); | |
3734 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), img); | |
3735 g_signal_connect(G_OBJECT(item), "activate", | |
3736 G_CALLBACK(gtk_imhtml_custom_smiley_save), image); | |
3737 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); | |
3738 } | |
3739 | |
3714 gtk_widget_show_all(menu); | 3740 gtk_widget_show_all(menu); |
3715 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, | 3741 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, |
3716 event_button->button, event_button->time); | 3742 event_button->button, event_button->time); |
3717 | 3743 |
3718 g_free(text); | 3744 g_free(text); |
3730 static gboolean gtk_imhtml_smiley_clicked(GtkWidget *w, GdkEvent *event, GtkIMHtmlSmiley *smiley) | 3756 static gboolean gtk_imhtml_smiley_clicked(GtkWidget *w, GdkEvent *event, GtkIMHtmlSmiley *smiley) |
3731 { | 3757 { |
3732 GdkPixbufAnimation *anim = NULL; | 3758 GdkPixbufAnimation *anim = NULL; |
3733 GtkIMHtmlScalable *image = NULL; | 3759 GtkIMHtmlScalable *image = NULL; |
3734 gboolean ret; | 3760 gboolean ret; |
3735 | 3761 |
3736 if (event->type != GDK_BUTTON_RELEASE || ((GdkEventButton*)event)->button != 3) | 3762 if (event->type != GDK_BUTTON_RELEASE || ((GdkEventButton*)event)->button != 3) |
3737 return FALSE; | 3763 return FALSE; |
3738 | 3764 |
3739 anim = gtk_smiley_get_image(smiley); | 3765 anim = gtk_smiley_get_image(smiley); |
3740 if (!anim) | 3766 if (!anim) |