Re: how to remove a CanvasWidget from a canvas and put it on another
- From: Damon Chaplin <damon helixcode com>
- To: thomas linuxpro org
- Cc: Havoc Pennington <hp redhat com>, u07ih abdn ac uk,gnome-devel-list gnome org
- Subject: Re: how to remove a CanvasWidget from a canvas and put it on another
- Date: Sun, 11 Jun 2000 12:38:07 -0400
Thomas Morris wrote:
>
> Havoc Pennington wrote:
>
> > u07ih@abdn.ac.uk writes:
> > > > I've tried your suggestion however when the canvas is destroyed the canvasitem
> > > > that is associated with the gtkwidget is destroyed and subsequently performs a
> > > > gtk_widget_destroy() on the gtkwidget. Calling gtk_widget_ref() before destroying
> > > > the canvas doesn't seem to keep the widget from being destroyed along with the
> > > > canvasitem.
> > >
> > > This sounds like a bug. A widget should not be destroyed if there is a ref held
> > > on it.
> > >
> >
> > False, destruction has nothing to do with the refcount. The refcount
> > merely prevents finalization. http://developer.gnome.org/doc/GGAD has
> > some text on this point.
> >
>
> thats a great point about refcount. It solves a few problems that I've experienced. I
> hadn't dug deep enough into gtk to figure this out. I am still at a loss on how exactly
> to remove a CanvasWidget from a canvas without destroying the underlying widget. I want
> to cleanly move a widget from one canvas to another by removing the widget from the
> first canvas, destroying the canvas, then creating a CanvasWidget on the second canvas
> from the widget I removed from the first. I've got a way to make this work however it
> means accessing some of the CanvasItems' struct members directly instead of throught
> member functions. Basically what I would like is a gnome_canvas_remove_item(GnomeCanvas
> *c, GnomeCanvasItem *i) function that removes the CanvasItem but doesn't destroy the
> widget used to create CanvasItemWidgets. I thought using gtk_container_remove would do
> the trick but it doesn't. Anyway, thanks for the help and enlightening me on refcounts.
It is a bug. gnome_canvas_widget_destroy() calls gtk_widget_destroy()
which destroys
your widget.
You may be able to work around it by:
o calling gtk_widget_ref() on the widget.
o setting the "widget" arg of the canvas item to NULL. (The
gnome_canvas_widget_set_arg()
function calls gtk_container_remove() instead of
gtk_widget_destroy()).
o destroying the canvas item.
o adding the widget to the new GnomeCanvasWidget item.
o calling gtk_widget_unref() to unref it.
(There also seems to be a bug in gnome_canvas_widget_set_arg() - if you
set the widget to
NULL it does not set the widget field to NULL.)
Damon
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]