Don't have a dummy widget to use for panes marked as "None" - that means

the widget in question gets more than one parent if more than one pane
is marked as "None", and GTK_ doesn't like that.  Instead, just have
"main_widget_layout()" return a null pointer for "None" panes, and don't
put the pane into the pane splitter if that pane is null.

Clean up the handling of layouts.

svn path=/trunk/; revision=11855
This commit is contained in:
Guy Harris 2004-08-31 02:49:28 +00:00
parent 344dddb124
commit 92a52408e8
1 changed files with 33 additions and 35 deletions

View File

@ -149,7 +149,7 @@
capture_file cfile;
GtkWidget *main_display_filter_widget=NULL;
GtkWidget *top_level = NULL, *tree_view, *byte_nb_ptr, *tv_scrollw;
static GtkWidget *none_lb, *main_pane_v1, *main_pane_v2, *main_pane_h1, *main_pane_h2;
static GtkWidget *main_pane_v1, *main_pane_v2, *main_pane_h1, *main_pane_h2;
static GtkWidget *main_first_pane, *main_second_pane;
static GtkWidget *status_pane;
static GtkWidget *menubar, *main_vbox, *main_tb, *pkt_scrollw, *stat_hbox, *filter_tb;
@ -2689,7 +2689,7 @@ GtkWidget *main_widget_layout(gint layout_content)
{
switch(layout_content) {
case(layout_pane_content_none):
return none_lb;
return NULL;
break;
case(layout_pane_content_plist):
return pkt_scrollw;
@ -2711,7 +2711,9 @@ GtkWidget *main_widget_layout(gint layout_content)
* Rearrange the main window widgets
*/
void main_widgets_rearrange(void) {
GtkWidget *pane_content[3];
GtkWidget *first_pane_widget1, *first_pane_widget2;
GtkWidget *second_pane_widget1, *second_pane_widget2;
gboolean split_top_left;
/* be a bit faster */
gtk_widget_hide(main_vbox);
@ -2727,7 +2729,6 @@ void main_widgets_rearrange(void) {
gtk_widget_ref(info_bar);
gtk_widget_ref(packets_bar);
gtk_widget_ref(status_pane);
gtk_widget_ref(none_lb);
gtk_widget_ref(main_pane_v1);
gtk_widget_ref(main_pane_v2);
gtk_widget_ref(main_pane_h1);
@ -2753,64 +2754,63 @@ void main_widgets_rearrange(void) {
gtk_box_pack_start(GTK_BOX(main_vbox), filter_tb, FALSE, TRUE, 1);
}
/* get the corresponding widgets to the content setting */
pane_content[0] = main_widget_layout(prefs.gui_layout_content_1);
pane_content[1] = main_widget_layout(prefs.gui_layout_content_2);
pane_content[2] = main_widget_layout(prefs.gui_layout_content_3);
/* fill the main layout panes */
switch(prefs.gui_layout_type) {
case(layout_type_5):
main_first_pane = main_pane_v1;
main_second_pane = main_pane_v2;
gtk_paned_add1(GTK_PANED(main_first_pane), pane_content[0]);
gtk_paned_add2(GTK_PANED(main_first_pane), main_second_pane);
gtk_paned_pack1(GTK_PANED(main_second_pane), pane_content[1], TRUE, TRUE);
gtk_paned_pack2(GTK_PANED(main_second_pane), pane_content[2], FALSE, FALSE);
split_top_left = FALSE;
break;
case(layout_type_2):
main_first_pane = main_pane_v1;
main_second_pane = main_pane_h1;
gtk_paned_add1(GTK_PANED(main_first_pane), pane_content[0]);
gtk_paned_add2(GTK_PANED(main_first_pane), main_second_pane);
gtk_paned_pack1(GTK_PANED(main_second_pane), pane_content[1], TRUE, TRUE);
gtk_paned_pack2(GTK_PANED(main_second_pane), pane_content[2], FALSE, FALSE);
split_top_left = FALSE;
break;
case(layout_type_1):
main_first_pane = main_pane_v1;
main_second_pane = main_pane_h1;
gtk_paned_add1(GTK_PANED(main_first_pane), main_second_pane);
gtk_paned_add2(GTK_PANED(main_first_pane), pane_content[2]);
gtk_paned_pack1(GTK_PANED(main_second_pane), pane_content[0], TRUE, TRUE);
gtk_paned_pack2(GTK_PANED(main_second_pane), pane_content[1], FALSE, FALSE);
split_top_left = TRUE;
break;
case(layout_type_4):
main_first_pane = main_pane_h1;
main_second_pane = main_pane_v1;
gtk_paned_add1(GTK_PANED(main_first_pane), pane_content[0]);
gtk_paned_add2(GTK_PANED(main_first_pane), main_second_pane);
gtk_paned_pack1(GTK_PANED(main_second_pane), pane_content[1], TRUE, TRUE);
gtk_paned_pack2(GTK_PANED(main_second_pane), pane_content[2], FALSE, FALSE);
split_top_left = FALSE;
break;
case(layout_type_3):
main_first_pane = main_pane_h1;
main_second_pane = main_pane_v1;
gtk_paned_add1(GTK_PANED(main_first_pane), main_second_pane);
gtk_paned_add2(GTK_PANED(main_first_pane), pane_content[2]);
gtk_paned_pack1(GTK_PANED(main_second_pane), pane_content[0], TRUE, TRUE);
gtk_paned_pack2(GTK_PANED(main_second_pane), pane_content[1], FALSE, FALSE);
split_top_left = TRUE;
break;
case(layout_type_6):
main_first_pane = main_pane_h1;
main_second_pane = main_pane_h2;
gtk_paned_add1(GTK_PANED(main_first_pane), pane_content[0]);
gtk_paned_add2(GTK_PANED(main_first_pane), main_second_pane);
gtk_paned_pack1(GTK_PANED(main_second_pane), pane_content[1], TRUE, TRUE);
gtk_paned_pack2(GTK_PANED(main_second_pane), pane_content[2], FALSE, FALSE);
split_top_left = FALSE;
break;
default:
main_first_pane = NULL;
main_second_pane = NULL;
split_top_left = FALSE;
g_assert_not_reached();
}
if (split_top_left) {
first_pane_widget1 = main_second_pane;
second_pane_widget1 = main_widget_layout(prefs.gui_layout_content_1);
second_pane_widget2 = main_widget_layout(prefs.gui_layout_content_2);
first_pane_widget2 = main_widget_layout(prefs.gui_layout_content_3);
} else {
first_pane_widget1 = main_widget_layout(prefs.gui_layout_content_1);
first_pane_widget2 = main_second_pane;
second_pane_widget1 = main_widget_layout(prefs.gui_layout_content_2);
second_pane_widget2 = main_widget_layout(prefs.gui_layout_content_3);
}
if (first_pane_widget1 != NULL)
gtk_paned_add1(GTK_PANED(main_first_pane), first_pane_widget1);
if (first_pane_widget2 != NULL)
gtk_paned_add2(GTK_PANED(main_first_pane), first_pane_widget2);
if (second_pane_widget1 != NULL)
gtk_paned_pack1(GTK_PANED(main_second_pane), second_pane_widget1, TRUE, TRUE);
if (second_pane_widget2 != NULL)
gtk_paned_pack2(GTK_PANED(main_second_pane), second_pane_widget2, FALSE, FALSE);
gtk_container_add(GTK_CONTAINER(main_vbox), main_first_pane);
@ -3033,8 +3033,6 @@ create_main_window (gint pl_size, gint tv_size, gint bv_size, e_prefs *prefs)
/* Panes for the packet list, tree, and byte view */
none_lb = gtk_label_new("None");
main_pane_v1 = gtk_vpaned_new();
gtk_widget_show(main_pane_v1);
main_pane_v2 = gtk_vpaned_new();