aboutsummaryrefslogtreecommitdiffstats
path: root/gtk/proto_dlg.c
diff options
context:
space:
mode:
authordeniel <deniel@f5534014-38df-0310-8fa8-9805f1628bb7>2000-08-16 21:08:48 +0000
committerdeniel <deniel@f5534014-38df-0310-8fa8-9805f1628bb7>2000-08-16 21:08:48 +0000
commit90c1518dddaf5e347fc6e28f3b67b0a746aff40c (patch)
tree6ca0c04f3d419e0bea77d2e6ffcde98dc849f9d8 /gtk/proto_dlg.c
parentb8b85b92970123f8a3bc81a1494b83756fa1f040 (diff)
Fix a long standing bug in the scrolled window handling in follow TCP stream
which make ethereal aborts if the preferences were modified (or cancel) after the TCP window was closed. Fix the same bug in the other scrolled window handling (help & protocols). (forget_scrolled_window() was not called at the window closure). git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@2283 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'gtk/proto_dlg.c')
-rw-r--r--gtk/proto_dlg.c41
1 files changed, 30 insertions, 11 deletions
diff --git a/gtk/proto_dlg.c b/gtk/proto_dlg.c
index 66aabb324a..f484659a65 100644
--- a/gtk/proto_dlg.c
+++ b/gtk/proto_dlg.c
@@ -1,6 +1,6 @@
/* proto_dlg.c
*
- * $Id: proto_dlg.c,v 1.2 2000/08/16 20:14:24 deniel Exp $
+ * $Id: proto_dlg.c,v 1.3 2000/08/16 21:08:47 deniel Exp $
*
* Laurent Deniel <deniel@worldnet.fr>
*
@@ -57,6 +57,8 @@
#include "dlg_utils.h"
#include "proto_dlg.h"
+#define MAX_SCROLLED_WINDOWS 1
+
static void proto_ok_cb(GtkWidget *, gpointer);
static void proto_apply_cb(GtkWidget *, gpointer);
static void proto_close_cb(GtkWidget *, gpointer);
@@ -64,6 +66,7 @@ static void proto_close_cb(GtkWidget *, gpointer);
static void show_proto_selection(GtkWidget *main, GtkWidget *container);
static gboolean set_proto_selection(GtkWidget *);
+static GtkWidget *scrolled_w[MAX_SCROLLED_WINDOWS];
static GtkWidget *proto_w = NULL;
/* list of protocols */
@@ -76,15 +79,21 @@ typedef struct protocol_data {
void proto_cb(GtkWidget *w, gpointer data)
{
-
+ int nb_scroll = 0;
GtkWidget *main_vb, *bbox, *proto_nb, *apply_bt, *cancel_bt, *ok_bt,
- *label, *scrolled_w, *selection_vb;
+ *label, *selection_vb;
if (proto_w != NULL) {
reactivate_window(proto_w);
return;
}
+ for(nb_scroll = 0; nb_scroll < MAX_SCROLLED_WINDOWS; nb_scroll++) {
+ scrolled_w[nb_scroll] = NULL;
+ }
+
+ nb_scroll = 0;
+
proto_w = dlg_window_new();
gtk_window_set_title(GTK_WINDOW(proto_w), "Ethereal: Protocol");
gtk_signal_connect(GTK_OBJECT(proto_w), "destroy",
@@ -113,16 +122,18 @@ void proto_cb(GtkWidget *w, gpointer data)
label = gtk_label_new("Button pressed: protocol decoding is enabled");
gtk_widget_show(label);
gtk_box_pack_start(GTK_BOX(selection_vb), label, FALSE, FALSE, 0);
- scrolled_w = gtk_scrolled_window_new(NULL, NULL);
- gtk_container_set_border_width(GTK_CONTAINER(scrolled_w), 1);
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_w),
+ scrolled_w[nb_scroll] = gtk_scrolled_window_new(NULL, NULL);
+ gtk_container_set_border_width(GTK_CONTAINER(scrolled_w[nb_scroll]), 1);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_w[nb_scroll]),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_ALWAYS);
- set_scrollbar_placement_scrollw(scrolled_w, prefs.gui_scrollbar_on_right);
- remember_scrolled_window(scrolled_w);
- gtk_box_pack_start(GTK_BOX(selection_vb), scrolled_w, TRUE, TRUE, 0);
- show_proto_selection(proto_w, scrolled_w);
- gtk_widget_show(scrolled_w);
+ set_scrollbar_placement_scrollw(scrolled_w[nb_scroll],
+ prefs.gui_scrollbar_on_right);
+ remember_scrolled_window(scrolled_w[nb_scroll]);
+ gtk_box_pack_start(GTK_BOX(selection_vb), scrolled_w[nb_scroll],
+ TRUE, TRUE, 0);
+ show_proto_selection(proto_w, scrolled_w[nb_scroll]);
+ gtk_widget_show(scrolled_w[nb_scroll]);
gtk_widget_show(selection_vb);
label = gtk_label_new("Decoding");
gtk_notebook_append_page(GTK_NOTEBOOK(proto_nb), selection_vb, label);
@@ -175,6 +186,14 @@ void proto_cb(GtkWidget *w, gpointer data)
static void proto_close_cb(GtkWidget *w, gpointer data)
{
GSList *entry;
+ int nb_scroll;
+
+ for(nb_scroll = 0; nb_scroll < MAX_SCROLLED_WINDOWS; nb_scroll++) {
+ if (scrolled_w[nb_scroll]) {
+ forget_scrolled_window(scrolled_w[nb_scroll]);
+ scrolled_w[nb_scroll] = NULL;
+ }
+ }
if (proto_w)
gtk_widget_destroy(proto_w);