diff --git a/src/af/util/xp/ut_go_file.cpp b/src/af/util/xp/ut_go_file.cpp index 0fcd0c2..ff556cf 100644 --- a/src/af/util/xp/ut_go_file.cpp +++ b/src/af/util/xp/ut_go_file.cpp @@ -1663,8 +1663,11 @@ UT_go_file_get_date_changed (char const *uri) } /* ------------------------------------------------------------------------- */ - -#if !defined(TOOLKIT_GTK_ALL) && !defined(TOOLKIT_COCOA) +#ifdef TOOLKIT_GTK_ALL +// we need this for systems where gtk_show_uri() is broken +// don't get me started. +// Note that is gtk_show_uri() fails but return true, then +// there is nothing that can be done. static char * check_program (char const *prog) { @@ -1677,39 +1680,10 @@ check_program (char const *prog) return NULL; return g_strdup (prog); } -#endif -#ifdef G_OS_WIN32 -#include "ut_Win32LocaleString.h" -#endif - -GError * -UT_go_url_show (gchar const *url) +static void +fallback_open_uri(const gchar* url, GError** err) { -#ifdef G_OS_WIN32 - UT_Win32LocaleString str; - str.fromUTF8 (url); - ShellExecuteW (NULL, L"open", str.c_str(), NULL, NULL, SW_SHOWNORMAL); - return NULL; -#elif TOOLKIT_COCOA - CFStringRef urlStr = CFStringCreateWithCString(kCFAllocatorDefault, url, kCFStringEncodingUTF8); - CFURLRef cfUrl = CFURLCreateWithString(kCFAllocatorDefault, urlStr, NULL); - OSStatus err = LSOpenCFURLRef(cfUrl, NULL); - CFRelease(cfUrl); - CFRelease(urlStr); - if (err != noErr) { - ; - } - return NULL; -#else - GError *err = NULL; -#if GTK_CHECK_VERSION(2,14,0) - gtk_show_uri (NULL, url, GDK_CURRENT_TIME, &err); - return err; -#elif defined(WITH_GNOMEVFS) - gnome_vfs_url_show (url); - return err; -#else gchar *browser = NULL; gchar *clean_url = NULL; @@ -1718,6 +1692,7 @@ UT_go_url_show (gchar const *url) if (browser == NULL) { static char const * const browsers[] = { + "xdg-open", /* XDG. you shouldn't need anything else */ "sensible-browser", /* debian */ "epiphany", /* primary gnome */ "galeon", /* secondary gnome */ @@ -1742,7 +1717,7 @@ UT_go_url_show (gchar const *url) gchar **argv = NULL; char *cmd_line = g_strconcat (browser, " %1", NULL); - if (g_shell_parse_argv (cmd_line, &argc, &argv, &err)) { + if (g_shell_parse_argv (cmd_line, &argc, &argv, err)) { /* check for '%1' in an argument and substitute the url * otherwise append it */ gint i; @@ -1765,13 +1740,50 @@ UT_go_url_show (gchar const *url) argv[argc-1] = NULL; } g_spawn_async (NULL, argv, NULL, G_SPAWN_SEARCH_PATH, - NULL, NULL, NULL, &err); + NULL, NULL, NULL, err); g_strfreev (argv); } g_free (cmd_line); } g_free (browser); g_free (clean_url); +} +#endif + +#ifdef G_OS_WIN32 +#include "ut_Win32LocaleString.h" +#endif + +GError * +UT_go_url_show (gchar const *url) +{ +#ifdef G_OS_WIN32 + UT_Win32LocaleString str; + str.fromUTF8 (url); + ShellExecuteW (NULL, L"open", str.c_str(), NULL, NULL, SW_SHOWNORMAL); + return NULL; +#elif TOOLKIT_COCOA + CFStringRef urlStr = CFStringCreateWithCString(kCFAllocatorDefault, url, kCFStringEncodingUTF8); + CFURLRef cfUrl = CFURLCreateWithString(kCFAllocatorDefault, urlStr, NULL); + OSStatus err = LSOpenCFURLRef(cfUrl, NULL); + CFRelease(cfUrl); + CFRelease(urlStr); + if (err != noErr) { + ; + } + return NULL; +#else + GError *err = NULL; +#if GTK_CHECK_VERSION(2,14,0) + if(!gtk_show_uri (NULL, url, GDK_CURRENT_TIME, &err)) { + fallback_open_uri(url, &err); + } + return err; +#elif defined(WITH_GNOMEVFS) + gnome_vfs_url_show (url); + return err; +#else + fallback_open_uri(url, &err); return err; #endif #endif