Ethereal-dev: Re: [ethereal-dev] Popup packet window

Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.

From: Guy Harris <gharris@xxxxxxxxxxxx>
Date: Wed, 16 Feb 2000 22:06:27 -0800
> 2) It should make only one call to "gtk_paned_gutter_size()" - there are
>    only two panes, so there should be only one slider.  (Delete the call
>    that does
> 
>   gtk_paned_gutter_size(GTK_PANED(u_pane), (GTK_PANED(u_pane))->handle_size);
> 
>    .)

Actually, there's more to getting rid of the extraneous pane than that. 
Get rid of "u_pane" and all references to it, rename "l_pane" to "pane",
add the tree view to that pane with

	gtk_paned_add1(GTK_PANED(pane), tv_scrollw);

and add the byte view to it with

	gtk_paned_pack2(GTK_PANED(pane), bv_table, FALSE, FALSE);

A couple more problems:

	1) "DataPtr->pd" shouldn't be set to "cf.pd" - "cf.pd" is
	   subject to change as the user clicks on different packets in
	   the packet list.  Instead, it needs to do something such as

  DataPtr->pd = g_malloc(DataPtr->cap_len);
  memcpy(DataPtr->pd, cf.pd, DataPtr->cap_len);

	   to make a *copy* of the packet data; there then also needs to
	   be a new function such as "destroy_new_window()":

static void
destroy_new_window(gpointer data)
{
  struct NewWinData *DataPtr = data;
                         
  g_free(DataPtr->pd);
  g_free(DataPtr);
}

	   and the destroy function set up in the
	   "gtk_signal_connect_full()" should be "destroy_new_window()".

	2) In addition, it *also* needs to create its own protocol tree,
	   rather than using the one for the current packet - the one
	   for the current packet is subject to being destroyed if the
	   user clicks on a different packet in the packet list.