Thanks Will,
You rock, that worked perfectly.
Regards.
Rouan
________________________________
From: Will Thompson <w...@willthompson.co.uk>
To: Rouan van Dalen <rvda...@yahoo.co.uk>
Cc: "gtk2hs-devel@lists.sourceforge.net" <gtk2hs-devel@lists.sourceforge.net>
Sent: Wednesday, 9 January 2013, 11:47
Subject: Re: [Gtk2hs-devel] problems getting the ancestor of an ancestor of a
widget
On 09/01/13 09:31, Rouan van Dalen wrote:
> I have an Entry widget inside an EventBox (innerEventBox), and I have
> the innerEventBox inside another
> EventBox (outerEventBox).
>
> I need to traverse from the Entry widget to the outerEventBox so I can
> set the background color of the
> outerEventBox.
>
> I have the following code to do this:
>
> get2ndAncestor :: Widget -> GType -> IO (Maybe Widget)
> get2ndAncestor widget gtype =
> do ancestor1 <- widgetGetAncestor widget gtype
> ancestor2 <- maybe (return Nothing) ((flip
> widgetGetAncestor) gtype) ancestor1
> return ancestor2
>
> When I use this code, it gets the 1st ancestor correctly, but the 2nd
> ancestor is the same as the 1st.
> The code above never returns the 2nd ancestor.
>
> The docs for widgetGetAncestor has a line that says:
>
> "Note that unlike widgetIsAncestor, widgetGetAncestor considers widget
> to be an ancestor of itself."
>
> I am not sure exactly what that line means, and if it is the cause of my
> problems. If so, how do I get the
> ancestor of the ancestor of a widget?
It is the cause of your problems. You have this hierarchy of widgets:
EventBox (a) -> EventBox (b) -> Entry (c)
'widgetGetAncestor b gTypeEventBox' returns Just b, because "widgetGetAncestor
considers widget to be an ancestor of itself". It checks if b is an instance of
gTypeEventBox, and since it is, returns it. When you call 'widgetGetAncestor c
gTypeEventBox', it checks whether c is an EventBox, finds it is not, and
recurses upwards.
If you know that the widget you want is exactly the grandparent of the widget
you're starting from, you should be able to use widgetGetParent twice to get
the EventBox you want.
It might be less fragile to keep hold of the EventBox you're looking for when
you initially create your UI, so that you don't have to rely on the exact
widget structure to find what you're looking for.
-- Will
------------------------------------------------------------------------------
Master Java SE, Java EE, Eclipse, Spring, Hibernate, JavaScript, jQuery
and much more. Keep your Java skills current with LearnJavaNow -
200+ hours of step-by-step video tutorials by Java experts.
SALE $49.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122612
_______________________________________________
Gtk2hs-devel mailing list
Gtk2hs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gtk2hs-devel