summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2014-08-13 16:18:39 +0200
committerBenjamin Otte <otte@redhat.com>2014-08-13 16:51:16 +0200
commitdff52f7a040c2271ed93307f32a545bd662f9dbc (patch)
tree6f2e8060e8d0e51f34713e13075b714b59ddf58e
parentb276b6198f6937700f0cfc39dfbfe7cd156747e7 (diff)
downloadgtk+-dff52f7a040c2271ed93307f32a545bd662f9dbc.tar.gz
css: Match state in siblings properly
Previously, we always returned the state flags of the original widget and did not consider the siblings' pseudoclasses. Testcase is attached.
-rw-r--r--gtk/gtkcssmatcher.c8
-rw-r--r--testsuite/reftests/Makefile.am3
-rw-r--r--testsuite/reftests/sibling-pseudoclasses.css3
-rw-r--r--testsuite/reftests/sibling-pseudoclasses.ref.ui46
-rw-r--r--testsuite/reftests/sibling-pseudoclasses.ui43
5 files changed, 102 insertions, 1 deletions
diff --git a/gtk/gtkcssmatcher.c b/gtk/gtkcssmatcher.c
index d169c274cf..b734bfa3ea 100644
--- a/gtk/gtkcssmatcher.c
+++ b/gtk/gtkcssmatcher.c
@@ -56,7 +56,13 @@ gtk_css_matcher_widget_path_get_previous (GtkCssMatcher *matcher,
static GtkStateFlags
gtk_css_matcher_widget_path_get_state (const GtkCssMatcher *matcher)
{
- return gtk_widget_path_iter_get_state (matcher->path.path, matcher->path.index);
+ const GtkWidgetPath *siblings;
+
+ siblings = gtk_widget_path_iter_get_siblings (matcher->path.path, matcher->path.index);
+ if (siblings && matcher->path.sibling_index != gtk_widget_path_iter_get_sibling_index (matcher->path.path, matcher->path.index))
+ return gtk_widget_path_iter_get_state (siblings, matcher->path.sibling_index);
+ else
+ return gtk_widget_path_iter_get_state (matcher->path.path, matcher->path.index);
}
static gboolean
diff --git a/testsuite/reftests/Makefile.am b/testsuite/reftests/Makefile.am
index 8501c34ab6..9e04237682 100644
--- a/testsuite/reftests/Makefile.am
+++ b/testsuite/reftests/Makefile.am
@@ -334,6 +334,9 @@ testdata = \
shorthand-entry-border.css \
shorthand-entry-border.ref.ui \
shorthand-entry-border.ui \
+ sibling-pseudoclasses.css \
+ sibling-pseudoclasses.ref.ui \
+ sibling-pseudoclasses.ui \
simple.ref.ui \
simple.ui \
sizegroups-basics.css \
diff --git a/testsuite/reftests/sibling-pseudoclasses.css b/testsuite/reftests/sibling-pseudoclasses.css
new file mode 100644
index 0000000000..52faf13e32
--- /dev/null
+++ b/testsuite/reftests/sibling-pseudoclasses.css
@@ -0,0 +1,3 @@
+:active + * {
+ color: tomato;
+}
diff --git a/testsuite/reftests/sibling-pseudoclasses.ref.ui b/testsuite/reftests/sibling-pseudoclasses.ref.ui
new file mode 100644
index 0000000000..ef39a84850
--- /dev/null
+++ b/testsuite/reftests/sibling-pseudoclasses.ref.ui
@@ -0,0 +1,46 @@
+<?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>
+ <child>
+ <object class="GtkBox" id="box1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkToggleButton" id="togglebutton1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="active">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">I'm tomato.</property>
+ <attributes>
+ <attribute name="foreground" value="#ffff63634747"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+</interface>
diff --git a/testsuite/reftests/sibling-pseudoclasses.ui b/testsuite/reftests/sibling-pseudoclasses.ui
new file mode 100644
index 0000000000..4c83b2425c
--- /dev/null
+++ b/testsuite/reftests/sibling-pseudoclasses.ui
@@ -0,0 +1,43 @@
+<?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>
+ <child>
+ <object class="GtkBox" id="box1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkToggleButton" id="togglebutton1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="active">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">I'm tomato.</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+</interface>