| 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 |