diff --git a/gtk/gtknotebook.c b/gtk/gtknotebook.c
index c94f906f96..1e48671e9a 100644
--- a/gtk/gtknotebook.c
+++ b/gtk/gtknotebook.c
@@ -1987,6 +1987,29 @@ _gtk_notebook_get_tab_flags (GtkNotebook *notebook,
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
notebook_tab_prepare_style_context (GtkNotebook *notebook,
GtkNotebookPage *page,
@@ -2013,24 +2036,7 @@ notebook_tab_prepare_style_context (GtkNotebook *notebook,
flags = _gtk_notebook_get_tab_flags (notebook, page);
gtk_style_context_add_region (context, GTK_STYLE_REGION_TAB, flags);
-
- 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;
- }
+ add_tab_position_style_class (context, tab_pos);
return state;
}
@@ -5277,29 +5283,26 @@ gtk_notebook_paint (GtkWidget *widget,
header_height = height;
gtk_style_context_save (context);
+ 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);
y += page->allocation.height;
height -= page->allocation.height;
header_height = page->allocation.height;
break;
case GTK_POS_BOTTOM:
- gtk_style_context_add_class (context, GTK_STYLE_CLASS_BOTTOM);
height -= page->allocation.height;
header_y += height;
header_height = page->allocation.height;
break;
case GTK_POS_LEFT:
- gtk_style_context_add_class (context, GTK_STYLE_CLASS_LEFT);
x += page->allocation.width;
width -= page->allocation.width;
header_width = page->allocation.width;
break;
case GTK_POS_RIGHT:
- gtk_style_context_add_class (context, GTK_STYLE_CLASS_RIGHT);
width -= page->allocation.width;
header_width = page->allocation.width;
header_x += width;
@@ -5399,6 +5402,9 @@ gtk_notebook_paint (GtkWidget *widget,
"has-tab-gap", &has_tab_gap,
NULL);
+ if (priv->show_tabs)
+ add_tab_position_style_class (context, tab_pos);
+
if (priv->show_border)
gtk_style_context_add_class (context, GTK_STYLE_CLASS_FRAME);
diff --git a/testsuite/reftests/notebook-tab-position.css b/testsuite/reftests/notebook-tab-position.css
new file mode 100644
index 0000000000..c2fbc494dc
--- /dev/null
+++ b/testsuite/reftests/notebook-tab-position.css
@@ -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;
+}
diff --git a/testsuite/reftests/notebook-tab-position.ref.ui b/testsuite/reftests/notebook-tab-position.ref.ui
new file mode 100644
index 0000000000..53c9a5196e
--- /dev/null
+++ b/testsuite/reftests/notebook-tab-position.ref.ui
@@ -0,0 +1,38 @@
+
+
+
+
+
+
diff --git a/testsuite/reftests/notebook-tab-position.ui b/testsuite/reftests/notebook-tab-position.ui
new file mode 100644
index 0000000000..ec9f1532d7
--- /dev/null
+++ b/testsuite/reftests/notebook-tab-position.ui
@@ -0,0 +1,37 @@
+
+
+
+
+
+ False
+ popup
+
+
+ 50
+ 50
+ True
+ True
+
+
+
+ True
+ False
+ Contents
+
+
+
+
+ True
+ False
+ Tab
+
+
+ False
+
+
+
+
+
+