#include <epan/prefs.h>
-#include "../globals.h"
#include "../simple_dialog.h"
#include "gtk/prefs_gui.h"
#include "gtk/gui_utils.h"
#include "gtk/dlg_utils.h"
#include "gtk/main.h"
-#include "gtk/main_packet_list.h"
+#include "gtk/new_packet_list.h"
#include "gtk/main_proto_draw.h"
#include "gtk/main_toolbar.h"
#include "gtk/font_utils.h"
#include "gtk/recent.h"
#include "gtk/webbrowser.h"
+#include "gtk/main_welcome.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);
-static gint fileopen_preview_changed_cb(GtkWidget *myentry _U_, GdkEvent *event, gpointer parent_w);
+static gboolean fileopen_dir_changed_cb(GtkWidget *myentry, GdkEvent *event _U_, gpointer parent_w _U_);
+static gboolean fileopen_preview_changed_cb(GtkWidget *myentry _U_, GdkEvent *event, gpointer parent_w);
static void fileopen_selected_cb(GtkWidget *mybutton_rb _U_, gpointer parent_w);
-static gint recent_files_count_changed_cb(GtkWidget *recent_files_entry _U_,
- GdkEvent *event _U_, gpointer parent_w);
-static gint recent_df_entries_changed_cb(GtkWidget *recent_df_entry _U_,
+static gboolean recent_files_count_changed_cb(GtkWidget *recent_files_entry _U_,
+ GdkEvent *event _U_, gpointer parent_w);
+static gboolean recent_df_entries_changed_cb(GtkWidget *recent_df_entry _U_,
+ GdkEvent *event _U_, gpointer parent_w);
+static gint scroll_percent_changed_cb(GtkWidget *recent_df_entry _U_,
GdkEvent *event _U_, gpointer parent_w);
#define PLIST_SEL_BROWSE_KEY "plist_sel_browse"
#define PTREE_SEL_BROWSE_KEY "ptree_sel_browse"
#define MACOSX_STYLE_KEY "macosx_style"
-#define GUI_CONSOLE_OPEN_KEY "console_open"
-#define GUI_FILEOPEN_KEY "fileopen_behavior"
-#define GUI_FILEOPEN_PREVIEW_KEY "fileopen_preview_timeout"
-#define GUI_RECENT_FILES_COUNT_KEY "recent_files_count"
-#define GUI_RECENT_DF_ENTRIES_KEY "recent_display_filter_entries"
-#define GUI_FILEOPEN_DIR_KEY "fileopen_directory"
-#define GUI_ASK_UNSAVED_KEY "ask_unsaved"
-#define GUI_WEBBROWSER_KEY "webbrowser"
-#define GUI_FIND_WRAP_KEY "find_wrap"
-#define GUI_USE_PREF_SAVE_KEY "use_pref_save"
-#define GUI_SHOW_VERSION_KEY "show_version"
+#define GUI_CONSOLE_OPEN_KEY "console_open"
+#define GUI_FILEOPEN_KEY "fileopen_behavior"
+#define GUI_FILEOPEN_PREVIEW_KEY "fileopen_preview_timeout"
+#define GUI_RECENT_FILES_COUNT_KEY "recent_files_count"
+#define GUI_RECENT_DF_ENTRIES_KEY "recent_display_filter_entries"
+#define GUI_FILEOPEN_DIR_KEY "fileopen_directory"
+#define GUI_ASK_UNSAVED_KEY "ask_unsaved"
+#define GUI_WEBBROWSER_KEY "webbrowser"
+#define GUI_FIND_WRAP_KEY "find_wrap"
+#define GUI_USE_PREF_SAVE_KEY "use_pref_save"
+#define GUI_SHOW_VERSION_KEY "show_version"
+#define GUI_EXPERT_EYECANDY_KEY "expert_eyecandy"
+#define GUI_AUTO_SCROLL_KEY "auto_scroll_on_expand"
+#define GUI_SCROLL_PERCENT_KEY "scroll_percent_on_expand"
static const enum_val_t scrollbar_placement_vals[] _U_ = {
{ "FALSE", "Left", FALSE },
};
static const enum_val_t highlight_style_vals[] _U_ = {
- { "FALSE", "Bold", FALSE },
- { "TRUE", "Inverse", TRUE },
+ { "FALSE", "Bold", FALSE },
+ { "TRUE", "Inverse", TRUE },
{ NULL, NULL, 0 }
};
static const enum_val_t toolbar_style_vals[] _U_ = {
- { "ICONS", "Icons only", TB_STYLE_ICONS },
- { "TEXT", "Text only", TB_STYLE_TEXT },
- { "BOTH", "Icons & Text", TB_STYLE_BOTH },
+ { "ICONS", "Icons only", TB_STYLE_ICONS },
+ { "TEXT", "Text only", TB_STYLE_TEXT },
+ { "BOTH", "Icons & Text", TB_STYLE_BOTH },
{ NULL, NULL, 0 }
};
/* Used to contain the string from the Open File preview timeout pref item */
static char open_file_preview_str[128] = "";
+/* Used to contain the string from the Auto Scroll Percentage pref item */
+static char scroll_percent_preview_str[128] = "";
+
#define GUI_TABLE_ROWS 4
GtkWidget*
GtkWidget *recent_files_count_max_te, *recent_df_entries_max_te, *ask_unsaved_cb, *find_wrap_cb;
GtkWidget *use_pref_save_cb;
GtkWidget *show_version_cb;
+ GtkWidget *auto_scroll_cb, *scroll_percent_te;
GtkWidget *webbrowser_te;
GtkWidget *save_position_cb, *save_size_cb, *save_maximized_cb;
-#ifdef HAVE_IGE_MAC_INTEGRATION
+#if defined(HAVE_IGE_MAC_INTEGRATION) || defined(HAVE_GTKOSXAPPLICATION)
GtkWidget *macosx_style_cb;
#endif
-
- GtkTooltips *tooltips = gtk_tooltips_new();
+ GtkWidget *expert_info_eyecandy_cb;
int pos = 0;
char current_val_str[128];
main_vb = gtk_vbox_new(FALSE, 7);
gtk_container_set_border_width( GTK_CONTAINER(main_vb), 5 );
- /* Main table */
- main_tb = gtk_table_new(GUI_TABLE_ROWS, 2, FALSE);
- gtk_box_pack_start(GTK_BOX(main_vb), main_tb, FALSE, FALSE, 0);
- gtk_table_set_row_spacings(GTK_TABLE(main_tb), 10);
- gtk_table_set_col_spacings(GTK_TABLE(main_tb), 15);
- g_object_set_data(G_OBJECT(main_tb), E_TOOLTIPS_KEY, tooltips);
+ /* Main table */
+ main_tb = gtk_table_new(GUI_TABLE_ROWS, 2, FALSE);
+ gtk_box_pack_start(GTK_BOX(main_vb), main_tb, FALSE, FALSE, 0);
+ gtk_table_set_row_spacings(GTK_TABLE(main_tb), 10);
+ gtk_table_set_col_spacings(GTK_TABLE(main_tb), 15);
/* Packet list selection browseable */
plist_browse_om = create_preference_option_menu(main_tb, pos++,
- "Packet list selection mode:",
+ "Packet list selection mode:",
"Choose to browse or select a packet for detailed dissection.",
selection_mode_vals, prefs.gui_plist_sel_browse);
g_object_set_data(G_OBJECT(main_vb), PLIST_SEL_BROWSE_KEY, plist_browse_om);
/* Proto tree selection browseable */
ptree_browse_om = create_preference_option_menu(main_tb, pos++,
- "Protocol tree selection mode:",
+ "Protocol tree selection mode:",
"Choose to browse or select.",
selection_mode_vals, prefs.gui_ptree_sel_browse);
g_object_set_data(G_OBJECT(main_vb), PTREE_SEL_BROWSE_KEY, ptree_browse_om);
/* Geometry prefs */
save_position_cb = create_preference_check_button(main_tb, pos++,
- "Save window position:",
+ "Save window position:",
"Whether to save the position of the main window.",
prefs.gui_geometry_save_position);
g_object_set_data(G_OBJECT(main_vb), GEOMETRY_POSITION_KEY, save_position_cb);
save_size_cb = create_preference_check_button(main_tb, pos++,
- "Save window size:",
+ "Save window size:",
"Whether to save the size of the main window.",
prefs.gui_geometry_save_size);
g_object_set_data(G_OBJECT(main_vb), GEOMETRY_SIZE_KEY, save_size_cb);
save_maximized_cb = create_preference_check_button(main_tb, pos++,
- "Save maximized state:",
+ "Save maximized state:",
"Whether to save the maximized state of the main window.",
prefs.gui_geometry_save_maximized);
g_object_set_data(G_OBJECT(main_vb), GEOMETRY_MAXIMIZED_KEY, save_maximized_cb);
-#ifdef HAVE_IGE_MAC_INTEGRATION
+#if defined(HAVE_IGE_MAC_INTEGRATION) || defined(HAVE_GTKOSXAPPLICATION)
macosx_style_cb = create_preference_check_button(main_tb, pos++,
- "MacOS X style",
- "Whether to create a MacOS X look and feel. Checking this box will move the "
+ "Mac OS X style",
+ "Whether to create a Mac OS X look and feel. Checking this box will move the "
"menu bar to the top of the screen instead of the top of the Wireshark window. "
"Requires a restart of Wireshark to take effect.",
prefs.gui_macosx_style);
#ifdef _WIN32
/* How the console window should be opened */
console_open_om = create_preference_option_menu(main_tb, pos++,
- "Open a console window",
+ "Open a console window",
"Whether to open a console window "
"(Automatic will open a console if messages appear).",
gui_console_open_vals, prefs.gui_console_open);
/* Allow user to select where they want the File Open dialog to open to
* by default */
fileopen_rb = create_preference_radio_buttons(main_tb, pos++,
- "\"File Open\" dialog behavior:",
- "Which directory the \"File Open\" dialog should start with.",
+ "\"File Open\" dialog behavior:",
+ "Which directory the \"File Open\" dialog should start with.",
gui_fileopen_vals, prefs.gui_fileopen_style);
/* Directory to default File Open dialog to */
- fileopen_dir_te = create_preference_entry(main_tb, pos++,
- "Directory:",
+ fileopen_dir_te = create_preference_entry(main_tb, pos++,
+ "Directory:",
"The \"File Open\" dialog defaults always to this directory.",
prefs.gui_fileopen_dir);
g_object_set_data(G_OBJECT(main_vb), GUI_FILEOPEN_KEY, fileopen_rb);
/* File Open dialog preview timeout */
fileopen_preview_te = create_preference_entry(main_tb, pos++,
- "\"File Open\" preview timeout:",
+ "\"File Open\" preview timeout:",
"Reading preview data in the \"File Open\" dialog will be stopped after given seconds.",
open_file_preview_str);
g_snprintf(current_val_str, sizeof(current_val_str), "%d", prefs.gui_fileopen_preview);
/* Number of recent entries in the display filter list ... */
recent_df_entries_max_te = create_preference_entry(main_tb, pos++,
- "Filter display max. list entries:",
+ "Filter display max. list entries:",
"Maximum number of recent entries in filter display list.",
recent_df_entries_max_str);
g_snprintf(current_val_str, sizeof(current_val_str), "%d", prefs.gui_recent_df_entries_max);
/* Number of entries in the recent_files list ... */
recent_files_count_max_te = create_preference_entry(main_tb, pos++,
- "\"Open Recent\" max. list entries:",
+ "\"Open Recent\" max. list entries:",
"Maximum number of entries in the \"File/Open Recent\" list.",
recent_files_count_max_str);
g_snprintf(current_val_str, sizeof(current_val_str), "%d", prefs.gui_recent_files_count_max);
/* do we want to wrap when searching for data? */
find_wrap_cb = create_preference_check_button(main_tb, pos++,
- "Wrap to end/beginning of file during a find:",
+ "Wrap to end/beginning of file during a find:",
"Whether a search should wrap in a capture file.",
prefs.gui_find_wrap);
g_object_set_data(G_OBJECT(main_vb), GUI_FIND_WRAP_KEY, find_wrap_cb);
/* Show version in welcome screen */
show_version_cb = create_preference_check_button(main_tb, pos++,
- "Welcome screen shows version:",
- "Whether version should be shown in the start page or not.",
+ "Welcome screen and title bar shows version:",
+ "Whether version should be shown in the start page and main screen's title bar.",
prefs.gui_version_in_start_page );
g_object_set_data(G_OBJECT(main_vb), GUI_SHOW_VERSION_KEY, show_version_cb);
+ /* Whether to auto scroll when expanding items */
+ auto_scroll_cb = create_preference_check_button(main_tb, pos++,
+ "Auto scroll on expansion:",
+ "Whether the details view should be automatically scrolled up when expanding an item.",
+ prefs.gui_auto_scroll_on_expand );
+ g_object_set_data(G_OBJECT(main_vb), GUI_AUTO_SCROLL_KEY, auto_scroll_cb);
+
+ /* Where to auto scroll to when expanding items */
+ scroll_percent_te = create_preference_entry(main_tb, pos++,
+ "Auto scroll percentage:",
+ "Where to scroll the expanded item to within the view e.g. 0% = top of view, 50% = center of view.",
+ scroll_percent_preview_str);
+ g_snprintf(current_val_str, sizeof(current_val_str), "%d", prefs.gui_auto_scroll_percentage);
+ gtk_entry_set_text(GTK_ENTRY(scroll_percent_te), current_val_str);
+ g_object_set_data(G_OBJECT(main_vb), GUI_SCROLL_PERCENT_KEY, scroll_percent_te);
+ g_signal_connect(scroll_percent_te, "focus_out_event", G_CALLBACK(scroll_percent_changed_cb), main_vb);
+
/* Webbrowser */
if (browser_needs_pref()) {
- webbrowser_te = create_preference_entry(main_tb, pos++,
- "Web browser command:",
- "Command line to desired browser.",
- prefs.gui_webbrowser);
+ webbrowser_te = create_preference_entry(main_tb, pos++,
+ "Web browser command:",
+ "Command line to desired browser.",
+ prefs.gui_webbrowser);
gtk_entry_set_text(GTK_ENTRY(webbrowser_te), prefs.gui_webbrowser);
g_object_set_data(G_OBJECT(main_vb), GUI_WEBBROWSER_KEY, webbrowser_te);
}
+ /* Enable Expert Infos Dialog Tab Label "eye-candy" */
+ expert_info_eyecandy_cb = create_preference_check_button(main_tb, pos++,
+ "Display LEDs in the Expert Infos dialog tab labels:",
+ "Whether colored LED images should be displayed in the Expert Infos dialog tab labels.",
+ prefs.gui_expert_composite_eyecandy );
+ g_object_set_data(G_OBJECT(main_vb), GUI_EXPERT_EYECANDY_KEY, expert_info_eyecandy_cb);
+
/* Show 'em what we got */
gtk_widget_show_all(main_vb);
gui_prefs_fetch(GtkWidget *w)
{
prefs.gui_plist_sel_browse = fetch_enum_value(
- g_object_get_data(G_OBJECT(w), PLIST_SEL_BROWSE_KEY), selection_mode_vals);
+ g_object_get_data(G_OBJECT(w), PLIST_SEL_BROWSE_KEY), selection_mode_vals);
prefs.gui_ptree_sel_browse = fetch_enum_value(
- g_object_get_data(G_OBJECT(w), PTREE_SEL_BROWSE_KEY), selection_mode_vals);
+ g_object_get_data(G_OBJECT(w), PTREE_SEL_BROWSE_KEY), selection_mode_vals);
prefs.gui_geometry_save_position =
- gtk_toggle_button_get_active(g_object_get_data(G_OBJECT(w), GEOMETRY_POSITION_KEY));
+ gtk_toggle_button_get_active(g_object_get_data(G_OBJECT(w), GEOMETRY_POSITION_KEY));
prefs.gui_geometry_save_size =
- gtk_toggle_button_get_active(g_object_get_data(G_OBJECT(w), GEOMETRY_SIZE_KEY));
+ gtk_toggle_button_get_active(g_object_get_data(G_OBJECT(w), GEOMETRY_SIZE_KEY));
prefs.gui_geometry_save_maximized =
- gtk_toggle_button_get_active(g_object_get_data(G_OBJECT(w), GEOMETRY_MAXIMIZED_KEY));
+ gtk_toggle_button_get_active(g_object_get_data(G_OBJECT(w), GEOMETRY_MAXIMIZED_KEY));
-#ifdef HAVE_IGE_MAC_INTEGRATION
+#if defined(HAVE_IGE_MAC_INTEGRATION) || defined(HAVE_GTKOSXAPPLICATION)
prefs.gui_macosx_style =
- gtk_toggle_button_get_active(g_object_get_data(G_OBJECT(w), MACOSX_STYLE_KEY));
+ gtk_toggle_button_get_active(g_object_get_data(G_OBJECT(w), MACOSX_STYLE_KEY));
#endif
#ifdef _WIN32
prefs.gui_console_open = fetch_enum_value(
- g_object_get_data(G_OBJECT(w), GUI_CONSOLE_OPEN_KEY), gui_console_open_vals);
+ g_object_get_data(G_OBJECT(w), GUI_CONSOLE_OPEN_KEY), gui_console_open_vals);
#endif
prefs.gui_fileopen_style = fetch_preference_radio_buttons_val(
- g_object_get_data(G_OBJECT(w), GUI_FILEOPEN_KEY), gui_fileopen_vals);
-
+ g_object_get_data(G_OBJECT(w), GUI_FILEOPEN_KEY), gui_fileopen_vals);
+
g_free(prefs.gui_fileopen_dir);
prefs.gui_fileopen_dir = g_strdup(gtk_entry_get_text(
- GTK_ENTRY(g_object_get_data(G_OBJECT(w), GUI_FILEOPEN_DIR_KEY))));
+ GTK_ENTRY(g_object_get_data(G_OBJECT(w), GUI_FILEOPEN_DIR_KEY))));
- prefs.gui_ask_unsaved =
+ prefs.gui_ask_unsaved =
gtk_toggle_button_get_active(g_object_get_data(G_OBJECT(w), GUI_ASK_UNSAVED_KEY));
- prefs.gui_find_wrap =
+ prefs.gui_find_wrap =
gtk_toggle_button_get_active(g_object_get_data(G_OBJECT(w), GUI_FIND_WRAP_KEY));
- prefs.gui_use_pref_save =
+ prefs.gui_use_pref_save =
gtk_toggle_button_get_active(g_object_get_data(G_OBJECT(w), GUI_USE_PREF_SAVE_KEY));
- prefs.gui_version_in_start_page =
+ prefs.gui_version_in_start_page =
gtk_toggle_button_get_active(g_object_get_data(G_OBJECT(w), GUI_SHOW_VERSION_KEY));
+ prefs.gui_auto_scroll_on_expand =
+ gtk_toggle_button_get_active(g_object_get_data(G_OBJECT(w), GUI_AUTO_SCROLL_KEY));
+
if (browser_needs_pref()) {
g_free(prefs.gui_webbrowser);
prefs.gui_webbrowser = g_strdup(gtk_entry_get_text(
GTK_ENTRY(g_object_get_data(G_OBJECT(w), GUI_WEBBROWSER_KEY))));
}
+
+ prefs.gui_expert_composite_eyecandy =
+ gtk_toggle_button_get_active(g_object_get_data(G_OBJECT(w), GUI_EXPERT_EYECANDY_KEY));
+
/*
* XXX - we need to have a way to fetch the preferences into
* local storage and only set the permanent preferences if there
#endif
if (font_changed) {
- /* This redraws the hex dump windows. */
+ /* This redraws the packet bytes windows. */
switch (user_font_apply()) {
case FA_SUCCESS:
break;
}
} else if (!redissect) {
- /* Redraw the hex dump windows, in case the
+ /* Redraw the packet bytes windows, in case the
highlight style changed, only if we aren't redissecting the whole file.
XXX - do it only if the highlight style *did* change. */
- redraw_hex_dump_all();
+ redraw_packet_bytes_all();
}
+ /* Redisplay the main window's title */
+ update_main_window_title();
+
+ /* Redisplay the default welcome header message in case the "show
+ * version" option was changed. */
+ welcome_header_set_message(NULL);
+
/* Redraw the help window(s). */
supported_redraw();
help_redraw();
toolbar_redraw_all();
set_scrollbar_placement_all();
-#ifndef NEW_PACKET_LIST
- packet_list_set_sel_browse(prefs.gui_plist_sel_browse, FALSE);
-#endif
+ new_packet_list_set_sel_browse(prefs.gui_plist_sel_browse, FALSE);
set_ptree_sel_browse_all(prefs.gui_ptree_sel_browse);
set_tree_styles_all();
main_widgets_rearrange();
}
}
-static gint
+static gboolean
recent_df_entries_changed_cb(GtkWidget *recent_df_entry _U_,
GdkEvent *event _U_, gpointer parent_w)
{
return FALSE;
}
-static gint
-recent_files_count_changed_cb(GtkWidget *recent_files_entry _U_,
+static gboolean
+recent_files_count_changed_cb(GtkWidget *recent_files_entry _U_,
GdkEvent *event _U_, gpointer parent_w)
{
GtkWidget *recent_files_count_te;
guint newval;
-
+
recent_files_count_te = (GtkWidget *)g_object_get_data(G_OBJECT(parent_w), GUI_RECENT_FILES_COUNT_KEY);
/*
return FALSE;
}
-static gint
-fileopen_preview_changed_cb(GtkWidget *recent_files_entry _U_,
+static gboolean
+fileopen_preview_changed_cb(GtkWidget *recent_files_entry _U_,
GdkEvent *event _U_, gpointer parent_w)
{
GtkWidget *fileopen_preview_te;
guint newval;
-
+
fileopen_preview_te = (GtkWidget *)g_object_get_data(G_OBJECT(parent_w), GUI_FILEOPEN_PREVIEW_KEY);
/*
return FALSE;
}
-static gint
-fileopen_dir_changed_cb(GtkWidget *fileopen_entry _U_, GdkEvent *event _U_, gpointer parent_w)
+static gboolean
+fileopen_dir_changed_cb(GtkWidget *fileopen_dir_te, GdkEvent *event _U_, gpointer parent_w _U_)
{
- GtkWidget *fileopen_dir_te;
char *lastchar;
gint fileopen_dir_te_length;
-
- fileopen_dir_te = (GtkWidget *)g_object_get_data(G_OBJECT(parent_w), GUI_FILEOPEN_DIR_KEY);
- fileopen_dir_te_length = (gint) strlen(gtk_entry_get_text (GTK_ENTRY(fileopen_entry)));
+
+ fileopen_dir_te_length = (gint) strlen(gtk_entry_get_text (GTK_ENTRY(fileopen_dir_te)));
if (fileopen_dir_te_length == 0)
return FALSE;
- lastchar = gtk_editable_get_chars(GTK_EDITABLE(fileopen_entry), fileopen_dir_te_length-1, -1);
- if (strcmp(lastchar, G_DIR_SEPARATOR_S) != 0)
- gtk_entry_append_text(GTK_ENTRY(fileopen_entry), G_DIR_SEPARATOR_S);
+ lastchar = gtk_editable_get_chars(GTK_EDITABLE(fileopen_dir_te), fileopen_dir_te_length-1, -1);
+ if (strcmp(lastchar, G_DIR_SEPARATOR_S) != 0){
+ gtk_editable_insert_text(GTK_EDITABLE(fileopen_dir_te), G_DIR_SEPARATOR_S,
+ 1, /* new_text_length */
+ &fileopen_dir_te_length); /* *position */
+ }
return FALSE;
}
fileopen_selected_cb(GtkWidget *mybutton_rb _U_, gpointer parent_w)
{
GtkWidget *fileopen_rb, *fileopen_dir_te;
-
+
fileopen_rb = (GtkWidget *)g_object_get_data(G_OBJECT(parent_w), GUI_FILEOPEN_KEY);
fileopen_dir_te = (GtkWidget *)g_object_get_data(G_OBJECT(parent_w), GUI_FILEOPEN_DIR_KEY);
-
+
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(fileopen_rb)))
{
gtk_widget_set_sensitive(GTK_WIDGET(fileopen_dir_te), TRUE);
return;
}
+static gboolean
+scroll_percent_changed_cb(GtkWidget *recent_files_entry _U_,
+ GdkEvent *event _U_, gpointer parent_w)
+{
+ GtkWidget *scroll_percent_te;
+ guint newval;
+
+ scroll_percent_te = (GtkWidget*)g_object_get_data(G_OBJECT(parent_w), GUI_SCROLL_PERCENT_KEY);
+
+ /*
+ * Now, just convert the string to a number and store it in the prefs field ...
+ */
+
+ newval = strtol(gtk_entry_get_text(GTK_ENTRY(scroll_percent_te)), NULL, 10);
+
+ if (newval <= 100) {
+ prefs.gui_auto_scroll_percentage = newval;
+ }
+
+ /* We really should pop up a dialog box is newval < 0 or > 100 */
+ return FALSE;
+}