]> spindle.queued.net Git - midori/commitdiff
Ask GIO for supported URI schemes
authorChristian Dywan <christian@twotoasts.de>
Wed, 20 Oct 2010 18:56:05 +0000 (20:56 +0200)
committerChristian Dywan <christian@twotoasts.de>
Wed, 20 Oct 2010 18:56:05 +0000 (20:56 +0200)
sokoke_external_uri supersedes hardcoded support for tel:
and callto: and notably doesn't count http(s).

midori/midori-view.c
midori/sokoke.c
midori/sokoke.h

index 0679b2f4075e8e43139d882dbc1bf9ed807b487f..9bda7bc24b3908abbb6e69af0ac2cd72bdae6d82 100644 (file)
@@ -949,7 +949,7 @@ midori_view_web_view_navigation_decision_cb (WebKitWebView*             web_view
                                              MidoriView*                view)
 {
     const gchar* uri = webkit_network_request_get_uri (request);
-    if (g_str_has_prefix (uri, "mailto:") || g_str_has_prefix (uri, "tel:"))
+    if (g_str_has_prefix (uri, "mailto:") || sokoke_external_uri (uri))
     {
         if (sokoke_show_uri (gtk_widget_get_screen (GTK_WIDGET (web_view)),
                              uri, GDK_CURRENT_TIME, NULL))
@@ -3861,9 +3861,7 @@ midori_view_set_uri (MidoriView*  view,
                 g_free (exception);
             }
         }
-        else if (g_str_has_prefix (uri, "mailto:")
-              || g_str_has_prefix (uri, "tel:")
-              || g_str_has_prefix (uri, "callto:"))
+        else if (g_str_has_prefix (uri, "mailto:") || sokoke_external_uri (uri))
         {
             sokoke_show_uri (NULL, uri, GDK_CURRENT_TIME, NULL);
         }
index 02910d6fd82eeb2dde9f04999f136a89eac5424a..9a0d960bce5973cad5248668f6a3e9d46ea103b5 100644 (file)
@@ -739,6 +739,23 @@ sokoke_resolve_hostname (const gchar* hostname)
     return host_resolved == 1 ? TRUE : FALSE;
 }
 
+gboolean
+sokoke_external_uri (const gchar* uri)
+{
+    gchar* scheme;
+    GAppInfo* info;
+
+    if (!uri || !strncmp (uri, "http", 4))
+        return FALSE;
+
+    scheme = g_uri_parse_scheme (uri);
+    info = g_app_info_get_default_for_uri_scheme (scheme);
+    g_free (scheme);
+    if (info)
+        g_object_unref (info);
+    return info != NULL;
+}
+
 /**
  * sokoke_magic_uri:
  * @uri: a string typed by a user
@@ -761,8 +778,7 @@ sokoke_magic_uri (const gchar* uri)
     /* Just return if it's a javascript: or mailto: uri */
     if (!strncmp (uri, "javascript:", 11)
      || !strncmp (uri, "mailto:", 7)
-     || !strncmp (uri, "tel:", 4)
-     || !strncmp (uri, "callto:", 7)
+     || sokoke_external_uri (uri)
      || !strncmp (uri, "data:", 5)
      || !strncmp (uri, "about:", 6))
         return g_strdup (uri);
index 5515486d139e301d306053234ee2dbfeb89067ca..288e79abe3811664200efdb1328f120bddcbbed7 100644 (file)
@@ -118,6 +118,9 @@ sokoke_hostname_from_uri                (const gchar*    uri,
 gchar*
 sokoke_uri_to_ascii                     (const gchar*    uri);
 
+gboolean
+sokoke_external_uri                     (const gchar*    uri);
+
 gchar*
 sokoke_magic_uri                        (const gchar*    uri);