pidgin/gtkwebview.c

changeset 34490
4825e8b34919
parent 34308
cdb187c27360
child 34493
6f22f282a8cf
equal deleted inserted replaced
34489:10e75cc316a3 34490:4825e8b34919
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 }

mercurial