From 3a833296b07fd81898ecb59144e2d24de1d265fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Forysiuk?= Date: Fri, 6 Apr 2012 20:20:01 +0200 Subject: [PATCH] Use ShellExecuteEx in sokoke_show_uri on Win32 An 'Open With' dialog opens if needed. --- midori/sokoke.c | 69 ++++--------------------------------------------- 1 file changed, 5 insertions(+), 64 deletions(-) diff --git a/midori/sokoke.c b/midori/sokoke.c index b25a3dd0..fa8f9dfd 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)