[GTK] Check for xdg-open at run time

Remove HTML_VIEWER compile-time setting.

If xdg-open doesn't exist use user web browser preference as fallback.

Change-Id: I3b4a4a1a36b0192d75f2c97595f37d0d88a0941e
Reviewed-on: https://code.wireshark.org/review/14805
Petri-Dish: João Valverde <j@v6e.pt>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Peter Wu <peter@lekensteyn.nl>
Tested-by: Peter Wu <peter@lekensteyn.nl>
Reviewed-by: João Valverde <j@v6e.pt>
This commit is contained in:
João Valverde 2016-04-04 02:25:01 +01:00 committed by João Valverde
parent 320726b83e
commit ed6eecd79e
7 changed files with 49 additions and 184 deletions

View File

@ -658,8 +658,6 @@ if (NOT WIN32)
set(M_REQUIRED TRUE)
endif()
set(PACKAGELIST ${PACKAGELIST} HtmlViewer)
set(PACKAGELIST ${PACKAGELIST} LIBSSH)
set(LIBSSH_OPTIONS "0.6")
@ -816,8 +814,6 @@ foreach(PACKAGE ${PACKAGELIST})
set(PACKAGE_VAR "PYTHONINTERP")
elseif(${PACKAGE} STREQUAL "Gettext")
set(PACKAGE_VAR "GETTEXT")
elseif(${PACKAGE} STREQUAL "HtmlViewer")
set(PACKAGE_VAR "HTML_VIEWER")
elseif(${PACKAGE} STREQUAL "Perl")
set(PACKAGE_VAR "PERL")
else()

View File

@ -1,51 +0,0 @@
#
# - Find an html viewer program
#
# HTML_VIEWER_EXECUTABLE - the full path to perl
# HTML_VIEWER_FOUND - If false, don't attempt to use perl.
include( FindCygwin )
find_program( HTML_VIEWER_EXECUTABLE
NAMES
xdg-open
mozilla
htmlview
open
$ENV{HTML_VIEWER}
PATHS
${CYGWIN_INSTALL_PATH}/bin
/bin
/usr/bin
/usr/local/bin
/sbin
)
if( NOT HTML_VIEWER_EXECUTABLE AND WIN32 )
foreach( _KEY
[HKEY_CURRENT_USER\\Software\\Classes\\http\\shell\\open\\command]
[HKEY_CLASSES_ROOT\\http\\shell\\open\\command]
)
get_filename_component( _NAME_WE ${_KEY} NAME_WE )
get_filename_component( _PATH ${_KEY} PATH )
string(REGEX REPLACE "\"" "" _NAME_WE ${_NAME_WE})
string(REGEX REPLACE "\"" "" _PATH ${_PATH})
find_program( HTML_VIEWER_EXECUTABLE "${_PATH}/${_NAME_WE}" NO_DEFAULT_PATH )
if( HTML_VIEWER_EXECUTABLE )
break()
endif()
endforeach()
endif()
include( FindPackageHandleStandardArgs )
find_package_handle_standard_args( HtmlViewer DEFAULT_MSG HTML_VIEWER_EXECUTABLE )
if (NOT HTML_VIEWER_EXECUTABLE)
set(HTML_VIEWER_EXECUTABLE "")
set(HTMLVIEWER_FOUND ON)
endif()
# For compat with configure
set( HTML_VIEWER ${HTML_VIEWER_EXECUTABLE} )
mark_as_advanced( HTML_VIEWER_EXECUTABLE )

View File

@ -360,9 +360,6 @@
/* Define to 1 if you have the <winsock2.h> header file. */
#cmakedefine HAVE_WINSOCK2_H 1
/* HTML viewer, e.g. mozilla */
#cmakedefine HTML_VIEWER "${HTML_VIEWER_EXECUTABLE}"
/* Name of package */
#cmakedefine PACKAGE

View File

@ -229,9 +229,6 @@
#define VERSION_FLAVOR "@VERSION_FLAVOR@"
/* We shouldn't need this under Windows but we'll define it anyway. */
#define HTML_VIEWER "mozilla"
/* Check for the required _MSC_VER */
#if MSC_VER_REQUIRED != _MSC_VER
#define WS_TO_STRING2(x) #x

View File

@ -189,41 +189,6 @@ then
AC_MSG_ERROR(I couldn't find pod2html; make sure it's installed and in your path)
fi
#
# Checks for programs used by Wireshark/TShark/etc.
#
#
# XXX - this looks for various HTML viewers on the host, not the target;
# we really want to know what's available on the target, for cross-builds.
# That would probably require us to, at run time, look for xdg-open and,
# if we don't find it, look for mozilla, htmlview, etc.
#
AC_PATH_PROG(HTML_VIEWER, xdg-open)
if test "x$HTML_VIEWER" != x
then
#
# XXX - the HTML_VIEWER shell variable is the full path of xdg-open.
# Define some variable to be that, so we just run that?
#
AC_DEFINE(HAVE_XDG_OPEN, 1, [Define if we have xdg-open])
#
# XXX - we have to define HTML_VIEWER for the prefs.c code that
# sets the default value of the Web browser preference, even
# though that preference won't be offered.
#
AC_DEFINE_UNQUOTED(HTML_VIEWER, "xdg-open", [HTML viewer, e.g. mozilla])
else
AC_PATH_PROG(HTML_VIEWER, htmlview)
if test "x$HTML_VIEWER" = x
then
AC_DEFINE_UNQUOTED(HTML_VIEWER, "mozilla", [HTML viewer, e.g. mozilla])
else
AC_DEFINE_UNQUOTED(HTML_VIEWER, "htmlview", [HTML viewer, e.g. mozilla])
fi
fi
#
# Set "ac_supports_gcc_flags" if the compiler is known to support GCC-style
# flags such as -pedantic, -W warning flags and -f feature flags. Currently,

