mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-25 21:21:21 +00:00
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:
parent
fea939b3d7
commit
c184458ab3
@ -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);
|
||||
|
||||
|
28
testsuite/reftests/notebook-tab-position.css
Normal file
28
testsuite/reftests/notebook-tab-position.css
Normal 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;
|
||||
}
|
38
testsuite/reftests/notebook-tab-position.ref.ui
Normal file
38
testsuite/reftests/notebook-tab-position.ref.ui
Normal 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>
|
37
testsuite/reftests/notebook-tab-position.ui
Normal file
37
testsuite/reftests/notebook-tab-position.ui
Normal 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>
|
Loading…
Reference in New Issue
Block a user