| 32 #include <gdk/gdkkeysyms.h> |
32 #include <gdk/gdkkeysyms.h> |
| 33 #include "gtkutils.h" |
33 #include "gtkutils.h" |
| 34 #include "gtkwebview.h" |
34 #include "gtkwebview.h" |
| 35 #include "gtkwebviewtoolbar.h" |
35 #include "gtkwebviewtoolbar.h" |
| 36 |
36 |
| |
37 #include "gtkinternal.h" |
| 37 #include "gtk3compat.h" |
38 #include "gtk3compat.h" |
| 38 |
39 |
| 39 #define MAX_FONT_SIZE 7 |
40 #define MAX_FONT_SIZE 7 |
| 40 #define MAX_SCROLL_TIME 0.4 /* seconds */ |
41 #define MAX_SCROLL_TIME 0.4 /* seconds */ |
| 41 #define SCROLL_DELAY 33 /* milliseconds */ |
42 #define SCROLL_DELAY 33 /* milliseconds */ |
| 685 WebKitNetworkRequest *request, |
686 WebKitNetworkRequest *request, |
| 686 WebKitNetworkResponse *response, |
687 WebKitNetworkResponse *response, |
| 687 gpointer user_data) |
688 gpointer user_data) |
| 688 { |
689 { |
| 689 const gchar *uri; |
690 const gchar *uri; |
| |
691 PurpleStoredImage *img = NULL; |
| |
692 const char *filename; |
| 690 |
693 |
| 691 uri = webkit_network_request_get_uri(request); |
694 uri = webkit_network_request_get_uri(request); |
| 692 if (purple_str_has_prefix(uri, PURPLE_STORED_IMAGE_PROTOCOL)) { |
695 if (purple_str_has_prefix(uri, PURPLE_STORED_IMAGE_PROTOCOL)) { |
| 693 int id; |
696 int id; |
| 694 PurpleStoredImage *img; |
|
| 695 const char *filename; |
|
| 696 |
697 |
| 697 uri += sizeof(PURPLE_STORED_IMAGE_PROTOCOL) - 1; |
698 uri += sizeof(PURPLE_STORED_IMAGE_PROTOCOL) - 1; |
| 698 id = strtoul(uri, NULL, 10); |
699 id = strtoul(uri, NULL, 10); |
| 699 |
700 |
| 700 img = purple_imgstore_find_by_id(id); |
701 img = purple_imgstore_find_by_id(id); |
| 701 if (!img) |
702 if (!img) |
| 702 return; |
703 return; |
| 703 |
704 } else if (purple_str_has_prefix(uri, PURPLE_STOCK_IMAGE_PROTOCOL)) { |
| |
705 gchar *p_uri, *found; |
| |
706 const gchar *domain, *stock_name; |
| |
707 |
| |
708 uri += sizeof(PURPLE_STOCK_IMAGE_PROTOCOL) - 1; |
| |
709 |
| |
710 p_uri = g_strdup(uri); |
| |
711 found = strchr(p_uri, '/'); |
| |
712 if (!found) { |
| |
713 purple_debug_warning("webview", "Invalid purple stock " |
| |
714 "image uri: %s", uri); |
| |
715 return; |
| |
716 } |
| |
717 |
| |
718 found[0] = '\0'; |
| |
719 domain = p_uri; |
| |
720 stock_name = found + 1; |
| |
721 |
| |
722 if (g_strcmp0(domain, "e2ee") == 0) { |
| |
723 img = _pidgin_e2ee_stock_icon_get(stock_name); |
| |
724 if (!img) |
| |
725 return; |
| |
726 } else { |
| |
727 purple_debug_warning("webview", "Invalid purple stock " |
| |
728 "image domain: %s", domain); |
| |
729 return; |
| |
730 } |
| |
731 } else |
| |
732 return; |
| |
733 |
| |
734 if (img != NULL) { |
| 704 filename = purple_imgstore_get_filename(img); |
735 filename = purple_imgstore_get_filename(img); |
| 705 if (filename && g_path_is_absolute(filename)) { |
736 if (filename && g_path_is_absolute(filename)) { |
| 706 char *tmp = g_strdup_printf("file://%s", filename); |
737 gchar *tmp = g_strdup_printf("file://%s", filename); |
| 707 webkit_network_request_set_uri(request, tmp); |
738 webkit_network_request_set_uri(request, tmp); |
| 708 g_free(tmp); |
739 g_free(tmp); |
| 709 } else { |
740 } else { |
| 710 char *b64 = purple_base64_encode(purple_imgstore_get_data(img), |
741 gchar *b64, *tmp; |
| 711 purple_imgstore_get_size(img)); |
742 const gchar *type; |
| 712 const char *type = purple_imgstore_get_extension(img); |
743 |
| 713 char *tmp = g_strdup_printf("data:image/%s;base64,%s", type, b64); |
744 b64 = purple_base64_encode( |
| |
745 purple_imgstore_get_data(img), |
| |
746 purple_imgstore_get_size(img)); |
| |
747 type = purple_imgstore_get_extension(img); |
| |
748 tmp = g_strdup_printf("data:image/%s;base64,%s", |
| |
749 type, b64); |
| 714 webkit_network_request_set_uri(request, tmp); |
750 webkit_network_request_set_uri(request, tmp); |
| 715 g_free(b64); |
751 g_free(b64); |
| 716 g_free(tmp); |
752 g_free(tmp); |
| 717 } |
753 } |
| 718 } |
754 } |