Bug 553578 - tabs are not drawn correctly

2008-09-26  Matthias Clasen  <mclasen@redhat.com>

        Bug 553578 - tabs are not drawn correctly

        * gtk/gtknotebook.c: Track the visibility state of notebook tabs
        between allocations so that we know to redraw the tab labels if
        tabs are hidden and shown without changing position.
        Reported by Marek Kašík, patch by Owen Taylor.


svn path=/trunk/; revision=21525
This commit is contained in:
Matthias Clasen 2008-09-26 23:58:12 +00:00 committed by Matthias Clasen
parent bc48caa272
commit 9b320a62f1
2 changed files with 28 additions and 2 deletions

View File

@ -1,3 +1,12 @@
2008-09-26 Matthias Clasen <mclasen@redhat.com>
Bug 553578 - tabs are not drawn correctly
* gtk/gtknotebook.c: Track the visibility state of notebook tabs
between allocations so that we know to redraw the tab labels if
tabs are hidden and shown without changing position.
Reported by Marek Kašík, patch by Owen Taylor.
2008-09-26 Matthias Clasen <mclasen@redhat.com>
Bug 553133 GtkFileChooser won't ask to mount a volume

View File

@ -153,6 +153,11 @@ struct _GtkNotebookPage
guint reorderable : 1;
guint detachable : 1;
/* if true, the tab label was visible on last allocation; we track this so
* that we know to redraw the tab area if a tab label was hidden then shown
* without changing position */
guint tab_allocated_visible : 1;
GtkRequisition requisition;
GtkAllocation allocation;
@ -5556,9 +5561,15 @@ gtk_notebook_page_allocate (GtkNotebook *notebook,
gint tab_curvature;
gint tab_pos = get_effective_tab_pos (notebook);
gboolean tab_allocation_changed;
gboolean was_visible = page->tab_allocated_visible;
if (!page->tab_label)
return FALSE;
if (!page->tab_label ||
!GTK_WIDGET_VISIBLE (page->tab_label) ||
!gtk_widget_get_child_visible (page->tab_label))
{
page->tab_allocated_visible = FALSE;
return was_visible;
}
xthickness = widget->style->xthickness;
ythickness = widget->style->ythickness;
@ -5630,6 +5641,12 @@ gtk_notebook_page_allocate (GtkNotebook *notebook,
gtk_widget_size_allocate (page->tab_label, &child_allocation);
if (!was_visible)
{
page->tab_allocated_visible = TRUE;
tab_allocation_changed = TRUE;
}
return tab_allocation_changed;
}