Re: GTK_VISIBLE flag
- From: Owen Taylor <otaylor redhat com>
- To: gtk-devel-list redhat com
- Subject: Re: GTK_VISIBLE flag
- Date: 19 Aug 1998 15:33:36 -0400
Owen Taylor <otaylor@redhat.com> writes:
> Lars Hamann <lars@gtk.org> writes:
>
> > Hi Owen!
> >
> > I've a little question about the GTK_VISIBLE flag and the gtk_widget_real_map
> > function.
> >
> > Currently it's possible to call something like :
> >
> > gtk_widget_hide (widget);
> > gtk_widget_realize (widget);
> > gtk_widget_map (widget);
> >
> > This code will bring any widget onto the screen, but its GTK_VISIBLE flag
> > will be FALSE. I think gtk_widget_real_map should set GTK_VISIBLE. Or, if you
> > don't like that, it should at least abort the map operation.
>
> I think a
>
> g_return_if_fail (GTK_WIDGET_VISIBLE (widget));
>
> would be the better solution. (Probably in gtk_widget_map()) Anything
> else would be confusing gtk_widget_map() with gtk_widget_show().
> gtk_widget_map() is a lowlevel call that you shouldn't make on
> a widget unless it's VISIBLE flag is true. I don't really want
> to allow "broken" code to work here, because GTK+ is going to
> have a harder time of it if things are done in strange, unforseen
> orders.
Speaking of strange, unforseen orders, it appears that in
may cases, adding an !VISIBLE widget to a mapped parent will
result in the widget being mapped, though the VISIBLE flag
is not set.
GTK+ is littered with code like: [ from gtk_bin_add() ]
if (GTK_WIDGET_VISIBLE (child->parent))
{
if (GTK_WIDGET_REALIZED (child->parent) &&
!GTK_WIDGET_REALIZED (child))
gtk_widget_realize (child);
if (GTK_WIDGET_MAPPED (child->parent) &&
!GTK_WIDGET_MAPPED (child))
gtk_widget_map (child);
}
These all need to be fixed :-( - it should be
if (GTK_WIDGET_MAPPED (child->parent) &&
GTK_WIDGET_VISIBLE (child) &&
!GTK_WIDGET_MAPPED (child))
gtk_widget_map (child);
Regards,
Owen
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]