Re: gtk_notebook_map bug
- From: Owen Taylor <otaylor redhat com>
- To: Damon Chaplin <damon karuna freeserve co uk>
- Cc: gtk-devel-list redhat com
- Subject: Re: gtk_notebook_map bug
- Date: 24 Jan 2000 12:18:20 -0500
Damon Chaplin <damon@karuna.freeserve.co.uk> writes:
> gtk_notebook_map () doesn't check if the tab label is visible before
> mapping it (GTK+ 1.2.6):
>
> if (page->tab_label &&
> GTK_WIDGET_VISIBLE (page->child) &&
> !GTK_WIDGET_MAPPED (page->tab_label))
> gtk_widget_map (page->tab_label);
>
> This results in warnings when a notebook is used with tabs hidden:
>
> Gtk-CRITICAL **: file gtkwidget.c: line 1584 (gtk_widget_map):
> assertion `GTK_WIDGET_VISIBLE (widget) == TRUE' failed.
>
>
> Maybe this would be better (though I'm not sure how GtkNotebook fits
> together):
>
> if (page->tab_label &&
> GTK_WIDGET_VISIBLE (page->child) &&
> GTK_WIDGET_VISIBLE (page->tab_label) &&
> !GTK_WIDGET_MAPPED (page->tab_label))
> gtk_widget_map (page->tab_label);
Do you have an example that could be used to determine the code path
that was causing this warning?
The original code is pretty clearly bogus but I can't actually
reproduce the warning.
There are various things going on here:
a) There doesn't seem to be the proper check here for notebook->show_tabs
b) The notebook shows and hides the tab labels as well mapping/unmapping
them.
So, a safe rewrite for this section of code would look a bit like:
children = notebook->children;
while (children)
{
page = children->data;
children = children->next;
if (page->tab_label)
{
if (notebook->show_tabs && GTK_WIDGET_VISIBLE (page->child))
{
if (GTK_WIDGET_VISIBLE (page->tab_label))
{
if (!GTK_WIDGET_MAPPED (page->tab_label))
gtk_widget_map (page->tab_label);
}
else
gtk_widget_show (page->tab_label);
}
else
{
if (GTK_WIDGET_VISIBLE (page->tab_label))
GTK_WIDGET_HIDE (page->tab_label);
}
}
}
That is probably overkill, since the show/hide is also going on in
gtk_widget_size_request, so perhaps your fix is sufficient. But I'd
like to have a some idea of exactly how the problem is occurring
before I start changing stuff.
Regards,
Owen
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]