492
486
g_object_unref (icon);
495
#if !WEBKIT_CHECK_VERSION (1, 3, 13)
497
katze_pixbuf_new_from_buffer (const guchar* buffer,
499
const gchar* mime_type,
502
/* Proposed for inclusion in GdkPixbuf
503
See http://bugzilla.gnome.org/show_bug.cgi?id=74291 */
504
GdkPixbufLoader* loader;
507
g_return_val_if_fail (buffer != NULL, NULL);
508
g_return_val_if_fail (length > 0, NULL);
512
loader = gdk_pixbuf_loader_new_with_mime_type (mime_type, error);
517
loader = gdk_pixbuf_loader_new ();
518
if (!gdk_pixbuf_loader_write (loader, buffer, length, error))
520
g_object_unref (loader);
523
if (!gdk_pixbuf_loader_close (loader, error))
525
g_object_unref (loader);
529
pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
530
g_object_ref (pixbuf);
531
g_object_unref (loader);
536
katze_net_object_maybe_unref (gpointer object)
539
g_object_unref (object);
543
midori_view_get_memory (void)
545
static GHashTable* memory = NULL;
547
memory = g_hash_table_new_full (g_str_hash, g_str_equal,
548
g_free, katze_net_object_maybe_unref);
553
katze_net_icon_status_cb (KatzeNetRequest* request,
556
switch (request->status)
558
case KATZE_NET_VERIFIED:
559
if (request->mime_type && strncmp (request->mime_type, "image/", 6))
564
case KATZE_NET_MOVED:
573
katze_net_icon_transfer_cb (KatzeNetRequest* request,
578
GdkPixbuf* pixbuf_scaled;
579
gint icon_width, icon_height;
581
GtkSettings* settings;
583
if (request->status == KATZE_NET_MOVED)
589
gchar* icon_file = katze_net_get_cached_path (NULL, view->icon_uri, "icons");
590
if (icon_file && (fp = fopen (icon_file, "wb")))
592
ret = fwrite (request->data, 1, request->length, fp);
594
if ((ret - request->length != 0))
595
g_warning ("Error writing to file %s in %s", icon_file, G_STRFUNC);
599
pixbuf = katze_pixbuf_new_from_buffer ((guchar*)request->data,
600
request->length, request->mime_type, NULL);
606
midori_view_unset_icon (view);
610
g_hash_table_insert (midori_view_get_memory (), g_strdup (view->icon_uri), pixbuf);
611
settings = gtk_widget_get_settings (view->web_view);
612
gtk_icon_size_lookup_for_settings (settings, GTK_ICON_SIZE_MENU, &icon_width, &icon_height);
613
pixbuf_scaled = gdk_pixbuf_scale_simple (pixbuf, icon_width, icon_height, GDK_INTERP_BILINEAR);
614
midori_view_apply_icon (view, pixbuf_scaled, view->icon_uri);
619
490
_midori_web_view_load_icon (MidoriView* view)
634
505
g_object_unref (pixbuf);
635
506
midori_view_apply_icon (view, pixbuf_scaled, view->icon_uri);
637
#elif WEBKIT_CHECK_VERSION (1, 8, 0)
638
509
if ((pixbuf = webkit_web_view_try_get_favicon_pixbuf (
639
510
WEBKIT_WEB_VIEW (view->web_view), icon_width, icon_height)))
640
511
midori_view_apply_icon (view, pixbuf, view->icon_uri);
641
#elif WEBKIT_CHECK_VERSION (1, 3, 13)
642
if ((pixbuf = webkit_web_view_get_icon_pixbuf (
643
WEBKIT_WEB_VIEW (view->web_view))))
645
GdkPixbuf* pixbuf_scaled = gdk_pixbuf_scale_simple (pixbuf,
646
icon_width, icon_height, GDK_INTERP_BILINEAR);
647
g_object_unref (pixbuf);
648
midori_view_apply_icon (view, pixbuf_scaled, view->icon_uri);
651
GdkPixbuf* pixbuf_scaled;
652
const gchar* uri = midori_tab_get_uri (MIDORI_TAB (view));
654
if (!midori_uri_is_http (view->icon_uri))
655
katze_assign (view->icon_uri, NULL);
657
if (midori_uri_is_http (uri) || g_str_has_prefix (uri, "file://"))
659
gchar* icon_file = NULL;
663
while (uri[i] != '\0' && uri[i] != '/')
667
gchar* path = g_strndup (uri, i);
668
view->icon_uri = g_strdup_printf ("%s/favicon.ico", path);
672
view->icon_uri = g_strdup_printf ("%s/favicon.ico", uri);
675
if (g_hash_table_lookup_extended (midori_view_get_memory (),
676
view->icon_uri, NULL, (gpointer)&pixbuf))
678
g_warn_if_fail (pixbuf != NULL);
679
g_object_ref (pixbuf);
681
else if ((icon_file = katze_net_get_cached_path (NULL, view->icon_uri, "icons")) &&
682
(pixbuf = gdk_pixbuf_new_from_file (icon_file, NULL)))
684
g_hash_table_insert (midori_view_get_memory (),
685
g_strdup (view->icon_uri), g_object_ref (pixbuf));
687
else if (!midori_tab_get_special (MIDORI_TAB (view)))
689
katze_net_load_uri (NULL, view->icon_uri,
690
(KatzeNetStatusCb)katze_net_icon_status_cb,
691
(KatzeNetTransferCb)katze_net_icon_transfer_cb, view);
699
pixbuf_scaled = gdk_pixbuf_scale_simple (pixbuf,
700
icon_width, icon_height, GDK_INTERP_BILINEAR);
701
g_object_unref (pixbuf);
702
pixbuf = pixbuf_scaled;
703
midori_view_apply_icon (view, pixbuf, view->icon_uri);
1549
1354
"f.push ('$' + l[i].href + '|' + l[i].title);"
1550
1355
"else if (r == 'search' && t == 'application/opensearchdescription+xml') "
1551
1356
"f.push (':' + l[i].href + '|' + l[i].title); "
1552
#if !WEBKIT_CHECK_VERSION (1, 1, 18)
1553
"else if (r && r.indexOf ('icon') != -1) f.push (l[i].href); "
1555
1357
"} if (document.location.href.indexOf ('twitter') != -1)"
1556
1358
"{ var s = document.location.href.split('/'); "
1557
1359
"var u = 'https://api.twitter.com/1/statuses/user_timeline.rss"
1783
1574
const gchar* link_uri = webkit_hit_test_result_get_link_uri (hit_test_result);
1786
#if !(WEBKIT_CHECK_VERSION (1, 3, 1) && defined (HAVE_LIBSOUP_2_29_91))
1787
sokoke_prefetch_uri (view->settings, link_uri, NULL, NULL);
1790
1577
katze_assign (view->link_uri, g_strdup (link_uri));
1791
1578
if (link_uri && g_str_has_prefix (link_uri, "mailto:"))
3923
3706
midori_view_web_view_resource_request_cb, view,
3924
3707
"signal::database-quota-exceeded",
3925
3708
midori_view_web_view_database_quota_exceeded_cb, view,
3926
#if WEBKIT_CHECK_VERSION (1, 1, 23)
3927
3709
"signal::geolocation-policy-decision-requested",
3928
3710
midori_view_web_view_geolocation_decision_cb, view,
3930
#if WEBKIT_CHECK_VERSION (1, 1, 18)
3931
3711
"signal::notify::icon-uri",
3932
3712
midori_web_view_notify_icon_uri_cb, view,
3934
3713
"signal::hovering-over-link",
3935
3714
webkit_web_view_hovering_over_link_cb, view,
3936
3715
"signal::status-bar-text-changed",
4119
3898
webkit_plugin_get_name (plugins->data),
4120
3899
html ? webkit_plugin_get_description (plugins->data) : ""));
4122
#elif WEBKIT_CHECK_VERSION (1, 3, 8)
4123
3902
WebKitWebPluginDatabase* pdb = webkit_get_web_plugin_database ();
4124
3903
GSList* plugins = webkit_web_plugin_database_get_plugins (pdb);
4125
3904
GSList* plugin = plugins;
4132
3911
html ? webkit_web_plugin_get_description (plugin->data) : ""));
4134
3913
webkit_web_plugin_database_plugins_list_free (plugins);
4139
WebKitWebFrame* web_frame = webkit_web_view_get_main_frame (WEBKIT_WEB_VIEW (view->web_view));
4140
JSContextRef js_context = webkit_web_frame_get_global_context (web_frame);
4141
/* Joins available plugins like this: URI1|title1,URI2|title2 */
4142
gchar* value = sokoke_js_script_eval (js_context,
4143
"function plugins (l) { var f = new Array (); for (var i in l) "
4144
"{ var p = l[i].name + '|' + l[i].filename; "
4145
"if (f.indexOf (p) == -1) f.push (p); } return f; }"
4146
"plugins (navigator.plugins)", NULL);
4147
gchar** items = g_strsplit (value, ",", 0);
4150
while (items[i] != NULL)
4152
gchar** parts = g_strsplit (items[i], "|", 2);
4153
if (parts[0] && !g_str_equal (parts[1], "undefined")
4154
&& !midori_web_settings_skip_plugin (parts[1]))
4155
midori_view_add_version (ns_plugins, html, g_strdup_printf ("%s\t%s",
4156
parts[1], html ? parts[0] : ""));
4160
if (g_str_has_prefix (value, "undefined"))
4161
midori_view_add_version (ns_plugins, html, g_strdup_printf ("%s",
4162
"No plugins found"));
4700
4449
midori_view_has_selection (MidoriView* view)
4702
4451
#ifndef HAVE_WEBKIT2
4703
#if WEBKIT_CHECK_VERSION (1, 4, 3)
4704
4452
WebKitDOMDocument* doc;
4705
4453
WebKitDOMDOMWindow* window;
4706
4454
WebKitDOMDOMSelection* selection;
4707
4455
WebKitDOMRange* range;
4710
4457
g_return_val_if_fail (MIDORI_IS_VIEW (view), FALSE);
4713
#if WEBKIT_CHECK_VERSION (1, 4, 3)
4714
4460
doc = webkit_web_view_get_dom_document (WEBKIT_WEB_VIEW (view->web_view));
4715
4461
window = webkit_dom_document_get_default_view (doc);
4716
4462
selection = webkit_dom_dom_window_get_selection (window);