From 8f244766f380b2f69364b51a0f44461d49e9563f Mon Sep 17 00:00:00 2001 From: Guy Harris Date: Sat, 21 Jun 2008 18:09:17 +0000 Subject: If we have xdg-open, always run that to launch a Web browser, and ignore the Web browser setting; that should honor the user's *real* preferred Web browser setting (i.e., the one they've selected in their desktop environment). Don't bother defining HTML_VIEWER as "xdg-open" if we have xdg-open - we don't need it. svn path=/trunk/; revision=25514 --- gtk/webbrowser.c | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) (limited to 'gtk') diff --git a/gtk/webbrowser.c b/gtk/webbrowser.c index 88914f731f..50b6a2dfd2 100644 --- a/gtk/webbrowser.c +++ b/gtk/webbrowser.c @@ -61,6 +61,8 @@ /* Mac OS X - use Launch Services to start a browser */ #include #include +#elif defined(HAVE_XDG_OPEN) +/* UNIX+X11 desktop with Portland Group stuff - use xdg-open to start a browser */ #else /* Everything else - launch the browser ourselves */ #define MUST_LAUNCH_BROWSER_OURSELVES @@ -125,6 +127,38 @@ browser_open_url (const gchar *url) CFRelease(url_CFURL); return (status == 0); +#elif defined(HAVE_XDG_OPEN) + + GError *error = NULL; + gchar *argv[3]; + gboolean retval; + + g_return_val_if_fail (url != NULL, FALSE); + + argv[0] = "xdg-open"; + argv[1] = (char *)url; /* Grr - g_spawn_async() shouldn't modify this */ + argv[2] = NULL; + + /* + * XXX - use g_spawn_on_screen() so the browser window shows up on + * the same screen? + */ + retval = g_spawn_async (NULL, argv, NULL, + G_SPAWN_SEARCH_PATH, + NULL, NULL, + NULL, &error); + + if (! retval) + { + simple_dialog(ESD_TYPE_WARN, ESD_BTN_OK, + "%sCould not execute xdg-open: %s\n\n\"%s\"", + simple_dialog_primary_start(), simple_dialog_primary_end(), + error->message); + g_error_free (error); + } + + return retval; + #elif defined(MUST_LAUNCH_BROWSER_OURSELVES) GError *error = NULL; @@ -307,7 +341,7 @@ filemanager_open_directory (const gchar *path) argv[2] = NULL; /* - * XXX - use g_spawn_on_screen() so the browser window shows up on + * XXX - use g_spawn_on_screen() so the file managaer window shows up on * the same screen? */ retval = g_spawn_async (NULL, argv, NULL, -- cgit v1.2.1