aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoão Valverde <joao.valverde@tecnico.ulisboa.pt>2016-04-04 02:25:01 +0100
committerJoão Valverde <j@v6e.pt>2016-04-09 23:40:51 +0000
commited6eecd79e7b933bccc442589ed3689a646c1256 (patch)
tree3bc759a68ea34eb322c4e78679f9a72f84f7fc91
parent320726b83e2096d9431f28208437a738b31d8ad9 (diff)
[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>
-rw-r--r--CMakeLists.txt4
-rw-r--r--cmake/modules/FindHtmlViewer.cmake51
-rw-r--r--cmakeconfig.h.in3
-rw-r--r--config.h.win323
-rw-r--r--configure.ac35
-rw-r--r--epan/prefs.c4
-rw-r--r--ui/gtk/webbrowser.c133
7 files changed, 49 insertions, 184 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8b864fc4ce..fcc3ea49ad 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -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()
diff --git a/cmake/modules/FindHtmlViewer.cmake b/cmake/modules/FindHtmlViewer.cmake
deleted file mode 100644
index 0649693185..0000000000
--- a/cmake/modules/FindHtmlViewer.cmake
+++ /dev/null
@@ -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 )
diff --git a/cmakeconfig.h.in b/cmakeconfig.h.in
index bb62fb6737..ea674a7e5f 100644
--- a/cmakeconfig.h.in
+++ b/cmakeconfig.h.in
@@ -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
diff --git a/config.h.win32 b/config.h.win32
index 3273f7b8ed..9e66c4563c 100644
--- a/config.h.win32
+++ b/config.h.win32
@@ -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
diff --git a/configure.ac b/configure.ac
index 50f6c85ff8..3283953fcf 100644
--- a/configure.ac
+++ b/configure.ac
@@ -190,41 +190,6 @@ then
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,
# we assume GCC and clang do; other compilers should be added here.
diff --git a/epan/prefs.c b/epan/prefs.c
index c7d7a2b906..c5865baf9e 100644
--- a/epan/prefs.c
+++ b/epan/prefs.c
@@ -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);
diff --git a/ui/gtk/webbrowser.c b/ui/gtk/webbrowser.c
index 67457e44ee..c3488fdd75 100644
--- a/ui/gtk/webbrowser.c
+++ b/ui/gtk/webbrowser.c
@@ -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 */