View File

@ -3100,11 +3100,7 @@ pre_init_prefs(void)
prefs.gui_update_channel = UPDATE_CHANNEL_STABLE;
prefs.gui_update_interval = 60*60*24; /* Seconds */
if (prefs.gui_webbrowser) g_free(prefs.gui_webbrowser);
#ifdef HTML_VIEWER
prefs.gui_webbrowser = g_strdup(HTML_VIEWER " %s");
#else
prefs.gui_webbrowser = g_strdup("");
#endif
if (prefs.gui_window_title) g_free(prefs.gui_window_title);
prefs.gui_window_title = g_strdup("");
if (prefs.gui_prepend_window_title) g_free(prefs.gui_prepend_window_title);

View File

@ -126,23 +126,23 @@
/* Mac OS X - use Launch Services to start a browser */
#include <CoreFoundation/CoreFoundation.h>
#include <ApplicationServices/ApplicationServices.h>
#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
/* Everything else */
#define TRY_XDG_OPEN_THEN_BROWSER_FALLBACK
#endif
#ifdef MUST_LAUNCH_BROWSER_OURSELVES
#ifdef TRY_XDG_OPEN_THEN_BROWSER_FALLBACK
static gchar* strreplace (const gchar *string,
const gchar *delimiter,
const gchar *replacement);
static gboolean xdg_open(const gchar *url);
#endif
gboolean
browser_needs_pref(void)
{
#ifdef MUST_LAUNCH_BROWSER_OURSELVES
#ifdef TRY_XDG_OPEN_THEN_BROWSER_FALLBACK
return TRUE;
#else
return FALSE;
@ -192,50 +192,18 @@ browser_open_url (const gchar *url)
CFRelease(url_CFURL);
return (status == 0);
#elif defined(HAVE_XDG_OPEN)
#else
GError *error = NULL;
const gchar *argv[3];
gchar *browser, *argument, *cmd;
gchar **argv;
gboolean retval;
g_return_val_if_fail (url != NULL, FALSE);
argv[0] = "xdg-open";
argv[1] = url;
argv[2] = NULL;
/*
* XXX - use g_spawn_on_screen() so the browser window shows up on
* the same screen?
*
* Also, g_spawn_async() shouldn't modify argv but takes it as non-const!
*/
retval = g_spawn_async (NULL, (gchar**) 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;
gchar *browser;
gchar *argument;
gchar *cmd;
gchar **argv;
gboolean retval;
g_return_val_if_fail (url != NULL, FALSE);
if (xdg_open(url)) {
return TRUE;
}
/* browser = gimp_gimprc_query ("web-browser");*/
browser = g_strdup(prefs.gui_webbrowser);
@ -349,50 +317,18 @@ filemanager_open_directory (const gchar *path)
CFRelease(path_CFURL);
return (status == 0);
#elif defined(HAVE_XDG_OPEN)
#else
GError *error = NULL;
const gchar *argv[3];
gchar *browser, *argument, *cmd;
gchar **argv;
gboolean retval;
g_return_val_if_fail (path != NULL, FALSE);
argv[0] = "xdg-open";
argv[1] = path;
argv[2] = NULL;
/*
* XXX - use g_spawn_on_screen() so the file managaer window shows up on
* the same screen?
*
* Also, g_spawn_async shouldn't modify argv but takes it as non-const!
*/
retval = g_spawn_async (NULL, (gchar**) 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;
gchar *browser;
gchar *argument;
gchar *cmd;
gchar **argv;
gboolean retval;
g_return_val_if_fail (path != NULL, FALSE);
if (xdg_open(path)) {
return TRUE;
}
/* browser = gimp_gimprc_query ("web-browser");*/
browser = g_strdup(prefs.gui_webbrowser);
@ -466,7 +402,7 @@ filemanager_open_directory (const gchar *path)
#endif
}
#ifdef MUST_LAUNCH_BROWSER_OURSELVES
#ifdef TRY_XDG_OPEN_THEN_BROWSER_FALLBACK
static gchar*
strreplace (const gchar *string,
@ -487,7 +423,36 @@ strreplace (const gchar *string,
return ret;
}
#endif /* MUST_LAUNCH_BROWSER_OURSELVES */
gboolean xdg_open(const gchar *url) {
GError *error = NULL;
gchar *argv[3];
gboolean retval;
argv[0] = "xdg-open";
DIAG_OFF(cast-qual)
argv[1] = (gchar *)url;
DIAG_ON(cast-qual)
argv[2] = NULL;
/*
* XXX - use g_spawn_on_screen() so the browser window shows up on
* the same screen?
*
* Also, g_spawn_async() shouldn't modify argv but takes it as non-const!
*/
retval = g_spawn_async (NULL, argv, NULL,
G_SPAWN_SEARCH_PATH,
NULL, NULL,
NULL, &error);
if (retval)
return TRUE;
g_debug("Could not execute xdg-open: %s", error->message);
g_error_free(error);
return FALSE;
}
#endif /* TRY_XDG_OPEN_THEN_BROWSER_FALLBACK */
/* browse a file relative to the data dir */