return TRUE;
}
-static GtkStateFlags
-gtk_css_matcher_widget_path_get_state (const GtkCssMatcher *matcher)
+static gboolean
+gtk_css_matcher_widget_path_has_state (const GtkCssMatcher *matcher,
+ GtkStateFlags state)
{
- const GtkWidgetPath *siblings;
+ GtkStateFlags path_state;
if (matcher->path.decl)
- return gtk_css_node_declaration_get_state (matcher->path.decl);
-
- 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);
+ path_state = gtk_css_node_declaration_get_state (matcher->path.decl);
else
- 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))
+ path_state = gtk_widget_path_iter_get_state (siblings, matcher->path.sibling_index);
+ else
+ path_state = gtk_widget_path_iter_get_state (matcher->path.path, matcher->path.index);
+ }
+
+ return (path_state & state) == state;
}
static gboolean
GTK_CSS_MATCHER_TYPE_WIDGET_PATH,
gtk_css_matcher_widget_path_get_parent,
gtk_css_matcher_widget_path_get_previous,
- gtk_css_matcher_widget_path_get_state,
+ gtk_css_matcher_widget_path_has_state,
gtk_css_matcher_widget_path_has_name,
gtk_css_matcher_widget_path_has_class,
gtk_css_matcher_widget_path_has_id,
return gtk_css_node_init_matcher (node, matcher);
}
-static GtkStateFlags
-gtk_css_matcher_node_get_state (const GtkCssMatcher *matcher)
+static gboolean
+gtk_css_matcher_node_has_state (const GtkCssMatcher *matcher,
+ GtkStateFlags state)
{
- return matcher->node.node_state;
+ return (matcher->node.node_state & state) == state;
}
static gboolean
GTK_CSS_MATCHER_TYPE_NODE,
gtk_css_matcher_node_get_parent,
gtk_css_matcher_node_get_previous,
- gtk_css_matcher_node_get_state,
+ gtk_css_matcher_node_has_state,
gtk_css_matcher_node_has_name,
gtk_css_matcher_node_has_class,
gtk_css_matcher_node_has_id,
return TRUE;
}
-static GtkStateFlags
-gtk_css_matcher_any_get_state (const GtkCssMatcher *matcher)
+static gboolean
+gtk_css_matcher_any_has_state (const GtkCssMatcher *matcher,
+ GtkStateFlags state)
{
- /* XXX: This gets tricky when we implement :not() */
-
- return GTK_STATE_FLAG_ACTIVE |
- GTK_STATE_FLAG_PRELIGHT |
- GTK_STATE_FLAG_SELECTED |
- GTK_STATE_FLAG_INSENSITIVE |
- GTK_STATE_FLAG_INCONSISTENT |
- GTK_STATE_FLAG_FOCUSED |
- GTK_STATE_FLAG_BACKDROP |
- GTK_STATE_FLAG_DIR_LTR |
- GTK_STATE_FLAG_DIR_RTL |
- GTK_STATE_FLAG_LINK |
- GTK_STATE_FLAG_VISITED |
- GTK_STATE_FLAG_CHECKED |
- GTK_STATE_FLAG_DROP_ACTIVE |
- GTK_STATE_FLAG_FOCUS_VISIBLE;
+ return TRUE;
}
static gboolean
GTK_CSS_MATCHER_TYPE_ANY,
gtk_css_matcher_any_get_parent,
gtk_css_matcher_any_get_previous,
- gtk_css_matcher_any_get_state,
+ gtk_css_matcher_any_has_state,
gtk_css_matcher_any_has_name,
gtk_css_matcher_any_has_class,
gtk_css_matcher_any_has_id,
return TRUE;
}
-static GtkStateFlags
-gtk_css_matcher_superset_get_state (const GtkCssMatcher *matcher)
+static gboolean
+gtk_css_matcher_superset_has_state (const GtkCssMatcher *matcher,
+ GtkStateFlags state)
{
- /* XXX: This gets tricky when we implement :not() */
-
- return GTK_STATE_FLAG_ACTIVE |
- GTK_STATE_FLAG_PRELIGHT |
- GTK_STATE_FLAG_SELECTED |
- GTK_STATE_FLAG_INSENSITIVE |
- GTK_STATE_FLAG_INCONSISTENT |
- GTK_STATE_FLAG_FOCUSED |
- GTK_STATE_FLAG_BACKDROP |
- GTK_STATE_FLAG_DIR_LTR |
- GTK_STATE_FLAG_DIR_RTL |
- GTK_STATE_FLAG_LINK |
- GTK_STATE_FLAG_VISITED |
- GTK_STATE_FLAG_CHECKED |
- GTK_STATE_FLAG_DROP_ACTIVE |
- GTK_STATE_FLAG_FOCUS_VISIBLE;
+ return TRUE;
}
static gboolean
GTK_CSS_MATCHER_TYPE_SUPERSET,
gtk_css_matcher_superset_get_parent,
gtk_css_matcher_superset_get_previous,
- gtk_css_matcher_superset_get_state,
+ gtk_css_matcher_superset_has_state,
gtk_css_matcher_superset_has_name,
gtk_css_matcher_superset_has_class,
gtk_css_matcher_superset_has_id,