[gtk+] selector: Introduce gtk_css_selector_previous()



commit ae1cd1b354cfbcf578dff3b6bf7a1a707d2557c1
Author: Benjamin Otte <otte redhat com>
Date:   Thu Mar 1 17:40:19 2012 +0100

    selector: Introduce gtk_css_selector_previous()

 gtk/gtkcssselector.c        |   61 ++++++++++++++++++++++++++-----------------
 gtk/gtkcssselectorprivate.h |    2 +-
 2 files changed, 38 insertions(+), 25 deletions(-)
---
diff --git a/gtk/gtkcssselector.c b/gtk/gtkcssselector.c
index 20aec45..8a52b60 100644
--- a/gtk/gtkcssselector.c
+++ b/gtk/gtkcssselector.c
@@ -60,6 +60,12 @@ gtk_css_selector_match (const GtkCssSelector *selector,
   return selector->class->match (selector, state, path, id);
 }
 
+static const GtkCssSelector *
+gtk_css_selector_previous (const GtkCssSelector *selector)
+{
+  return selector->previous;
+}
+
 /* ANY */
 
 static void
@@ -75,7 +81,7 @@ gtk_css_selector_any_match (const GtkCssSelector *selector,
                             const GtkWidgetPath  *path,
                             guint                 id)
 {
-  return gtk_css_selector_match (selector->previous, state, path, id);
+  return gtk_css_selector_match (gtk_css_selector_previous (selector), state, path, id);
 }
 
 static const GtkCssSelectorClass GTK_CSS_SELECTOR_ANY = {
@@ -102,7 +108,7 @@ gtk_css_selector_descendant_match (const GtkCssSelector *selector,
 {
   while (id-- > 0)
     {
-      if (gtk_css_selector_match (selector->previous, 0, path, id))
+      if (gtk_css_selector_match (gtk_css_selector_previous (selector), 0, path, id))
         return TRUE;
     }
 
@@ -134,7 +140,7 @@ gtk_css_selector_child_match (const GtkCssSelector *selector,
   if (id == 0)
     return FALSE;
 
-  return gtk_css_selector_match (selector->previous, 0, path, id - 1);
+  return gtk_css_selector_match (gtk_css_selector_previous (selector), 0, path, id - 1);
 }
 
 static const GtkCssSelectorClass GTK_CSS_SELECTOR_CHILD = {
@@ -164,7 +170,7 @@ gtk_css_selector_name_match (const GtkCssSelector *selector,
   if (!g_type_is_a (gtk_widget_path_iter_get_object_type (path, id), type))
     return FALSE;
 
-  return gtk_css_selector_match (selector->previous, state, path, id);
+  return gtk_css_selector_match (gtk_css_selector_previous (selector), state, path, id);
 }
 
 static const GtkCssSelectorClass GTK_CSS_SELECTOR_NAME = {
@@ -189,15 +195,17 @@ gtk_css_selector_region_match (const GtkCssSelector *selector,
                                const GtkWidgetPath  *path,
                                guint                 id)
 {
+  const GtkCssSelector *previous;
+
   if (!gtk_widget_path_iter_has_region (path, id, selector->data, NULL))
     return FALSE;
 
-  if (selector->previous &&
-      selector->previous->class == &GTK_CSS_SELECTOR_DESCENDANT &&
-      gtk_css_selector_match (selector->previous->previous, state, path, id))
+  previous = gtk_css_selector_previous (selector);
+  if (previous && previous->class == &GTK_CSS_SELECTOR_DESCENDANT &&
+      gtk_css_selector_match (gtk_css_selector_previous (previous), state, path, id))
     return TRUE;
 
-  return gtk_css_selector_match (selector->previous, state, path, id);
+  return gtk_css_selector_match (previous, state, path, id);
 }
 
 static const GtkCssSelectorClass GTK_CSS_SELECTOR_REGION = {
@@ -226,7 +234,7 @@ gtk_css_selector_class_match (const GtkCssSelector *selector,
   if (!gtk_widget_path_iter_has_class (path, id, selector->data))
     return FALSE;
 
-  return gtk_css_selector_match (selector->previous, state, path, id);
+  return gtk_css_selector_match (gtk_css_selector_previous (selector), state, path, id);
 }
 
 static const GtkCssSelectorClass GTK_CSS_SELECTOR_CLASS = {
@@ -255,7 +263,7 @@ gtk_css_selector_id_match (const GtkCssSelector *selector,
   if (!gtk_widget_path_iter_has_name (path, id, selector->data))
     return FALSE;
 
-  return gtk_css_selector_match (selector->previous, state, path, id);
+  return gtk_css_selector_match (gtk_css_selector_previous (selector), state, path, id);
 }
 
 static const GtkCssSelectorClass GTK_CSS_SELECTOR_ID = {
@@ -306,7 +314,7 @@ gtk_css_selector_pseudoclass_state_match (const GtkCssSelector *selector,
   if (!(GPOINTER_TO_UINT (selector->data) & state))
     return FALSE;
 
-  return gtk_css_selector_match (selector->previous, state, path, id);
+  return gtk_css_selector_match (gtk_css_selector_previous (selector), state, path, id);
 }
 
 static const GtkCssSelectorClass GTK_CSS_SELECTOR_PSEUDOCLASS_STATE = {
@@ -354,9 +362,10 @@ gtk_css_selector_pseudoclass_region_match_for_region (const GtkCssSelector *sele
                                                       guint                 id)
 {
   GtkRegionFlags selector_flags, path_flags;
+  const GtkCssSelector *previous;
   
   selector_flags = GPOINTER_TO_UINT (selector->data);
-  selector = selector->previous;
+  selector = gtk_css_selector_previous (selector);
 
   if (!gtk_widget_path_iter_has_region (path, id, selector->data, &path_flags))
     return FALSE;
@@ -364,12 +373,12 @@ gtk_css_selector_pseudoclass_region_match_for_region (const GtkCssSelector *sele
   if ((selector_flags & path_flags) != selector_flags)
     return FALSE;
 
-  if (selector->previous &&
-      selector->previous->class == &GTK_CSS_SELECTOR_DESCENDANT &&
-      gtk_css_selector_match (selector->previous->previous, state, path, id))
+  previous = gtk_css_selector_previous (selector);
+  if (previous && previous->class == &GTK_CSS_SELECTOR_DESCENDANT &&
+      gtk_css_selector_match (gtk_css_selector_previous (previous), state, path, id))
     return TRUE;
 
-  return gtk_css_selector_match (selector->previous, state, path, id);
+  return gtk_css_selector_match (previous, state, path, id);
 }
 
 static gboolean
@@ -381,9 +390,10 @@ gtk_css_selector_pseudoclass_region_match (const GtkCssSelector *selector,
   GtkRegionFlags region;
   const GtkWidgetPath *siblings;
   guint sibling_id, n_siblings;
+  const GtkCssSelector *previous;
 
-  if (selector->previous &&
-      selector->previous->class == &GTK_CSS_SELECTOR_REGION)
+  previous = gtk_css_selector_previous (selector);
+  if (previous && previous->class == &GTK_CSS_SELECTOR_REGION)
     return gtk_css_selector_pseudoclass_region_match_for_region (selector, state, path, id);
 
   siblings = gtk_widget_path_iter_get_siblings (path, id);
@@ -423,7 +433,7 @@ gtk_css_selector_pseudoclass_region_match (const GtkCssSelector *selector,
       return FALSE;
     }
 
-  return gtk_css_selector_match (selector->previous, state, path, id);
+  return gtk_css_selector_match (previous, state, path, id);
 }
 
 static const GtkCssSelectorClass GTK_CSS_SELECTOR_PSEUDOCLASS_REGION = {
@@ -709,10 +719,13 @@ void
 _gtk_css_selector_print (const GtkCssSelector *selector,
                          GString *             str)
 {
+  const GtkCssSelector *previous;
+
   g_return_if_fail (selector != NULL);
 
-  if (selector->previous)
-    _gtk_css_selector_print (selector->previous, str);
+  previous = gtk_css_selector_previous (selector);
+  if (previous)
+    _gtk_css_selector_print (previous, str);
 
   selector->class->print (selector, str);
 }
@@ -773,7 +786,7 @@ _gtk_css_selector_get_specificity (const GtkCssSelector *selector,
                                    guint                *classes,
                                    guint                *elements)
 {
-  for (; selector; selector = selector->previous)
+  for (; selector; selector = gtk_css_selector_previous (selector))
     {
       const GtkCssSelectorClass *klass = selector->class;
 
@@ -809,13 +822,13 @@ _gtk_css_selector_compare (const GtkCssSelector *a,
 }
 
 GtkStateFlags
-_gtk_css_selector_get_state_flags (GtkCssSelector *selector)
+_gtk_css_selector_get_state_flags (const GtkCssSelector *selector)
 {
   GtkStateFlags state = 0;
 
   g_return_val_if_fail (selector != NULL, 0);
 
-  for (; selector && selector->class == &GTK_CSS_SELECTOR_NAME; selector = selector->previous)
+  for (; selector && selector->class == &GTK_CSS_SELECTOR_NAME; selector = gtk_css_selector_previous (selector))
     state |= GPOINTER_TO_UINT (selector->data);
 
   return state;
diff --git a/gtk/gtkcssselectorprivate.h b/gtk/gtkcssselectorprivate.h
index b74dfc5..149a90c 100644
--- a/gtk/gtkcssselectorprivate.h
+++ b/gtk/gtkcssselectorprivate.h
@@ -33,7 +33,7 @@ char *            _gtk_css_selector_to_string       (const GtkCssSelector   *sel
 void              _gtk_css_selector_print           (const GtkCssSelector   *selector,
                                                      GString                *str);
 
-GtkStateFlags     _gtk_css_selector_get_state_flags (GtkCssSelector         *selector);
+GtkStateFlags     _gtk_css_selector_get_state_flags (const GtkCssSelector   *selector);
 
 gboolean          _gtk_css_selector_matches         (const GtkCssSelector   *selector,
                                                      const GtkWidgetPath    *path,



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