add a preference setting for the web browser command

svn path=/trunk/; revision=11269
This commit is contained in:
Ulf Lamping 2004-06-29 17:10:53 +00:00
parent fa6e690634
commit 891608f72e
5 changed files with 70 additions and 16 deletions

View File

@ -1,7 +1,7 @@
/* gui_prefs.c
* Dialog box for GUI preferences
*
* $Id: gui_prefs.c,v 1.74 2004/06/20 15:57:10 ulfl Exp $
* $Id: gui_prefs.c,v 1.75 2004/06/29 17:10:53 ulfl Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@ -47,6 +47,8 @@
#include "packet_list.h"
#include "toolbar.h"
#include "recent.h"
#include "webbrowser.h"
static gint fetch_enum_value(gpointer control, const enum_val_t *enumvals);
static gint fileopen_dir_changed_cb(GtkWidget *myentry _U_, GdkEvent *event, gpointer parent_w);
@ -74,6 +76,7 @@ static gint recent_files_count_changed_cb(GtkWidget *recent_files_entry _U_,
#define GUI_RECENT_FILES_COUNT_KEY "recent_files_count"
#define GUI_FILEOPEN_DIR_KEY "fileopen_directory"
#define GUI_ASK_UNSAVED_KEY "ask_unsaved"
#define GUI_WEBBROWSER_KEY "webbrowser"
#define GUI_TOOLBAR_STYLE_KEY "toolbar_style"
@ -180,6 +183,7 @@ gui_prefs_show(void)
GtkWidget *fileopen_rb, *fileopen_dir_te, *toolbar_style_om;
GtkWidget *filter_toolbar_placement_om;
GtkWidget *recent_files_count_max_te, *ask_unsaved_cb;
GtkWidget *webbrowser_te;
GtkWidget *save_position_cb, *save_size_cb, *save_maximized_cb;
#if GTK_MAJOR_VERSION < 2
GtkWidget *expander_style_om, *line_style_om;
@ -312,10 +316,19 @@ gui_prefs_show(void)
fileopen_selected_cb(NULL, main_vb);
/* ask for unsaved capture files? */
ask_unsaved_cb = create_preference_check_button(main_tb, pos++,
"Ask for unsaved capture files:", NULL, prefs.gui_ask_unsaved);
OBJECT_SET_DATA(main_vb, GUI_ASK_UNSAVED_KEY, ask_unsaved_cb);
/* Webbrowser */
if(browser_needs_pref()) {
webbrowser_te = create_preference_entry(main_tb, pos++,
"Web browser command:", NULL, prefs.gui_webbrowser);
gtk_entry_set_text(GTK_ENTRY(webbrowser_te), prefs.gui_webbrowser);
OBJECT_SET_DATA(main_vb, GUI_WEBBROWSER_KEY, webbrowser_te);
}
/* Show 'em what we got */
gtk_widget_show_all(main_vb);
@ -417,6 +430,13 @@ gui_prefs_fetch(GtkWidget *w)
prefs.gui_ask_unsaved =
gtk_toggle_button_get_active(OBJECT_GET_DATA(w, GUI_ASK_UNSAVED_KEY));
if(browser_needs_pref()) {
g_free(prefs.gui_webbrowser);
prefs.gui_webbrowser = g_strdup(gtk_entry_get_text(
GTK_ENTRY(OBJECT_GET_DATA(w, GUI_WEBBROWSER_KEY))));
}
/*
* XXX - we need to have a way to fetch the preferences into
* local storage and only set the permanent preferences if there

View File

@ -30,11 +30,14 @@
#include <string.h> /* strlen, strstr */
#include <glib.h>
#include <gtk/gtk.h>
#include <epan/filesystem.h>
#include "prefs.h"
#include "webbrowser.h"
#include "compat_macros.h"
#include "simple_dialog.h"
#if defined(G_OS_WIN32)
/* Win32 - use Windows shell services to start a browser */
@ -56,6 +59,16 @@ static gchar* strreplace (const gchar *string,
const gchar *replacement);
#endif
gboolean
browser_needs_pref()
{
#ifdef MUST_LAUNCH_BROWSER_OURSELVES
return TRUE;
#else
return FALSE;
#endif
}
gboolean
browser_open_url (const gchar *url)
@ -100,14 +113,14 @@ browser_open_url (const gchar *url)
g_return_val_if_fail (url != NULL, FALSE);
/* browser = gimp_gimprc_query ("web-browser");*/
/* XXX - use Preference setting for this */
browser = g_strdup("mozilla %s");
/* browser = gimp_gimprc_query ("web-browser");*/
browser = g_strdup(prefs.gui_webbrowser);
if (browser == NULL || ! strlen (browser))
{
g_message (("Web browser not specified.\n"
"Please specify a web browser using the Preferences Dialog."));
simple_dialog(ESD_TYPE_WARN, ESD_BTN_OK,
"Web browser not specified.\n"
"Please correct the web browser setting in the Preferences dialog.");
g_free (browser);
return FALSE;
}
@ -126,8 +139,11 @@ browser_open_url (const gchar *url)
/* parse the cmd line */
if (! g_shell_parse_argv (cmd, NULL, &argv, &error))
{
g_message (("Could not parse specified web browser command:\n%s"),
error->message);
simple_dialog(ESD_TYPE_WARN, ESD_BTN_OK,
PRIMARY_TEXT_START "Could not parse web browser command: \"%s\"" PRIMARY_TEXT_END
"\n\n\"%s\"\n\n%s",
browser, error->message,
"Please correct the web browser setting in the Preferences dialog.");
g_error_free (error);
return FALSE;
}
@ -139,8 +155,11 @@ browser_open_url (const gchar *url)
if (! retval)
{
g_message (("Could not execute specified web browser:\n%s"),
error->message);
simple_dialog(ESD_TYPE_WARN, ESD_BTN_OK,
PRIMARY_TEXT_START "Could not execute web browser: \"%s\"" PRIMARY_TEXT_END
"\n\n\"%s\"\n\n%s",
browser, error->message,
"Please correct the web browser setting in the Preferences dialog.");
g_error_free (error);
}

