forked from osmocom/wireshark
[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:
parent
320726b83e
commit
ed6eecd79e
|
@ -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()
|
||||
|
|
|
@ -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 )
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
35
configure.ac
35
configure.ac
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue