2000-08-08 12:28:50 +00:00
|
|
|
/* help_dlg.c
|
|
|
|
*
|
2004-02-06 19:19:12 +00:00
|
|
|
* $Id: help_dlg.c,v 1.46 2004/02/06 19:19:10 ulfl Exp $
|
2000-08-08 12:28:50 +00:00
|
|
|
*
|
2003-01-26 19:35:31 +00:00
|
|
|
* Laurent Deniel <laurent.deniel@free.fr>
|
2000-08-08 12:28:50 +00:00
|
|
|
*
|
|
|
|
* Ethereal - Network traffic analyzer
|
On Windows, use the directory in which the binary resides as the
directory in which global data files are stored. If an installed binary
is being run, that's the correct directory for them; if a build-tree
binary is being run, the "manuf" file will be there, and you can put
other data files there as well, if necessary.
Do the same with plugins, except that, if there's no
"plugins\\{version}" subdirectory of that directory, fall back on the
default installation directory, so you at least have a place where you
can put plugins for use by build-tree binaries. (Should we, instead,
have the Windows build procedure create a subdirectory of the "plugins"
source directory, with the plugin version number as its name, and copy
the plugins there, so you'd use the build-tree plugin binaries?)
Move "test_for_directory()" out of "util.c" and into
"epan/filesystem.c", with the other file system access portability
wrappers and convenience routines. Fix "util.h" not to declare it - or
other routines moved to "epan/filesystem.c" a while ago.
svn path=/trunk/; revision=3858
2001-08-21 06:39:18 +00:00
|
|
|
* By Gerald Combs <gerald@ethereal.com>
|
2000-08-08 12:28:50 +00:00
|
|
|
* Copyright 2000 Gerald Combs
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU General Public License
|
|
|
|
* as published by the Free Software Foundation; either version 2
|
|
|
|
* of the License, or (at your option) any later version.
|
2002-08-28 21:04:11 +00:00
|
|
|
*
|
2000-08-08 12:28:50 +00:00
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
2002-08-28 21:04:11 +00:00
|
|
|
*
|
2000-08-08 12:28:50 +00:00
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
# include "config.h"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include <gtk/gtk.h>
|
2002-09-06 21:27:57 +00:00
|
|
|
#include <string.h>
|
2003-11-27 00:22:12 +00:00
|
|
|
#include <stdio.h>
|
2003-12-22 21:52:41 +00:00
|
|
|
#include <errno.h>
|
2000-08-08 12:28:50 +00:00
|
|
|
|
2003-12-22 08:01:01 +00:00
|
|
|
#include "epan/filesystem.h"
|
2000-08-08 12:28:50 +00:00
|
|
|
#include "help_dlg.h"
|
|
|
|
#include "prefs.h"
|
|
|
|
#include "gtkglobals.h"
|
|
|
|
#include "ui_util.h"
|
2002-11-11 15:39:06 +00:00
|
|
|
#include "compat_macros.h"
|
2003-11-27 23:25:55 +00:00
|
|
|
#include "dlg_utils.h"
|
2003-12-22 08:01:01 +00:00
|
|
|
#include "simple_dialog.h"
|
2003-11-27 00:22:12 +00:00
|
|
|
|
2003-12-22 08:01:01 +00:00
|
|
|
#define HELP_DIR "help"
|
|
|
|
|
2004-01-25 21:27:16 +00:00
|
|
|
|
|
|
|
#define NOTEBOOK_KEY "notebook_key"
|
|
|
|
|
2000-08-08 12:28:50 +00:00
|
|
|
static void help_close_cb(GtkWidget *w, gpointer data);
|
2000-08-17 08:17:38 +00:00
|
|
|
static void help_destroy_cb(GtkWidget *w, gpointer data);
|
2003-03-03 21:59:42 +00:00
|
|
|
static void insert_text(GtkWidget *w, const char *buffer, int nchars);
|
2003-12-22 21:52:41 +00:00
|
|
|
static void set_help_text(GtkWidget *w, const char *help_file_path);
|
2000-08-08 12:28:50 +00:00
|
|
|
|
2000-08-17 08:17:38 +00:00
|
|
|
/*
|
|
|
|
* Keep a static pointer to the current "Help" window, if any, so that
|
|
|
|
* if somebody tries to do "Help->Help" while there's already a
|
|
|
|
* "Help" window up, we just pop up the existing one, rather than
|
|
|
|
* creating a new one.
|
2003-01-29 12:58:48 +00:00
|
|
|
*/
|
2000-08-08 12:28:50 +00:00
|
|
|
static GtkWidget *help_w = NULL;
|
|
|
|
|
2000-09-08 10:59:21 +00:00
|
|
|
/*
|
2003-12-22 21:52:41 +00:00
|
|
|
* Keep a list of text widgets and corresponding file names as well
|
|
|
|
* (for text format changes).
|
2000-09-08 10:59:21 +00:00
|
|
|
*/
|
2003-12-22 21:52:41 +00:00
|
|
|
typedef struct {
|
2004-01-25 21:27:16 +00:00
|
|
|
char *topic;
|
2003-12-22 21:52:41 +00:00
|
|
|
char *pathname;
|
|
|
|
GtkWidget *txt;
|
|
|
|
} help_page_t;
|
2000-09-08 10:59:21 +00:00
|
|
|
|
2003-12-22 21:52:41 +00:00
|
|
|
static GSList *help_text_pages = NULL;
|
2003-11-27 00:22:12 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Helper function to show a simple help text page.
|
|
|
|
*/
|
2004-01-25 21:27:16 +00:00
|
|
|
static GtkWidget * help_page(const char *topic, const char *filename)
|
2000-08-08 12:28:50 +00:00
|
|
|
{
|
2003-12-22 21:52:41 +00:00
|
|
|
GtkWidget *page_vb, *txt_scrollw, *txt;
|
|
|
|
char *relative_path, *absolute_path;
|
|
|
|
help_page_t *page;
|
2000-08-08 12:28:50 +00:00
|
|
|
|
2003-11-27 00:22:12 +00:00
|
|
|
page_vb = gtk_vbox_new(FALSE, 0);
|
|
|
|
gtk_container_border_width(GTK_CONTAINER(page_vb), 1);
|
|
|
|
txt_scrollw = scrolled_window_new(NULL, NULL);
|
2004-02-06 19:19:12 +00:00
|
|
|
#if GTK_MAJOR_VERSION >= 2
|
|
|
|
gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(txt_scrollw),
|
|
|
|
GTK_SHADOW_IN);
|
|
|
|
#endif
|
2003-11-27 00:22:12 +00:00
|
|
|
gtk_box_pack_start(GTK_BOX(page_vb), txt_scrollw, TRUE, TRUE, 0);
|
2004-02-06 19:19:12 +00:00
|
|
|
|
2002-11-03 17:38:45 +00:00
|
|
|
#if GTK_MAJOR_VERSION < 2
|
2003-11-27 00:22:12 +00:00
|
|
|
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(txt_scrollw),
|
|
|
|
GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
|
2003-12-22 21:52:41 +00:00
|
|
|
txt = gtk_text_new(NULL, NULL);
|
|
|
|
gtk_text_set_editable(GTK_TEXT(txt), FALSE);
|
|
|
|
gtk_text_set_word_wrap(GTK_TEXT(txt), TRUE);
|
|
|
|
gtk_text_set_line_wrap(GTK_TEXT(txt), TRUE);
|
2002-11-03 17:38:45 +00:00
|
|
|
#else
|
2003-11-27 00:22:12 +00:00
|
|
|
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(txt_scrollw),
|
|
|
|
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
|
2003-12-22 21:52:41 +00:00
|
|
|
txt = gtk_text_view_new();
|
|
|
|
gtk_text_view_set_editable(GTK_TEXT_VIEW(txt), FALSE);
|
|
|
|
gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(txt), GTK_WRAP_WORD);
|
2004-02-06 19:19:12 +00:00
|
|
|
gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(txt), FALSE);
|
|
|
|
/* XXX: there seems to be no way to add a small border *around* the whole text,
|
|
|
|
* so the text will be "bump" against the edges.
|
|
|
|
* the following is only working for left and right edges,
|
|
|
|
* there is no such thing for top and bottom :-( */
|
|
|
|
/* gtk_text_view_set_left_margin(GTK_TEXT_VIEW(txt), 3); */
|
|
|
|
/* gtk_text_view_set_right_margin(GTK_TEXT_VIEW(txt), 3); */
|
2002-11-03 17:38:45 +00:00
|
|
|
#endif
|
2003-12-22 21:52:41 +00:00
|
|
|
|
|
|
|
relative_path = g_strconcat(HELP_DIR, G_DIR_SEPARATOR_S, filename, NULL);
|
|
|
|
absolute_path = get_datafile_path(relative_path);
|
|
|
|
g_free(relative_path);
|
|
|
|
set_help_text(txt, absolute_path);
|
|
|
|
gtk_container_add(GTK_CONTAINER(txt_scrollw), txt);
|
2003-11-27 00:22:12 +00:00
|
|
|
gtk_widget_show(txt_scrollw);
|
2003-12-22 21:52:41 +00:00
|
|
|
gtk_widget_show(txt);
|
2003-11-27 00:22:12 +00:00
|
|
|
gtk_widget_show(page_vb);
|
|
|
|
|
2003-12-22 21:52:41 +00:00
|
|
|
page = g_malloc(sizeof (help_page_t));
|
2004-01-25 21:27:16 +00:00
|
|
|
page->topic = g_strdup(topic);
|
2003-12-22 21:52:41 +00:00
|
|
|
page->pathname = absolute_path;
|
|
|
|
page->txt = txt;
|
2004-01-25 21:27:16 +00:00
|
|
|
help_text_pages = g_slist_append(help_text_pages, page);
|
2003-12-22 21:52:41 +00:00
|
|
|
|
2003-11-27 00:22:12 +00:00
|
|
|
return page_vb;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2003-12-22 08:01:01 +00:00
|
|
|
/*
|
|
|
|
* Create and show help dialog.
|
|
|
|
*/
|
2003-11-27 00:22:12 +00:00
|
|
|
void help_cb(GtkWidget *w _U_, gpointer data _U_)
|
|
|
|
{
|
2003-12-22 21:52:41 +00:00
|
|
|
GtkWidget *main_vb, *bbox, *help_nb, *close_bt, *label, *topic_vb;
|
|
|
|
char line[4096+1]; /* XXX - size? */
|
|
|
|
char *p;
|
|
|
|
char *filename;
|
|
|
|
char *help_toc_file_path;
|
|
|
|
FILE *help_toc_file;
|
2002-08-28 21:04:11 +00:00
|
|
|
|
2000-08-08 12:28:50 +00:00
|
|
|
if (help_w != NULL) {
|
2000-08-17 08:17:38 +00:00
|
|
|
/* There's already a "Help" dialog box; reactivate it. */
|
2000-08-08 12:28:50 +00:00
|
|
|
reactivate_window(help_w);
|
|
|
|
return;
|
|
|
|
}
|
2002-08-28 21:04:11 +00:00
|
|
|
|
2003-12-22 21:52:41 +00:00
|
|
|
help_toc_file_path = get_datafile_path(HELP_DIR G_DIR_SEPARATOR_S "toc");
|
|
|
|
help_toc_file = fopen(help_toc_file_path, "r");
|
|
|
|
if (help_toc_file == NULL) {
|
2004-01-31 02:25:46 +00:00
|
|
|
simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "Could not open file \"%s\": %s",
|
2003-12-22 21:52:41 +00:00
|
|
|
help_toc_file_path, strerror(errno));
|
|
|
|
g_free(help_toc_file_path);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2003-11-27 23:25:55 +00:00
|
|
|
help_w = dlg_window_new("Ethereal: Help");
|
2002-11-11 15:39:06 +00:00
|
|
|
SIGNAL_CONNECT(help_w, "destroy", help_destroy_cb, NULL);
|
2003-11-27 00:22:12 +00:00
|
|
|
/* XXX: improve this, e.g. remember the last window size in a file */
|
2004-02-06 19:19:12 +00:00
|
|
|
WIDGET_SET_SIZE(help_w, DEF_WIDTH, DEF_HEIGHT);
|
2000-08-08 12:28:50 +00:00
|
|
|
gtk_container_border_width(GTK_CONTAINER(help_w), 2);
|
2002-08-28 21:04:11 +00:00
|
|
|
|
2000-08-08 12:28:50 +00:00
|
|
|
/* Container for each row of widgets */
|
|
|
|
main_vb = gtk_vbox_new(FALSE, 1);
|
|
|
|
gtk_container_border_width(GTK_CONTAINER(main_vb), 1);
|
|
|
|
gtk_container_add(GTK_CONTAINER(help_w), main_vb);
|
|
|
|
gtk_widget_show(main_vb);
|
|
|
|
|
|
|
|
/* help topics container */
|
|
|
|
help_nb = gtk_notebook_new();
|
|
|
|
gtk_container_add(GTK_CONTAINER(main_vb), help_nb);
|
2004-01-25 21:27:16 +00:00
|
|
|
OBJECT_SET_DATA(help_w, NOTEBOOK_KEY, help_nb);
|
2000-08-08 12:28:50 +00:00
|
|
|
|
2003-12-22 21:52:41 +00:00
|
|
|
/* help topics */
|
|
|
|
while (fgets(line, sizeof line, help_toc_file) != NULL) {
|
|
|
|
/* Strip off line ending. */
|
|
|
|
p = strpbrk(line, "\r\n");
|
|
|
|
if (p == NULL)
|
|
|
|
break; /* last line has no line ending */
|
|
|
|
*p = '\0';
|
|
|
|
/* {Topic title}:{filename of help file} */
|
|
|
|
p = strchr(line, ':');
|
|
|
|
if (p != NULL) {
|
|
|
|
*p++ = '\0';
|
|
|
|
filename = p;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* "line" refers to the topic now, and "filename" refers to the
|
|
|
|
* file name.
|
|
|
|
*/
|
2004-01-25 21:27:16 +00:00
|
|
|
topic_vb = help_page(line, filename);
|
2003-12-22 21:52:41 +00:00
|
|
|
label = gtk_label_new(line);
|
|
|
|
gtk_notebook_append_page(GTK_NOTEBOOK(help_nb), topic_vb, label);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(ferror(help_toc_file)) {
|
2004-01-31 03:22:42 +00:00
|
|
|
simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "Error reading file \"%s\": %s",
|
2003-12-22 21:52:41 +00:00
|
|
|
help_toc_file_path, strerror(errno));
|
|
|
|
}
|
|
|
|
fclose(help_toc_file);
|
2000-08-08 12:28:50 +00:00
|
|
|
|
|
|
|
gtk_widget_show(help_nb);
|
|
|
|
|
2004-01-10 16:27:43 +00:00
|
|
|
/* Buttons (only "Ok" for now) */
|
2004-01-21 21:19:34 +00:00
|
|
|
bbox = dlg_button_row_new(GTK_STOCK_OK, NULL);
|
|
|
|
|
|
|
|
gtk_box_pack_end(GTK_BOX(main_vb), bbox, FALSE, FALSE, 5);
|
2000-08-08 12:28:50 +00:00
|
|
|
gtk_widget_show(bbox);
|
2004-01-21 21:19:34 +00:00
|
|
|
|
|
|
|
close_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_OK);
|
2002-11-11 15:39:06 +00:00
|
|
|
SIGNAL_CONNECT(close_bt, "clicked", help_close_cb, help_w);
|
2000-08-08 12:28:50 +00:00
|
|
|
gtk_widget_grab_default(close_bt);
|
2002-08-28 21:04:11 +00:00
|
|
|
|
2000-08-08 12:28:50 +00:00
|
|
|
gtk_quit_add_destroy(gtk_main_level(), GTK_OBJECT(help_w));
|
2003-11-27 23:25:55 +00:00
|
|
|
|
|
|
|
/* Catch the "key_press_event" signal in the window, so that we can catch
|
|
|
|
the ESC key being pressed and act as if the "Cancel" button had
|
|
|
|
been selected. */
|
|
|
|
dlg_set_cancel(help_w, close_bt);
|
|
|
|
|
2000-08-08 12:28:50 +00:00
|
|
|
gtk_widget_show(help_w);
|
|
|
|
|
|
|
|
} /* help_cb */
|
|
|
|
|
2003-12-22 08:01:01 +00:00
|
|
|
|
2004-01-25 21:27:16 +00:00
|
|
|
/*
|
|
|
|
* Open the help dialog and show a specific help page.
|
|
|
|
*/
|
|
|
|
|
|
|
|
void help_topic_cb(GtkWidget *w _U_, gpointer data _U_) {
|
|
|
|
gchar *topic = data;
|
|
|
|
gchar *page_topic;
|
|
|
|
GtkWidget *help_nb;
|
|
|
|
GSList *help_page_ent;
|
|
|
|
gint page_num = 0;
|
|
|
|
help_page_t *page;
|
|
|
|
|
|
|
|
/* show help dialog, if not already opened */
|
|
|
|
help_cb(NULL, NULL);
|
|
|
|
|
|
|
|
help_nb = OBJECT_GET_DATA(help_w, NOTEBOOK_KEY);
|
|
|
|
|
|
|
|
/* find page to display */
|
|
|
|
for (help_page_ent = help_text_pages; help_page_ent != NULL;
|
|
|
|
help_page_ent = g_slist_next(help_page_ent))
|
|
|
|
{
|
|
|
|
page = (help_page_t *)help_page_ent->data;
|
|
|
|
page_topic = page->topic;
|
|
|
|
if (strcmp (page_topic, topic) == 0) {
|
|
|
|
/* topic page found, switch to notebook page */
|
|
|
|
gtk_notebook_set_page(GTK_NOTEBOOK(help_nb), page_num);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
page_num++;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* topic page not found, default (first page) will be shown */
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2003-12-22 08:01:01 +00:00
|
|
|
/*
|
|
|
|
* Close help dialog.
|
|
|
|
*/
|
2002-03-05 11:56:00 +00:00
|
|
|
static void help_close_cb(GtkWidget *w _U_, gpointer data)
|
2000-08-08 12:28:50 +00:00
|
|
|
{
|
2000-08-17 08:17:38 +00:00
|
|
|
gtk_widget_destroy(GTK_WIDGET(data));
|
2000-08-08 12:28:50 +00:00
|
|
|
}
|
|
|
|
|
2003-12-22 08:01:01 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Help dialog is closed now.
|
|
|
|
*/
|
2002-03-05 11:56:00 +00:00
|
|
|
static void help_destroy_cb(GtkWidget *w _U_, gpointer data _U_)
|
2000-08-17 08:17:38 +00:00
|
|
|
{
|
2003-12-22 21:52:41 +00:00
|
|
|
GSList *help_page_ent;
|
|
|
|
help_page_t *page;
|
|
|
|
|
|
|
|
/* Free up the list of help pages. */
|
|
|
|
for (help_page_ent = help_text_pages; help_page_ent != NULL;
|
|
|
|
help_page_ent = g_slist_next(help_page_ent)) {
|
|
|
|
page = (help_page_t *)help_page_ent->data;
|
2004-01-25 21:27:16 +00:00
|
|
|
g_free(page->topic);
|
2003-12-22 21:52:41 +00:00
|
|
|
g_free(page->pathname);
|
|
|
|
g_free(page);
|
|
|
|
}
|
|
|
|
g_slist_free(help_text_pages);
|
|
|
|
help_text_pages = NULL;
|
|
|
|
|
2000-08-17 08:17:38 +00:00
|
|
|
/* Note that we no longer have a Help window. */
|
|
|
|
help_w = NULL;
|
|
|
|
}
|
2000-08-08 12:28:50 +00:00
|
|
|
|
2003-12-22 08:01:01 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Insert some text to a help page.
|
|
|
|
*/
|
2003-03-03 21:59:42 +00:00
|
|
|
static void insert_text(GtkWidget *w, const char *buffer, int nchars)
|
2000-08-08 12:28:50 +00:00
|
|
|
{
|
2002-11-03 17:38:45 +00:00
|
|
|
#if GTK_MAJOR_VERSION < 2
|
|
|
|
gtk_text_insert(GTK_TEXT(w), m_r_font, NULL, NULL, buffer, nchars);
|
|
|
|
#else
|
|
|
|
GtkTextBuffer *buf= gtk_text_view_get_buffer(GTK_TEXT_VIEW(w));
|
|
|
|
GtkTextIter iter;
|
|
|
|
|
|
|
|
gtk_text_buffer_get_end_iter(buf, &iter);
|
|
|
|
gtk_widget_modify_font(w, m_r_font);
|
|
|
|
if (!g_utf8_validate(buffer, -1, NULL))
|
|
|
|
printf(buffer);
|
|
|
|
gtk_text_buffer_insert(buf, &iter, buffer, nchars);
|
|
|
|
#endif
|
2000-08-08 12:28:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2003-12-22 08:01:01 +00:00
|
|
|
/*
|
|
|
|
* Put the complete help text into a help page.
|
|
|
|
*/
|
2003-12-22 21:52:41 +00:00
|
|
|
static void set_help_text(GtkWidget *w, const char *help_file_path)
|
2000-08-08 12:28:50 +00:00
|
|
|
{
|
2003-12-22 08:01:01 +00:00
|
|
|
FILE *help_file;
|
|
|
|
char line[4096+1]; /* XXX - size? */
|
2000-08-08 12:28:50 +00:00
|
|
|
|
2002-11-03 17:38:45 +00:00
|
|
|
#if GTK_MAJOR_VERSION < 2
|
2000-08-08 12:28:50 +00:00
|
|
|
gtk_text_freeze(GTK_TEXT(w));
|
2002-11-03 17:38:45 +00:00
|
|
|
#endif
|
2000-08-08 12:28:50 +00:00
|
|
|
|
2003-12-22 21:52:41 +00:00
|
|
|
help_file = fopen(help_file_path, "r");
|
|
|
|
if (help_file != NULL) {
|
|
|
|
while (fgets(line, sizeof line, help_file) != NULL) {
|
|
|
|
insert_text(w, line, strlen(line));
|
2003-03-02 17:42:37 +00:00
|
|
|
}
|
2003-12-22 21:52:41 +00:00
|
|
|
if(ferror(help_file)) {
|
2004-01-31 03:22:42 +00:00
|
|
|
simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "Error reading file \"%s\": %s",
|
2003-12-22 21:52:41 +00:00
|
|
|
help_file_path, strerror(errno));
|
|
|
|
}
|
|
|
|
fclose(help_file);
|
|
|
|
} else {
|
2004-01-31 03:22:42 +00:00
|
|
|
simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "Could not open file \"%s\": %s",
|
2003-12-22 21:52:41 +00:00
|
|
|
help_file_path, strerror(errno));
|
2003-12-22 08:01:01 +00:00
|
|
|
}
|
2002-11-03 17:38:45 +00:00
|
|
|
#if GTK_MAJOR_VERSION < 2
|
2000-08-08 12:28:50 +00:00
|
|
|
gtk_text_thaw(GTK_TEXT(w));
|
2002-11-03 17:38:45 +00:00
|
|
|
#endif
|
2000-08-08 12:28:50 +00:00
|
|
|
} /* set_help_text */
|
2000-09-08 10:59:21 +00:00
|
|
|
|
2003-11-27 00:22:12 +00:00
|
|
|
|
2003-12-22 08:01:01 +00:00
|
|
|
/*
|
|
|
|
* Clear the help text from the help page.
|
|
|
|
*/
|
2000-09-08 10:59:21 +00:00
|
|
|
static void clear_help_text(GtkWidget *w)
|
|
|
|
{
|
2002-11-03 17:38:45 +00:00
|
|
|
#if GTK_MAJOR_VERSION < 2
|
2000-09-08 10:59:21 +00:00
|
|
|
GtkText *txt = GTK_TEXT(w);
|
|
|
|
|
|
|
|
gtk_text_set_point(txt, 0);
|
2002-08-28 21:04:11 +00:00
|
|
|
/* Keep GTK+ 1.2.3 through 1.2.6 from dumping core - see
|
2000-11-22 04:07:04 +00:00
|
|
|
http://www.ethereal.com/lists/ethereal-dev/199912/msg00312.html and
|
2000-09-08 10:59:21 +00:00
|
|
|
http://www.gnome.org/mailing-lists/archives/gtk-devel-list/1999-October/0051.shtml
|
|
|
|
for more information */
|
|
|
|
gtk_adjustment_set_value(txt->vadj, 0.0);
|
|
|
|
gtk_text_forward_delete(txt, gtk_text_get_length(txt));
|
2002-11-03 17:38:45 +00:00
|
|
|
#else
|
|
|
|
GtkTextBuffer *buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(w));
|
|
|
|
|
|
|
|
gtk_text_buffer_set_text(buf, "", 0);
|
|
|
|
#endif
|
2000-09-08 10:59:21 +00:00
|
|
|
}
|
|
|
|
|
2003-11-27 00:22:12 +00:00
|
|
|
|
2003-12-22 08:01:01 +00:00
|
|
|
/*
|
|
|
|
* Redraw a single help page.
|
|
|
|
*/
|
2003-12-22 21:52:41 +00:00
|
|
|
void help_redraw_page(const help_page_t *page)
|
2000-09-08 10:59:21 +00:00
|
|
|
{
|
2002-11-03 17:38:45 +00:00
|
|
|
#if GTK_MAJOR_VERSION < 2
|
2003-12-22 21:52:41 +00:00
|
|
|
gtk_text_freeze(GTK_TEXT(page->txt));
|
2002-11-03 17:38:45 +00:00
|
|
|
#endif
|
2003-12-22 21:52:41 +00:00
|
|
|
clear_help_text(page->txt);
|
|
|
|
set_help_text(page->txt, page->pathname);
|
2002-11-03 17:38:45 +00:00
|
|
|
#if GTK_MAJOR_VERSION < 2
|
2003-12-22 21:52:41 +00:00
|
|
|
gtk_text_thaw(GTK_TEXT(page->txt));
|
2002-11-03 17:38:45 +00:00
|
|
|
#endif
|
2003-12-22 08:01:01 +00:00
|
|
|
}
|
2000-09-08 10:59:21 +00:00
|
|
|
|
2003-12-22 08:01:01 +00:00
|
|
|
/*
|
|
|
|
* Redraw all help pages, to use a new font.
|
|
|
|
*/
|
|
|
|
void help_redraw(void)
|
|
|
|
{
|
2003-12-22 21:52:41 +00:00
|
|
|
GSList *help_page_ent;
|
|
|
|
|
2003-12-22 08:01:01 +00:00
|
|
|
if (help_w != NULL) {
|
2003-12-22 21:52:41 +00:00
|
|
|
for (help_page_ent = help_text_pages; help_page_ent != NULL;
|
|
|
|
help_page_ent = g_slist_next(help_page_ent))
|
|
|
|
help_redraw_page((help_page_t *)help_page_ent->data);
|
2000-09-08 10:59:21 +00:00
|
|
|
}
|
|
|
|
}
|