Re: Why don't GtkMenu have parents?



Hi Owen,

Yeah I figured that must be what is going on.

So right now if I want to trace up the tree to find the top level
window, I check if it is a GtkMenu and if so use
gtk_menu_get_attach_widget (GTK_MENU (widget)), otherwise just use
widget->parent. Here is an example of the code from glade's support.c:-

GtkWidget*
lookup_widget                          (GtkWidget       *widget,
                                        const gchar     *widget_name)
{
  GtkWidget *parent, *found_widget;

  for (;;)
    {
      if (GTK_IS_MENU (widget))
        parent = gtk_menu_get_attach_widget (GTK_MENU (widget));
      else
        parent = widget->parent;
      if (parent == NULL)
        break;
      widget = parent;
    }

  found_widget = (GtkWidget*) gtk_object_get_data (GTK_OBJECT (widget),
                                                   widget_name);
  if (!found_widget)
    g_warning ("Widget not found: %s", widget_name);
  return found_widget;
}

So my question is should user-land progs be concerned with figuring out
the widget types, or could we provide a library function to do the same
thing? That way all the intricacies of how each widget behaves around
parenting can be hidden.

I am happy to write a function to do this. However if that is
acceptable, I am unclear about which .c file it should live in.

Damian

On Mon, 2001-10-29 at 01:02, Owen Taylor wrote:
> 
> Damian Ivereigh <damian cisco com> writes:
> 
> > Can anyone think of good reason why GtkMenu objects don't have a parent.
> > I would expect them to be parented by the Widget that they are attached
> > to - e.g. in the case of the menu bar at the top, the drop down menu
> > when you hit file is not parented by the "File" menu item.
> > 
> > If it was it would make tracing up the tree (to find the top level
> > window) that much easier.
> > 
> > Or am I misunderstanding something here.
> 
> Parent/child relationships in GTK+ refer to physical containership -
> that is, 
> 
>  widget->window is always a child of window owned by the parent
>  widget->allocation is contained completely within widget->parent->allocation.
> 
> Now, there is an ugly exception to that for GtkHandleBox because
> of it's reparenting nature, but we don't want to extend that
> exception elsewhere.
> 
> So, we use GtkMenuShell->parent_menu_shell instead to handle this.
> 
> Regards,
>                                         Owen
> _______________________________________________
> gtk-devel-list mailing list
> gtk-devel-list gnome org
> http://mail.gnome.org/mailman/listinfo/gtk-devel-list
> 
-- 
Damian Ivereigh
CEPS Team Lead
http://wwwin-print.cisco.com
Desk: +61 2 8446 6344
Mob: +61 418 217 582

Attachment: pgpugBd3BKtch.pgp
Description: PGP signature



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]