pidgin/gtkwebview.c

changeset 35785
65ced7f8beaa
parent 35784
247f6f06531f
child 35796
bc5253318167
equal deleted inserted replaced
35784:247f6f06531f 35785:65ced7f8beaa
22 22
23 #include "internal.h" 23 #include "internal.h"
24 #include "debug.h" 24 #include "debug.h"
25 #include "glibcompat.h" 25 #include "glibcompat.h"
26 #include "pidgin.h" 26 #include "pidgin.h"
27 #include "pidginstock.h"
27 28
28 #include <gdk/gdkkeysyms.h> 29 #include <gdk/gdkkeysyms.h>
29 30
30 #include "gtkutils.h" 31 #include "gtkutils.h"
32 #include "gtksmiley-manager.h"
31 #include "gtkwebview.h" 33 #include "gtkwebview.h"
32 #include "gtkwebviewtoolbar.h" 34 #include "gtkwebviewtoolbar.h"
33 35
34 #include "gtkinternal.h" 36 #include "gtkinternal.h"
35 #include "gtk3compat.h" 37 #include "gtk3compat.h"
592 } 594 }
593 595
594 static void 596 static void
595 webview_image_save(GtkWidget *item, WebKitDOMHTMLImageElement *image_node) 597 webview_image_save(GtkWidget *item, WebKitDOMHTMLImageElement *image_node)
596 { 598 {
597 const gchar *src = webkit_dom_html_image_element_get_src(image_node); 599 const gchar *src;
598 WebKitWebView *webview; 600 WebKitWebView *webview;
599 PurpleStoredImage *image; 601 PurpleStoredImage *image;
600 GtkFileChooserDialog *dialog; 602 GtkFileChooserDialog *dialog;
601 gchar *filename; 603 gchar *filename;
602 GtkWidget *parent; 604 GtkWidget *parent;
603 605
604 webview = g_object_get_data(G_OBJECT(image_node), "pidgin-gtkwebview"); 606 webview = g_object_get_data(G_OBJECT(image_node), "pidgin-gtkwebview");
605 g_return_if_fail(webview != NULL); 607 g_return_if_fail(webview != NULL);
606 608
609 src = webkit_dom_html_image_element_get_src(image_node); /* XXX: a leak or not? */
607 image = webview_resource_get_loaded(webview, src); 610 image = webview_resource_get_loaded(webview, src);
608 g_return_if_fail(image != NULL); 611 g_return_if_fail(image != NULL);
609 612
610 parent = gtk_widget_get_ancestor(item, GTK_TYPE_WINDOW); 613 parent = gtk_widget_get_ancestor(item, GTK_TYPE_WINDOW);
611 dialog = GTK_FILE_CHOOSER_DIALOG(gtk_file_chooser_dialog_new( 614 dialog = GTK_FILE_CHOOSER_DIALOG(gtk_file_chooser_dialog_new(
633 636
634 gtk_widget_show(GTK_WIDGET(dialog)); 637 gtk_widget_show(GTK_WIDGET(dialog));
635 } 638 }
636 639
637 static void 640 static void
641 webview_image_add_smiley(GtkWidget *item, WebKitDOMHTMLImageElement *image_node)
642 {
643 const gchar *src;
644 WebKitWebView *webview;
645 PurpleStoredImage *image;
646
647 src = webkit_dom_html_image_element_get_src(image_node);
648 webview = g_object_get_data(G_OBJECT(image_node), "pidgin-gtkwebview");
649 g_return_if_fail(webview != NULL);
650
651 image = webview_resource_get_loaded(webview, src);
652 g_return_if_fail(image != NULL);
653
654 pidgin_smiley_manager_add(image,
655 webkit_dom_html_image_element_get_alt(image_node));
656 }
657
658 static void
638 do_popup_menu(WebKitWebView *webview, int button, int time, int context, 659 do_popup_menu(WebKitWebView *webview, int button, int time, int context,
639 WebKitDOMNode *node, const char *uri) 660 WebKitDOMNode *node, const char *uri)
640 { 661 {
641 GtkWidget *menu; 662 GtkWidget *menu;
642 GtkWidget *cut, *copy, *paste, *delete, *select; 663 GtkWidget *cut, *copy, *paste, *delete, *select;
705 g_signal_connect_object(G_OBJECT(menu_item), "activate", 726 g_signal_connect_object(G_OBJECT(menu_item), "activate",
706 G_CALLBACK(webview_image_save), image_node, 0); 727 G_CALLBACK(webview_image_save), image_node, 0);
707 gtk_widget_show(menu_item); 728 gtk_widget_show(menu_item);
708 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item); 729 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);
709 730
710 #if 0 731 /* TODO: check, if it's not *our* custom smiley (use css) */
711 /* TODO */
712 if (width <= 96 && height <= 96) { 732 if (width <= 96 && height <= 96) {
713 menu_item = gtk_image_menu_item_new_with_mnemonic( 733 menu_item = gtk_image_menu_item_new_with_mnemonic(
714 _("_Add Custom Smiley...")); 734 _("_Add Custom Smiley..."));
715 gtk_image_menu_item_set_image( 735 gtk_image_menu_item_set_image(
716 GTK_IMAGE_MENU_ITEM(menu_item), 736 GTK_IMAGE_MENU_ITEM(menu_item),
717 gtk_image_new_from_stock(GTK_STOCK_ADD, 737 gtk_image_new_from_stock(GTK_STOCK_ADD,
718 GTK_ICON_SIZE_MENU)); 738 GTK_ICON_SIZE_MENU));
719 g_signal_connect(G_OBJECT(item), "activate", 739 g_signal_connect_object(G_OBJECT(menu_item), "activate",
720 G_CALLBACK(), save); 740 G_CALLBACK(webview_image_add_smiley),
741 image_node, 0);
721 gtk_widget_show(menu_item); 742 gtk_widget_show(menu_item);
722 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item); 743 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);
723 } 744 }
724 #endif
725 745
726 show_clipboard = FALSE; 746 show_clipboard = FALSE;
727 } 747 }
728 748
729 if (show_clipboard) { 749 if (show_clipboard) {
785 data->inspector = webkit_web_view_get_inspector(webview); 805 data->inspector = webkit_web_view_get_inspector(webview);
786 data->node = node; 806 data->node = node;
787 807
788 pidgin_separator(menu); 808 pidgin_separator(menu);
789 809
790 inspect = pidgin_new_item_from_stock(menu, _("Inspect _Element"), NULL, 810 inspect = pidgin_new_item_from_stock(menu, _("Inspect _Element"),
791 NULL, NULL, 0, 0, NULL); 811 PIDGIN_STOCK_DEBUG, NULL, NULL, 0, 0, NULL);
792 g_signal_connect_data(G_OBJECT(inspect), "activate", 812 g_signal_connect_data(G_OBJECT(inspect), "activate",
793 G_CALLBACK(webview_inspector_inspect_element), 813 G_CALLBACK(webview_inspector_inspect_element),
794 data, (GClosureNotify)g_free, 0); 814 data, (GClosureNotify)g_free, 0);
795 } 815 }
796 816

mercurial