[Xfce4-commits] <midori:master> Use ShellExecuteEx in sokoke_show_uri on Win32

Christian Dywan noreply at xfce.org
Fri Apr 6 20:34:05 CEST 2012


Updating branch refs/heads/master
         to 3a833296b07fd81898ecb59144e2d24de1d265fb (commit)
       from 3d4ee81ee4d46445d45fca6e5f212051fb338421 (commit)

commit 3a833296b07fd81898ecb59144e2d24de1d265fb
Author: Paweł Forysiuk <tuxator at o2.pl>
Date:   Fri Apr 6 20:20:01 2012 +0200

    Use ShellExecuteEx in sokoke_show_uri on Win32
    
    An 'Open With' dialog opens if needed.

 midori/sokoke.c |   69 ++++---------------------------------------------------
 1 files changed, 5 insertions(+), 64 deletions(-)

diff --git a/midori/sokoke.c b/midori/sokoke.c
index b25a3dd..fa8f9df 100644
--- a/midori/sokoke.c
+++ b/midori/sokoke.c
@@ -286,71 +286,12 @@ sokoke_show_uri (GdkScreen*   screen,
     return hildon_uri_open (uri, action, error);
 
     #elif defined (G_OS_WIN32)
+    CoInitializeEx (NULL, COINIT_APARTMENTTHREADED);
+    SHELLEXECUTEINFO info = { sizeof (info) };
+    info.nShow = SW_SHOWNORMAL;
+    info.lpFile = uri;
 
-    const gchar* fallbacks [] = { "explorer" };
-    gsize i;
-    GAppInfo *app_info;
-    GFile *file;
-    gchar *free_uri;
-
-    g_return_val_if_fail (GDK_IS_SCREEN (screen) || !screen, FALSE);
-    g_return_val_if_fail (uri != NULL, FALSE);
-    g_return_val_if_fail (!error || !*error, FALSE);
-
-    file = g_file_new_for_uri (uri);
-    app_info = g_file_query_default_handler (file, NULL, error);
-
-    if (app_info != NULL)
-    {
-        GdkAppLaunchContext *context;
-        gboolean result;
-        GList l;
-
-        context = gdk_app_launch_context_new ();
-        gdk_app_launch_context_set_screen (context, screen);
-        gdk_app_launch_context_set_timestamp (context, timestamp);
-
-        l.data = (char *)file;
-        l.next = l.prev = NULL;
-        result = g_app_info_launch (app_info, &l, (GAppLaunchContext*)context, error);
-
-        g_object_unref (context);
-        g_object_unref (app_info);
-        g_object_unref (file);
-
-        if (result)
-            return TRUE;
-    }
-    else
-        g_object_unref (file);
-
-    free_uri = g_filename_from_uri (uri, NULL, NULL);
-    if (free_uri)
-    {
-        gchar *quoted = g_shell_quote (free_uri);
-        uri = quoted;
-        g_free (free_uri);
-        free_uri = quoted;
-    }
-
-    for (i = 0; i < G_N_ELEMENTS (fallbacks); i++)
-    {
-        gchar* command = g_strconcat (fallbacks[i], " ", uri, NULL);
-        gboolean result = g_spawn_command_line_async (command, error);
-        g_free (command);
-        if (result)
-        {
-            g_free (free_uri);
-            return TRUE;
-        }
-        if (error)
-            *error = NULL;
-    }
-
-    g_free (free_uri);
-
-    return FALSE;
-
+    return ShellExecuteEx (&info);
     #else
 
     #if !GLIB_CHECK_VERSION (2, 28, 0)


More information about the Xfce4-commits mailing list