From 1f2cfb5619f0d7b1838e54c58738bae766d74c0b Mon Sep 17 00:00:00 2001 From: Cosimo Cecchi Date: Mon, 3 Oct 2011 17:09:09 -0400 Subject: [PATCH] all: add an 'only-child' pseudo-class selector Add an :only-child pseudo-class selector, which selects single children of a parent container. https://bugzilla.gnome.org/show_bug.cgi?id=660833 --- gtk/gtkcssprovider.c | 1 + gtk/gtkcssselector.c | 3 +++ gtk/gtkenums.h | 2 ++ gtk/gtkwidgetpath.c | 1 + 4 files changed, 7 insertions(+) diff --git a/gtk/gtkcssprovider.c b/gtk/gtkcssprovider.c index a905f1a8b1..bd019157ab 100644 --- a/gtk/gtkcssprovider.c +++ b/gtk/gtkcssprovider.c @@ -1987,6 +1987,7 @@ parse_selector_pseudo_class (GtkCssScanner *scanner, } pseudo_classes[] = { { "first-child", GTK_REGION_FIRST, 0 }, { "last-child", GTK_REGION_LAST, 0 }, + { "only-child", GTK_REGION_ONLY, 0 }, { "sorted", GTK_REGION_SORTED, 0 }, { "active", 0, GTK_STATE_FLAG_ACTIVE }, { "prelight", 0, GTK_STATE_FLAG_PRELIGHT }, diff --git a/gtk/gtkcssselector.c b/gtk/gtkcssselector.c index d300d41baa..2abe0923a7 100644 --- a/gtk/gtkcssselector.c +++ b/gtk/gtkcssselector.c @@ -130,6 +130,7 @@ _gtk_css_selector_print (const GtkCssSelector *selector, "nth-child(odd)", "first-child", "last-child", + "only-child", "sorted" }; guint i; @@ -201,6 +202,8 @@ compute_region_flags_for_index (const GtkWidgetPath *path, flags |= GTK_REGION_FIRST; if (sibling_id + 1 == n_siblings) flags |= GTK_REGION_LAST; + if (n_siblings == 1) + flags |= GTK_REGION_ONLY; return flags; } diff --git a/gtk/gtkenums.h b/gtk/gtkenums.h index a2428ab509..dbc0e90ea0 100644 --- a/gtk/gtkenums.h +++ b/gtk/gtkenums.h @@ -862,6 +862,7 @@ typedef enum * @GTK_REGION_ODD: Region has an odd number within a set. * @GTK_REGION_FIRST: Region is the first one within a set. * @GTK_REGION_LAST: Region is the last one within a set. + * @GTK_REGION_ONLY: Region is the only one within a set. * @GTK_REGION_SORTED: Region is part of a sorted area. * * Describes a region within a widget. @@ -871,6 +872,7 @@ typedef enum { GTK_REGION_ODD = 1 << 1, GTK_REGION_FIRST = 1 << 2, GTK_REGION_LAST = 1 << 3, + GTK_REGION_ONLY = 1 << 4, GTK_REGION_SORTED = 1 << 5 } GtkRegionFlags; diff --git a/gtk/gtkwidgetpath.c b/gtk/gtkwidgetpath.c index d0be6de63e..a694f7b07d 100644 --- a/gtk/gtkwidgetpath.c +++ b/gtk/gtkwidgetpath.c @@ -357,6 +357,7 @@ gtk_widget_path_to_string (const GtkWidgetPath *path) "odd", "first", "last", + "only", "sorted" };