]> spindle.queued.net Git - midori/commitdiff
Display a message if a document cannot be displayed
authorChristian Dywan <christian@twotoasts.de>
Sun, 11 Jan 2009 23:26:45 +0000 (00:26 +0100)
committerChristian Dywan <christian@twotoasts.de>
Sun, 11 Jan 2009 23:26:45 +0000 (00:26 +0100)
midori/midori-view.c

index 5d035569f9df243edfe9d5cd8a1ac79d82b7c5b4..847d7b9ea0eb6a128fb7134c11b641dc35ef3992 100644 (file)
 #include <glib/gi18n.h>
 #include <webkit/webkit.h>
 
+#ifndef WEBKIT_CHECK_VERSION
+    #define WEBKIT_CHECK_VERSION(a,b,c) 0
+#endif
+
 /* This is unstable API, so we need to declare it */
 gchar*
 webkit_web_view_get_selected_text (WebKitWebView* web_view);
@@ -1037,6 +1041,10 @@ webkit_web_view_mime_type_decision_cb (GtkWidget*      web_view,
                                        gpointer        decision,
                                        MidoriView*     view)
 {
+    #if WEBKIT_CHECK_VERSION (1, 0, 0)
+    gchar* uri;
+    #endif
+
     if (web_frame != webkit_web_view_get_main_frame (WEBKIT_WEB_VIEW (web_view)))
         return FALSE;
 
@@ -1045,7 +1053,25 @@ webkit_web_view_mime_type_decision_cb (GtkWidget*      web_view,
     g_object_notify (G_OBJECT (view), "mime-type");
 
     /* TODO: Display contents with a Viewable if WebKit can't do it */
-    /* TODO: Offer to download file if it cannot be displayed at all */
+    /* TODO: Offer downloading file if it cannot be displayed at all */
+
+    #if WEBKIT_CHECK_VERSION (1, 1, 0)
+    if (webkit_web_view_can_show_mime_type (WEBKIT_WEB_VIEW (web_view), mime_type))
+    #else
+    if (g_str_has_prefix (mime_type, "image/") ||
+        g_strrstr (mime_type, "script") ||
+        g_str_has_prefix (mime_type, "text/") || g_strrstr (mime_type, "xml"))
+    #endif
+        return TRUE;
+
+    #if WEBKIT_CHECK_VERSION (1, 0, 0)
+    uri = g_strdup_printf ("error:nodisplay %s",
+        webkit_network_request_get_uri (request));
+    midori_view_set_uri (view, uri);
+    g_free (uri);
+    #else
+    midori_view_set_uri (view, "error:nodisplay ");
+    #endif
 
     return TRUE;
 }
@@ -1525,7 +1551,23 @@ midori_view_set_uri (MidoriView*  view,
         if (g_str_has_prefix (uri, "error:"))
         {
             data = NULL;
-            if (!strncmp (uri, "error:nodocs ", 13))
+            if (!strncmp (uri, "error:nodisplay ", 16))
+            {
+                gchar* title;
+
+                katze_assign (view->uri, g_strdup (&uri[16]));
+                title = g_strdup_printf (_("Document cannot be displayed"));
+                data = g_strdup_printf (
+                    "<html><head><title>%s</title></head>"
+                    "<body><h1>%s</h1>"
+                    "<img src=\"file://" DATADIR "/midori/logo-shade.png\" "
+                    "style=\"position: absolute; right: 15px; bottom: 15px;\">"
+                    "<p />The document %s cannot be displayed."
+                    "</body></html>",
+                    title, title, view->uri);
+                g_free (title);
+            }
+            else if (!strncmp (uri, "error:nodocs ", 13))
             {
                 gchar* title;