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)