It was silly of me to require that "forget_scrolled_window()" be called

explicitly; the right thing to do was to have
"remember_scrolled_window()" catch the "destroy" signal on the scrolled
window widget, and have the handler for that signal forget the scrolled
window.

Doing that obviates the need to have creators of scrolled windows keep
track of the windows they have and forget them when they're destroyed.

The signal for a "the window manager has requested that this window go
away" event is "delete_event", not "delete-event"; fix the
"gtk_signal_connect()" calls that were using "delete-event".

svn path=/trunk/; revision=2284
This commit is contained in:
Guy Harris 2000-08-17 07:56:44 +00:00
parent ec5366cede
commit da88c237c2
7 changed files with 58 additions and 105 deletions

View File

@ -1,6 +1,6 @@
/* follow_dlg.c
*
* $Id: follow_dlg.c,v 1.6 2000/08/16 21:08:48 deniel Exp $
* $Id: follow_dlg.c,v 1.7 2000/08/17 07:56:32 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@ -105,9 +105,6 @@ static void follow_stream_om_server(GtkWidget * w, gpointer data);
FILE *data_out_file = NULL;
/* keep a static to the scrolled window to be able to remove it from
* the scrolled windows list */
static GtkWidget *txt_scrollw = NULL;
#define E_FOLLOW_INFO_KEY "follow_info_key"
@ -117,7 +114,7 @@ static GtkWidget *txt_scrollw = NULL;
void
follow_stream_cb(GtkWidget * w, gpointer data)
{
GtkWidget *streamwindow, *vbox, *text, *filter_te;
GtkWidget *streamwindow, *vbox, *txt_scrollw, *text, *filter_te;
GtkWidget *hbox, *button, *radio_bt;
GtkWidget *stream_om, *stream_menu, *stream_mi;
int tmp_fd;
@ -367,11 +364,6 @@ follow_destroy_cb(GtkWidget *w, gpointer data)
{
follow_info_t *follow_info;
if (txt_scrollw) {
forget_scrolled_window(txt_scrollw);
txt_scrollw = NULL;
}
follow_info = gtk_object_get_data(GTK_OBJECT(w), E_FOLLOW_INFO_KEY);
unlink(follow_info->data_out_filename);
gtk_widget_destroy(w);

View File

@ -1,7 +1,7 @@
/* gtkglobals.h
* GTK-related Global defines, etc.
*
* $Id: gtkglobals.h,v 1.9 2000/07/03 08:36:02 guy Exp $
* $Id: gtkglobals.h,v 1.10 2000/08/17 07:56:34 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@ -39,7 +39,6 @@ extern GtkStyle *item_style;
void set_scrollbar_placement_scrollw(GtkWidget *, int); /* 0=left, 1=right */
void set_scrollbar_placement_all(int); /* 1=right, 0=left */
void remember_scrolled_window(GtkWidget *);
void forget_scrolled_window(GtkWidget *);
void set_plist_sel_browse(gboolean);
void set_ptree_sel_browse(GtkWidget *, gboolean);
void set_ptree_sel_browse_all(gboolean);

View File

@ -1,6 +1,6 @@
/* help_dlg.c
*
* $Id: help_dlg.c,v 1.3 2000/08/16 21:08:48 deniel Exp $
* $Id: help_dlg.c,v 1.4 2000/08/17 07:56:34 guy Exp $
*
* Laurent Deniel <deniel@worldnet.fr>
*
@ -49,8 +49,6 @@
#include "util.h"
#include "ui_util.h"
#define MAX_SCROLLED_WINDOWS 5
typedef enum {
OVERVIEW_HELP,
PROTOCOL_HELP,
@ -63,13 +61,11 @@ static void set_text(GtkWidget *w, char *buffer, int nchars);
static void set_help_text(GtkWidget *w, help_type_t type);
static GtkWidget *help_w = NULL;
static GtkWidget *txt_scrollw[MAX_SCROLLED_WINDOWS];
void help_cb(GtkWidget *w, gpointer data)
{
int nb_scroll = 0;
GtkWidget *main_vb, *bbox, *help_nb, *close_bt, *label,
GtkWidget *main_vb, *bbox, *help_nb, *close_bt, *label, *txt_scrollw,
*overview_vb, *overview_text,
*proto_vb, *proto_text,
*dfilter_vb, *dfilter_text,
@ -80,16 +76,10 @@ void help_cb(GtkWidget *w, gpointer data)
return;
}
for(nb_scroll = 0; nb_scroll < MAX_SCROLLED_WINDOWS; nb_scroll++) {
txt_scrollw[nb_scroll] = NULL;
}
nb_scroll = 0;
help_w = gtk_window_new(GTK_WINDOW_DIALOG);
gtk_widget_set_name(help_w, "Ethereal Help window" );
gtk_window_set_title(GTK_WINDOW(help_w), "Ethereal: Help");
gtk_signal_connect(GTK_OBJECT(help_w), "delete-event",
gtk_signal_connect(GTK_OBJECT(help_w), "delete_event",
GTK_SIGNAL_FUNC(help_close_cb), NULL);
gtk_signal_connect(GTK_OBJECT(help_w), "destroy",
GTK_SIGNAL_FUNC(help_close_cb), NULL);
@ -112,22 +102,20 @@ void help_cb(GtkWidget *w, gpointer data)
overview_vb = gtk_vbox_new(FALSE, 0);
gtk_container_border_width(GTK_CONTAINER(overview_vb), 1);
txt_scrollw[nb_scroll] = gtk_scrolled_window_new(NULL, NULL);
gtk_box_pack_start(GTK_BOX(overview_vb), txt_scrollw[nb_scroll],
TRUE, TRUE, 0);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(txt_scrollw[nb_scroll]),
txt_scrollw = gtk_scrolled_window_new(NULL, NULL);
gtk_box_pack_start(GTK_BOX(overview_vb), txt_scrollw, TRUE, TRUE, 0);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(txt_scrollw),
GTK_POLICY_NEVER,
GTK_POLICY_ALWAYS);
set_scrollbar_placement_scrollw(txt_scrollw[nb_scroll],
prefs.gui_scrollbar_on_right);
remember_scrolled_window(txt_scrollw[nb_scroll]);
set_scrollbar_placement_scrollw(txt_scrollw, prefs.gui_scrollbar_on_right);
remember_scrolled_window(txt_scrollw);
overview_text = gtk_text_new(NULL, NULL );
gtk_text_set_editable(GTK_TEXT(overview_text), FALSE);
gtk_text_set_word_wrap(GTK_TEXT(overview_text), TRUE);
gtk_text_set_line_wrap(GTK_TEXT(overview_text), TRUE);
set_help_text(overview_text, OVERVIEW_HELP);
gtk_container_add(GTK_CONTAINER(txt_scrollw[nb_scroll]), overview_text);
gtk_widget_show(txt_scrollw[nb_scroll]);
gtk_container_add(GTK_CONTAINER(txt_scrollw), overview_text);
gtk_widget_show(txt_scrollw);
gtk_widget_show(overview_text);
gtk_widget_show(overview_vb);
label = gtk_label_new("Overview");
@ -140,21 +128,20 @@ void help_cb(GtkWidget *w, gpointer data)
proto_vb = gtk_vbox_new(FALSE, 0);
gtk_container_border_width(GTK_CONTAINER(proto_vb), 1);
txt_scrollw[++nb_scroll] = gtk_scrolled_window_new(NULL, NULL);
gtk_box_pack_start(GTK_BOX(proto_vb), txt_scrollw[nb_scroll], TRUE, TRUE, 0);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(txt_scrollw[nb_scroll]),
txt_scrollw = gtk_scrolled_window_new(NULL, NULL);
gtk_box_pack_start(GTK_BOX(proto_vb), txt_scrollw, TRUE, TRUE, 0);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(txt_scrollw),
GTK_POLICY_ALWAYS,
GTK_POLICY_ALWAYS);
set_scrollbar_placement_scrollw(txt_scrollw[nb_scroll],
prefs.gui_scrollbar_on_right);
remember_scrolled_window(txt_scrollw[nb_scroll]);
set_scrollbar_placement_scrollw(txt_scrollw, prefs.gui_scrollbar_on_right);
remember_scrolled_window(txt_scrollw);
proto_text = gtk_text_new(NULL, NULL);
gtk_text_set_editable(GTK_TEXT(proto_text), FALSE);
gtk_text_set_line_wrap(GTK_TEXT(proto_text), FALSE);
set_help_text(proto_text, PROTOCOL_HELP);
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(txt_scrollw[nb_scroll]),
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(txt_scrollw),
proto_text);
gtk_widget_show(txt_scrollw[nb_scroll]);
gtk_widget_show(txt_scrollw);
gtk_widget_show(proto_text);
gtk_widget_show(proto_vb);
label = gtk_label_new("Protocols");
@ -164,22 +151,20 @@ void help_cb(GtkWidget *w, gpointer data)
dfilter_vb = gtk_vbox_new(FALSE, 0);
gtk_container_border_width(GTK_CONTAINER(dfilter_vb), 1);
txt_scrollw[++nb_scroll] = gtk_scrolled_window_new(NULL, NULL);
gtk_box_pack_start(GTK_BOX(dfilter_vb), txt_scrollw[nb_scroll],
TRUE, TRUE, 0);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(txt_scrollw[nb_scroll]),
txt_scrollw = gtk_scrolled_window_new(NULL, NULL);
gtk_box_pack_start(GTK_BOX(dfilter_vb), txt_scrollw, TRUE, TRUE, 0);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(txt_scrollw),
GTK_POLICY_ALWAYS,
GTK_POLICY_ALWAYS);
set_scrollbar_placement_scrollw(txt_scrollw[nb_scroll],
prefs.gui_scrollbar_on_right);
remember_scrolled_window(txt_scrollw[nb_scroll]);
set_scrollbar_placement_scrollw(txt_scrollw, prefs.gui_scrollbar_on_right);
remember_scrolled_window(txt_scrollw);
dfilter_text = gtk_text_new(NULL, NULL);
gtk_text_set_editable(GTK_TEXT(dfilter_text), FALSE);
gtk_text_set_line_wrap(GTK_TEXT(dfilter_text), FALSE);
set_help_text(dfilter_text, DFILTER_HELP);
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(txt_scrollw[nb_scroll]),
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(txt_scrollw),
dfilter_text);
gtk_widget_show(txt_scrollw[nb_scroll]);
gtk_widget_show(txt_scrollw);
gtk_widget_show(dfilter_text);
gtk_widget_show(dfilter_vb);
label = gtk_label_new("Display Filters");
@ -189,22 +174,20 @@ void help_cb(GtkWidget *w, gpointer data)
cfilter_vb = gtk_vbox_new(FALSE, 0);
gtk_container_border_width(GTK_CONTAINER(cfilter_vb), 1);
txt_scrollw[++nb_scroll] = gtk_scrolled_window_new(NULL, NULL);
gtk_box_pack_start(GTK_BOX(cfilter_vb), txt_scrollw[nb_scroll],
TRUE, TRUE, 0);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(txt_scrollw[nb_scroll]),
txt_scrollw = gtk_scrolled_window_new(NULL, NULL);
gtk_box_pack_start(GTK_BOX(cfilter_vb), txt_scrollw, TRUE, TRUE, 0);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(txt_scrollw),
GTK_POLICY_NEVER,
GTK_POLICY_ALWAYS);
set_scrollbar_placement_scrollw(txt_scrollw[nb_scroll],
prefs.gui_scrollbar_on_right);
remember_scrolled_window(txt_scrollw[nb_scroll]);
set_scrollbar_placement_scrollw(txt_scrollw, prefs.gui_scrollbar_on_right);
remember_scrolled_window(txt_scrollw);
cfilter_text = gtk_text_new(NULL, NULL );
gtk_text_set_editable(GTK_TEXT(cfilter_text), FALSE);
gtk_text_set_word_wrap(GTK_TEXT(cfilter_text), TRUE);
gtk_text_set_line_wrap(GTK_TEXT(cfilter_text), TRUE);
set_help_text(cfilter_text, CFILTER_HELP);
gtk_container_add(GTK_CONTAINER(txt_scrollw[nb_scroll]), cfilter_text);
gtk_widget_show(txt_scrollw[nb_scroll]);
gtk_container_add(GTK_CONTAINER(txt_scrollw), cfilter_text);
gtk_widget_show(txt_scrollw);
gtk_widget_show(cfilter_text);
gtk_widget_show(cfilter_vb);
label = gtk_label_new("Capture Filters");
@ -234,13 +217,6 @@ void help_cb(GtkWidget *w, gpointer data)
static void help_close_cb(GtkWidget *w, gpointer data)
{
int nb_scroll;
for(nb_scroll = 0; nb_scroll < MAX_SCROLLED_WINDOWS; nb_scroll++) {
if (txt_scrollw[nb_scroll]) {
forget_scrolled_window(txt_scrollw[nb_scroll]);
txt_scrollw[nb_scroll] = NULL;
}
}
if (help_w)
gtk_widget_destroy(help_w);
help_w = NULL;

View File

@ -1,6 +1,6 @@
/* main.c
*
* $Id: main.c,v 1.135 2000/08/15 22:22:35 guy Exp $
* $Id: main.c,v 1.136 2000/08/17 07:56:37 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@ -537,15 +537,22 @@ set_scrollbar_placement_scrollw(GtkWidget *scrollw, int pos) /* 0=left, 1=right
static GList *scrolled_windows;
/* Add a scrolled window to the list of scrolled windows. */
static void forget_scrolled_window(GtkWidget *scrollw, gpointer data);
void
remember_scrolled_window(GtkWidget *scrollw)
{
scrolled_windows = g_list_append(scrolled_windows, scrollw);
/* Catch the "destroy" event on the widget, so that we remove it from
the list when it's destroyed. */
gtk_signal_connect(GTK_OBJECT(scrollw), "destroy",
GTK_SIGNAL_FUNC(forget_scrolled_window), NULL);
}
/* Remove a scrolled window from the list of scrolled windows. */
void
forget_scrolled_window(GtkWidget *scrollw)
static void
forget_scrolled_window(GtkWidget *scrollw, gpointer data)
{
scrolled_windows = g_list_remove(scrolled_windows, scrollw);
}

View File

@ -3,7 +3,7 @@
*
* Copyright 2000, Jeffrey C. Foster <jfoste@woodward.com>
*
* $Id: packet_win.c,v 1.10 2000/08/03 12:44:40 gram Exp $
* $Id: packet_win.c,v 1.11 2000/08/17 07:56:42 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@ -206,8 +206,6 @@ destroy_new_window(GtkObject *object, gpointer user_data)
struct PacketWinData *DataPtr = user_data;
detail_windows = g_list_remove(detail_windows, DataPtr);
forget_scrolled_window(DataPtr->tv_scrollw);
forget_scrolled_window(DataPtr->bv_scrollw);
proto_tree_free(DataPtr->protocol_tree);
g_free(DataPtr->pd);
g_free(DataPtr);

View File

@ -1,7 +1,7 @@
/* prefs_dlg.c
* Routines for handling preferences
*
* $Id: prefs_dlg.c,v 1.19 2000/08/15 20:53:24 deniel Exp $
* $Id: prefs_dlg.c,v 1.20 2000/08/17 07:56:42 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@ -252,7 +252,7 @@ prefs_cb(GtkWidget *w, gpointer dummy) {
prefs_w = dlg_window_new();
gtk_window_set_title(GTK_WINDOW(prefs_w), "Ethereal: Preferences");
gtk_signal_connect(GTK_OBJECT(prefs_w), "delete-event",
gtk_signal_connect(GTK_OBJECT(prefs_w), "delete_event",
GTK_SIGNAL_FUNC(prefs_main_delete_cb), NULL);
gtk_signal_connect(GTK_OBJECT(prefs_w), "destroy",
GTK_SIGNAL_FUNC(prefs_main_destroy_cb), NULL);

View File

@ -1,6 +1,6 @@
/* proto_dlg.c
*
* $Id: proto_dlg.c,v 1.3 2000/08/16 21:08:47 deniel Exp $
* $Id: proto_dlg.c,v 1.4 2000/08/17 07:56:44 guy Exp $
*
* Laurent Deniel <deniel@worldnet.fr>
*
@ -57,8 +57,6 @@
#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);
@ -66,7 +64,6 @@ 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 */
@ -79,21 +76,15 @@ 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, *selection_vb;
*label, *scrolled_w, *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",
@ -122,18 +113,16 @@ 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[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]),
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),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_ALWAYS);
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]);
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);
gtk_widget_show(selection_vb);
label = gtk_label_new("Decoding");
gtk_notebook_append_page(GTK_NOTEBOOK(proto_nb), selection_vb, label);
@ -186,14 +175,6 @@ 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);