diff -rupN evince-3.16.1/shell/ev-application.c src/evince-3.16.1/shell/ev-application.c --- evince-3.16.1/shell/ev-application.c 2015-05-27 12:02:51.000000000 +0200 +++ src/evince-3.16.1/shell/ev-application.c 2015-07-25 14:18:31.886559695 +0200 @@ -44,6 +44,12 @@ #include "ev-media-player-keys.h" #endif /* ENABLE_DBUS */ +#ifdef G_OS_WIN32 +#include +#include +#include +#endif + struct _EvApplication { GtkApplication base_instance; @@ -172,8 +178,12 @@ ev_spawn (const char *uri, path = g_build_filename (BINDIR, "evince", NULL); #endif + #ifndef G_OS_WIN32 g_string_append_printf (cmd, " %s", path); g_free (path); + #else + g_string_append_printf (cmd, "%s", ""); + #endif /* Page label */ if (dest) { @@ -212,34 +222,50 @@ ev_spawn (const char *uri, break; } - cmdline = g_string_free (cmd, FALSE); - app = g_app_info_create_from_commandline (cmdline, NULL, 0, &error); - if (app != NULL) { - GList uri_list; - GList *uris = NULL; - GdkAppLaunchContext *ctx; - - ctx = gdk_display_get_app_launch_context (gdk_screen_get_display (screen)); - gdk_app_launch_context_set_screen (ctx, screen); - gdk_app_launch_context_set_timestamp (ctx, timestamp); - - /* Some URIs can be changed when passed through a GFile - * (for instance unsupported uris with strange formats like mailto:), - * so if you have a textual uri you want to pass in as argument, - * consider using g_app_info_launch_uris() instead. - * See https://bugzilla.gnome.org/show_bug.cgi?id=644604 - */ - if (uri) { - uri_list.data = (gchar *)uri; - uri_list.prev = uri_list.next = NULL; - uris = &uri_list; - } - g_app_info_launch_uris (app, uris, G_APP_LAUNCH_CONTEXT (ctx), &error); + #ifdef G_OS_WIN32 + g_string_append(cmd, " "); + g_string_append(cmd, uri); + #endif + + cmdline = g_string_free (cmd, FALSE); - g_object_unref (app); - g_object_unref (ctx); + #ifdef G_OS_WIN32 + { + ShellExecute(NULL,"open",path,cmdline,"",SW_SHOWDEFAULT); + fprintf(stderr, "INFO: Spawning evince process with command line '%s %s'\n",path,cmdline); + g_free(path); } + #else + app = g_app_info_create_from_commandline (cmdline, NULL, 0, &error); + + if (app != NULL) { + GList uri_list; + GList *uris = NULL; + GdkAppLaunchContext *ctx; + + + ctx = gdk_display_get_app_launch_context (gdk_screen_get_display (screen)); + gdk_app_launch_context_set_screen (ctx, screen); + gdk_app_launch_context_set_timestamp (ctx, timestamp); + + /* Some URIs can be changed when passed through a GFile + * (for instance unsupported uris with strange formats like mailto:), + * so if you have a textual uri you want to pass in as argument, + * consider using g_app_info_launch_uris() instead. + * See https://bugzilla.gnome.org/show_bug.cgi?id=644604 + */ + if (uri) { + uri_list.data = (gchar *)uri; + uri_list.prev = uri_list.next = NULL; + uris = &uri_list; + } + g_app_info_launch_uris (app, uris, G_APP_LAUNCH_CONTEXT (ctx), &error); + + g_object_unref (app); + g_object_unref (ctx); + } + #endif if (error != NULL) { g_printerr ("Error launching evince %s: %s\n", uri, error->message);