[Xfce4-commits] <midori:master> Resurrect KatzeNet-based page icon loading

Christian Dywan noreply at xfce.org
Mon Aug 1 22:02:01 CEST 2011


Updating branch refs/heads/master
         to 630e23412aea5914d7fc549ccd66abb15aa2a5ca (commit)
       from ca1891765a441f0a3e8ed2ec0f7d2b83ebd501aa (commit)

commit 630e23412aea5914d7fc549ccd66abb15aa2a5ca
Author: Paweł Forysiuk <tuxator at o2.pl>
Date:   Mon Aug 1 21:57:59 2011 +0200

    Resurrect KatzeNet-based page icon loading
    
    Accidentally removed as part of 0dbee646b7dffbace0f507c .

 midori/midori-view.c |  107 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 107 insertions(+), 0 deletions(-)

diff --git a/midori/midori-view.c b/midori/midori-view.c
index 33e375d..01519c7 100644
--- a/midori/midori-view.c
+++ b/midori/midori-view.c
@@ -770,6 +770,100 @@ midori_view_update_icon (MidoriView* view,
     midori_view_apply_icon (view, icon, NULL);
 }
 
+typedef struct
+{
+    gchar* icon_file;
+    gchar* icon_uri;
+    MidoriView* view;
+} KatzeNetIconPriv;
+
+static void
+katze_net_icon_priv_free (KatzeNetIconPriv* priv)
+{
+    g_free (priv->icon_file);
+    g_free (priv->icon_uri);
+    g_slice_free (KatzeNetIconPriv, priv);
+}
+
+static gboolean
+katze_net_icon_status_cb (KatzeNetRequest*  request,
+                          KatzeNetIconPriv* priv)
+{
+    switch (request->status)
+    {
+        case KATZE_NET_VERIFIED:
+            if (request->mime_type && strncmp (request->mime_type, "image/", 6))
+            {
+                katze_net_icon_priv_free (priv);
+                return FALSE;
+            }
+            break;
+        case KATZE_NET_MOVED:
+            break;
+        default:
+            katze_net_icon_priv_free (priv);
+            return FALSE;
+    }
+    return TRUE;
+}
+
+static void
+katze_net_icon_transfer_cb (KatzeNetRequest*  request,
+                            KatzeNetIconPriv* priv)
+{
+    GdkPixbuf* pixbuf;
+    FILE* fp;
+    GdkPixbuf* pixbuf_scaled;
+    gint icon_width, icon_height;
+    size_t ret;
+    GtkSettings* settings;
+
+    if (request->status == KATZE_NET_MOVED)
+        return;
+
+    pixbuf = NULL;
+    if (request->data)
+    {
+        if ((fp = fopen (priv->icon_file, "wb")))
+        {
+            ret  = fwrite (request->data, 1, request->length, fp);
+            fclose (fp);
+            if ((ret - request->length != 0))
+            {
+                g_warning ("Error writing to file %s "
+                           "in  katze_net_icon_transfer_cb()", priv->icon_file);
+            }
+            pixbuf = gdk_pixbuf_new_from_file (priv->icon_file, NULL);
+        }
+        else
+            pixbuf = katze_pixbuf_new_from_buffer ((guchar*)request->data,
+                            request->length, request->mime_type, NULL);
+
+        if (pixbuf)
+            g_object_ref (pixbuf);
+
+        g_hash_table_insert (priv->view->memory,
+                g_strdup (priv->icon_file), pixbuf);
+    }
+
+    if (!pixbuf)
+    {
+        midori_view_update_icon (priv->view, NULL);
+        katze_net_icon_priv_free (priv);
+        return;
+    }
+
+    settings = gtk_widget_get_settings (priv->view->web_view);
+    gtk_icon_size_lookup_for_settings (settings, GTK_ICON_SIZE_MENU, &icon_width, &icon_height);
+    pixbuf_scaled = gdk_pixbuf_scale_simple (pixbuf, icon_width, icon_height, GDK_INTERP_BILINEAR);
+
+    g_object_unref (pixbuf);
+
+    katze_assign (priv->view->icon_uri, g_strdup (priv->icon_uri));
+    midori_view_update_icon (priv->view, pixbuf_scaled);
+    katze_net_icon_priv_free (priv);
+}
+
 static void
 _midori_web_view_load_icon (MidoriView* view)
 {
@@ -817,6 +911,19 @@ _midori_web_view_load_icon (MidoriView* view)
             g_free (icon_file);
             katze_assign (view->icon_uri, icon_uri);
         }
+        else if (!view->special)
+        {
+            KatzeNetIconPriv* priv;
+
+            priv = g_slice_new (KatzeNetIconPriv);
+            priv->icon_file = icon_file;
+            priv->icon_uri = icon_uri;
+            priv->view = view;
+
+            katze_net_load_uri (NULL, icon_uri,
+                (KatzeNetStatusCb)katze_net_icon_status_cb,
+                (KatzeNetTransferCb)katze_net_icon_transfer_cb, priv);
+        }
     }
 
     if (pixbuf)


More information about the Xfce4-commits mailing list