notebook: set tab position style class on the main frame

We want to have .top etc also on the notebook frame, not only on
the header frame.
The patch includes a reftest by Benjamin.
This commit is contained in:
Paolo Borelli 2014-06-12 21:12:18 +02:00
parent fea939b3d7
commit c184458ab3
4 changed files with 131 additions and 22 deletions

View File

@ -1987,6 +1987,29 @@ _gtk_notebook_get_tab_flags (GtkNotebook *notebook,
return flags; return flags;
} }
static void
add_tab_position_style_class (GtkStyleContext *context,
gint tab_pos)
{
switch (tab_pos)
{
case GTK_POS_TOP:
gtk_style_context_add_class (context, GTK_STYLE_CLASS_TOP);
break;
case GTK_POS_BOTTOM:
gtk_style_context_add_class (context, GTK_STYLE_CLASS_BOTTOM);
break;
case GTK_POS_LEFT:
gtk_style_context_add_class (context, GTK_STYLE_CLASS_LEFT);
break;
case GTK_POS_RIGHT:
gtk_style_context_add_class (context, GTK_STYLE_CLASS_RIGHT);
break;
default:
break;
}
}
static GtkStateFlags static GtkStateFlags
notebook_tab_prepare_style_context (GtkNotebook *notebook, notebook_tab_prepare_style_context (GtkNotebook *notebook,
GtkNotebookPage *page, GtkNotebookPage *page,
@ -2013,24 +2036,7 @@ notebook_tab_prepare_style_context (GtkNotebook *notebook,
flags = _gtk_notebook_get_tab_flags (notebook, page); flags = _gtk_notebook_get_tab_flags (notebook, page);
gtk_style_context_add_region (context, GTK_STYLE_REGION_TAB, flags); gtk_style_context_add_region (context, GTK_STYLE_REGION_TAB, flags);
add_tab_position_style_class (context, tab_pos);
switch (tab_pos)
{
case GTK_POS_TOP:
gtk_style_context_add_class (context, GTK_STYLE_CLASS_TOP);
break;
case GTK_POS_BOTTOM:
gtk_style_context_add_class (context, GTK_STYLE_CLASS_BOTTOM);
break;
case GTK_POS_LEFT:
gtk_style_context_add_class (context, GTK_STYLE_CLASS_LEFT);
break;
case GTK_POS_RIGHT:
gtk_style_context_add_class (context, GTK_STYLE_CLASS_RIGHT);
break;
default:
break;
}
return state; return state;
} }
@ -5277,29 +5283,26 @@ gtk_notebook_paint (GtkWidget *widget,
header_height = height; header_height = height;
gtk_style_context_save (context); gtk_style_context_save (context);
add_tab_position_style_class (context, tab_pos);
switch (tab_pos) switch (tab_pos)
{ {
case GTK_POS_TOP: case GTK_POS_TOP:
gtk_style_context_add_class (context, GTK_STYLE_CLASS_TOP);
y += page->allocation.height; y += page->allocation.height;
height -= page->allocation.height; height -= page->allocation.height;
header_height = page->allocation.height; header_height = page->allocation.height;
break; break;
case GTK_POS_BOTTOM: case GTK_POS_BOTTOM:
gtk_style_context_add_class (context, GTK_STYLE_CLASS_BOTTOM);
height -= page->allocation.height; height -= page->allocation.height;
header_y += height; header_y += height;
header_height = page->allocation.height; header_height = page->allocation.height;
break; break;
case GTK_POS_LEFT: case GTK_POS_LEFT:
gtk_style_context_add_class (context, GTK_STYLE_CLASS_LEFT);
x += page->allocation.width; x += page->allocation.width;
width -= page->allocation.width; width -= page->allocation.width;
header_width = page->allocation.width; header_width = page->allocation.width;
break; break;
case GTK_POS_RIGHT: case GTK_POS_RIGHT:
gtk_style_context_add_class (context, GTK_STYLE_CLASS_RIGHT);
width -= page->allocation.width; width -= page->allocation.width;
header_width = page->allocation.width; header_width = page->allocation.width;
header_x += width; header_x += width;
@ -5399,6 +5402,9 @@ gtk_notebook_paint (GtkWidget *widget,
"has-tab-gap", &has_tab_gap, "has-tab-gap", &has_tab_gap,
NULL); NULL);
if (priv->show_tabs)
add_tab_position_style_class (context, tab_pos);
if (priv->show_border) if (priv->show_border)
gtk_style_context_add_class (context, GTK_STYLE_CLASS_FRAME); gtk_style_context_add_class (context, GTK_STYLE_CLASS_FRAME);

View File

@ -0,0 +1,28 @@
@import "reset-to-defaults.css";
* {
color: transparent;
}
.notebook.frame,
.notebook.header.frame {
border: 1px solid tomato;
}
.reference.notebook.frame.bottom {
border-bottom-style: none;
}
.reference.notebook.header.frame.bottom {
border-top-style: none;
border-bottom-style: solid;
}
.test.notebook.frame.top {
border-top-style: none;
}
.test.notebook.header.frame.top {
border-top-style: solid;
border-bottom-style: none;
}

View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.18.1 -->
<interface>
<requires lib="gtk+" version="3.12"/>
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<property name="type">popup</property>
<child>
<object class="GtkNotebook" id="notebook1">
<property name="width_request">50</property>
<property name="height_request">50</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="tab_pos">bottom</property>
<style>
<class name="reference" />
</style>
<child>
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Contents</property>
</object>
</child>
<child type="tab">
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Tab</property>
</object>
<packing>
<property name="tab_fill">False</property>
</packing>
</child>
</object>
</child>
</object>
</interface>

View File

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.18.1 -->
<interface>
<requires lib="gtk+" version="3.12"/>
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<property name="type">popup</property>
<child>
<object class="GtkNotebook" id="notebook1">
<property name="width_request">50</property>
<property name="height_request">50</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<style>
<class name="test" />
</style>
<child>
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Contents</property>
</object>
</child>
<child type="tab">
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Tab</property>
</object>
<packing>
<property name="tab_fill">False</property>
</packing>
</child>
</object>
</child>
</object>
</interface>