[gtk+] notebook: set tab position style class on the main frame



commit c184458ab3b583ab2fa6e0a6da5934941b3cbe7d
Author: Paolo Borelli <pborelli gnome org>
Date:   Thu Jun 12 21:12:18 2014 +0200

    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.

 gtk/gtknotebook.c                               |   50 +++++++++++++----------
 testsuite/reftests/notebook-tab-position.css    |   28 +++++++++++++
 testsuite/reftests/notebook-tab-position.ref.ui |   38 +++++++++++++++++
 testsuite/reftests/notebook-tab-position.ui     |   37 +++++++++++++++++
 4 files changed, 131 insertions(+), 22 deletions(-)
---
diff --git a/gtk/gtknotebook.c b/gtk/gtknotebook.c
index c94f906..1e48671 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 0000000..c2fbc49
--- /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 0000000..53c9a51
--- /dev/null
+++ b/testsuite/reftests/notebook-tab-position.ref.ui
@@ -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>
diff --git a/testsuite/reftests/notebook-tab-position.ui b/testsuite/reftests/notebook-tab-position.ui
new file mode 100644
index 0000000..ec9f153
--- /dev/null
+++ b/testsuite/reftests/notebook-tab-position.ui
@@ -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>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]