View File

@ -1,7 +1,7 @@
/* webbrowser.h
* Web browser activation functions
*
* $Id: webbrowser.h,v 1.1 2004/06/23 01:38:39 guy Exp $
* $Id: webbrowser.h,v 1.2 2004/06/29 17:10:53 ulfl Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@ -25,6 +25,8 @@
#ifndef __WEBBROWSER_H__
#define __WEBBROWSER_H__
extern gboolean browser_needs_pref();
extern gboolean browser_open_url (const gchar *url);
/* browse a file relative to the data dir */

18
prefs.c
View File

@ -1,7 +1,7 @@
/* prefs.c
* Routines for handling preferences
*
* $Id: prefs.c,v 1.138 2004/06/29 05:47:20 guy Exp $
* $Id: prefs.c,v 1.139 2004/06/29 17:10:52 ulfl Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@ -1012,6 +1012,7 @@ read_prefs(int *gpf_errno_return, int *gpf_read_errno_return,
prefs.gui_recent_files_count_max = 10;
prefs.gui_fileopen_dir = g_strdup("");
prefs.gui_ask_unsaved = TRUE;
prefs.gui_webbrowser = g_strdup("mozilla %s");
prefs.gui_layout_type = layout_type_5;
prefs.gui_layout_content_1 = layout_pane_content_plist;
prefs.gui_layout_content_2 = layout_pane_content_pdetails;
@ -1323,6 +1324,7 @@ prefs_set_pref(char *prefarg)
#define PRS_GUI_GEOMETRY_MAIN_HEIGHT "gui.geometry.main.height"
#define PRS_GUI_TOOLBAR_MAIN_SHOW "gui.toolbar_main_show"
#define PRS_GUI_TOOLBAR_MAIN_STYLE "gui.toolbar_main_style"
#define PRS_GUI_WEBBROWSER "gui.webbrowser"
#define PRS_GUI_LAYOUT_TYPE "gui.layout_type"
#define PRS_GUI_LAYOUT_CONTENT_1 "gui.layout_content_1"
#define PRS_GUI_LAYOUT_CONTENT_2 "gui.layout_content_2"
@ -1647,6 +1649,9 @@ set_pref(gchar *pref_name, gchar *value)
else {
prefs.gui_ask_unsaved = FALSE;
}
} else if (strcmp(pref_name, PRS_GUI_WEBBROWSER) == 0) {
g_free(prefs.gui_webbrowser);
prefs.gui_webbrowser = g_strdup(value);
} else if (strcmp(pref_name, PRS_GUI_LAYOUT_TYPE) == 0) {
prefs.gui_layout_type = strtoul(value, NULL, 10);
if (prefs.gui_layout_type == layout_unused ||
@ -2199,8 +2204,12 @@ write_prefs(char **pf_path_return)
fprintf(pf, "\n# Ask to save unsaved capture files?\n");
fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
fprintf(pf, PRS_GUI_ASK_UNSAVED ": %s\n",
prefs.gui_ask_unsaved == TRUE ? "TRUE" : "FALSE");
prefs.gui_ask_unsaved == TRUE ? "TRUE" : "FALSE");
fprintf(pf, "\n# The path to the webbrowser.\n");
fprintf(pf, "# Ex: mozilla %%s\n");
fprintf(pf, PRS_GUI_WEBBROWSER ": %s\n", prefs.gui_webbrowser);
fprintf (pf, "\n######## User Interface: Layout ########\n");
fprintf(pf, "\n# Layout type (1-6).\n");
@ -2402,6 +2411,7 @@ copy_prefs(e_prefs *dest, e_prefs *src)
dest->gui_geometry_save_position = src->gui_geometry_save_position;
dest->gui_geometry_save_size = src->gui_geometry_save_size;
dest->gui_geometry_save_maximized = src->gui_geometry_save_maximized;
dest->gui_webbrowser = g_strdup(src->gui_webbrowser);
/* values for the capture dialog box */
dest->capture_device = g_strdup(src->capture_device);
dest->capture_devices_descr = g_strdup(src->capture_devices_descr);
@ -2440,6 +2450,8 @@ free_prefs(e_prefs *pr)
g_free(pr->gui_fileopen_dir);
pr->gui_fileopen_dir = NULL;
}
g_free(pr->gui_webbrowser);
pr->gui_webbrowser = NULL;
if (pr->capture_device != NULL) {
g_free(pr->capture_device);
pr->capture_device = NULL;

View File

@ -1,7 +1,7 @@
/* prefs.h
* Definitions for preference handling routines
*
* $Id: prefs.h,v 1.66 2004/06/20 15:57:08 ulfl Exp $
* $Id: prefs.h,v 1.67 2004/06/29 17:10:52 ulfl Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@ -129,6 +129,7 @@ typedef struct _e_prefs {
guint gui_recent_files_count_max;
gchar *gui_fileopen_dir;
gboolean gui_ask_unsaved;
gchar *gui_webbrowser;
layout_type_e gui_layout_type;
layout_pane_content_e gui_layout_content_1;
layout_pane_content_e gui_layout_content_2;