 19eb1614de
			
		
	
	19eb1614de
	
	
	
		
			
			Don't take a state when constructing the CSS matcher. Instead, rely on the newly introduced state in the widget path. This way, the state can be queried not only on the first element, but on all elements of the widget path.
		
			
				
	
	
		
			158 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			158 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* GTK - The GIMP Toolkit
 | |
|  * Copyright (C) 2012 Benjamin Otte <otte@gnome.org>
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser General Public
 | |
|  * License as published by the Free Software Foundation; either
 | |
|  * version 2 of the License, or (at your option) any later version.
 | |
|  *
 | |
|  * This library is distributed in the hope that it will be useful,
 | |
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| #ifndef __GTK_CSS_MATCHER_PRIVATE_H__
 | |
| #define __GTK_CSS_MATCHER_PRIVATE_H__
 | |
| 
 | |
| #include <gtk/gtkenums.h>
 | |
| #include <gtk/gtktypes.h>
 | |
| #include "gtk/gtkcsstypesprivate.h"
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef union _GtkCssMatcher GtkCssMatcher;
 | |
| typedef struct _GtkCssMatcherSuperset GtkCssMatcherSuperset;
 | |
| typedef struct _GtkCssMatcherWidgetPath GtkCssMatcherWidgetPath;
 | |
| typedef struct _GtkCssMatcherClass GtkCssMatcherClass;
 | |
| 
 | |
| struct _GtkCssMatcherClass {
 | |
|   gboolean        (* get_parent)                  (GtkCssMatcher          *matcher,
 | |
|                                                    const GtkCssMatcher    *child);
 | |
|   gboolean        (* get_previous)                (GtkCssMatcher          *matcher,
 | |
|                                                    const GtkCssMatcher    *next);
 | |
| 
 | |
|   GtkStateFlags   (* get_state)                   (const GtkCssMatcher   *matcher);
 | |
|   gboolean        (* has_type)                    (const GtkCssMatcher   *matcher,
 | |
|                                                    GType                  type);
 | |
|   gboolean        (* has_class)                   (const GtkCssMatcher   *matcher,
 | |
|                                                    GQuark                 class_name);
 | |
|   gboolean        (* has_id)                      (const GtkCssMatcher   *matcher,
 | |
|                                                    const char            *id);
 | |
|   gboolean        (* has_regions)                 (const GtkCssMatcher   *matcher);
 | |
|   gboolean        (* has_region)                  (const GtkCssMatcher   *matcher,
 | |
|                                                    const char            *region,
 | |
|                                                    GtkRegionFlags         flags);
 | |
|   gboolean        (* has_position)                (const GtkCssMatcher   *matcher,
 | |
|                                                    gboolean               forward,
 | |
|                                                    int                    a,
 | |
|                                                    int                    b);
 | |
|   gboolean is_any;
 | |
| };
 | |
| 
 | |
| struct _GtkCssMatcherWidgetPath {
 | |
|   const GtkCssMatcherClass *klass;
 | |
|   const GtkWidgetPath      *path;
 | |
|   guint                     index;
 | |
|   guint                     sibling_index;
 | |
| };
 | |
| 
 | |
| struct _GtkCssMatcherSuperset {
 | |
|   const GtkCssMatcherClass *klass;
 | |
|   const GtkCssMatcher      *subset;
 | |
|   GtkCssChange              relevant;
 | |
| };
 | |
| 
 | |
| union _GtkCssMatcher {
 | |
|   const GtkCssMatcherClass *klass;
 | |
|   GtkCssMatcherWidgetPath   path;
 | |
|   GtkCssMatcherSuperset     superset;
 | |
| };
 | |
| 
 | |
| gboolean          _gtk_css_matcher_init           (GtkCssMatcher          *matcher,
 | |
|                                                    const GtkWidgetPath    *path) G_GNUC_WARN_UNUSED_RESULT;
 | |
| void              _gtk_css_matcher_any_init       (GtkCssMatcher          *matcher);
 | |
| void              _gtk_css_matcher_superset_init  (GtkCssMatcher          *matcher,
 | |
|                                                    const GtkCssMatcher    *subset,
 | |
|                                                    GtkCssChange            relevant);
 | |
| 
 | |
| 
 | |
| static inline gboolean
 | |
| _gtk_css_matcher_get_parent (GtkCssMatcher       *matcher,
 | |
|                              const GtkCssMatcher *child)
 | |
| {
 | |
|   return child->klass->get_parent (matcher, child);
 | |
| }
 | |
| 
 | |
| static inline gboolean
 | |
| _gtk_css_matcher_get_previous (GtkCssMatcher       *matcher,
 | |
|                                const GtkCssMatcher *next)
 | |
| {
 | |
|   return next->klass->get_previous (matcher, next);
 | |
| }
 | |
| 
 | |
| static inline GtkStateFlags
 | |
| _gtk_css_matcher_get_state (const GtkCssMatcher *matcher)
 | |
| {
 | |
|   return matcher->klass->get_state (matcher);
 | |
| }
 | |
| 
 | |
| static inline gboolean
 | |
| _gtk_css_matcher_has_type (const GtkCssMatcher *matcher,
 | |
|                            GType type)
 | |
| {
 | |
|   return matcher->klass->has_type (matcher, type);
 | |
| }
 | |
| 
 | |
| static inline gboolean
 | |
| _gtk_css_matcher_has_class (const GtkCssMatcher *matcher,
 | |
|                             GQuark               class_name)
 | |
| {
 | |
|   return matcher->klass->has_class (matcher, class_name);
 | |
| }
 | |
| 
 | |
| static inline gboolean
 | |
| _gtk_css_matcher_has_id (const GtkCssMatcher *matcher,
 | |
|                          const char          *id)
 | |
| {
 | |
|   return matcher->klass->has_id (matcher, id);
 | |
| }
 | |
| 
 | |
| 
 | |
| static inline gboolean
 | |
| _gtk_css_matcher_has_regions (const GtkCssMatcher *matcher)
 | |
| {
 | |
|   return matcher->klass->has_regions (matcher);
 | |
| }
 | |
| 
 | |
| static inline gboolean
 | |
| _gtk_css_matcher_has_region (const GtkCssMatcher *matcher,
 | |
|                              const char          *region,
 | |
|                              GtkRegionFlags       flags)
 | |
| {
 | |
|   return matcher->klass->has_region (matcher, region, flags);
 | |
| }
 | |
| 
 | |
| static inline guint
 | |
| _gtk_css_matcher_has_position (const GtkCssMatcher *matcher,
 | |
|                                gboolean             forward,
 | |
|                                int                  a,
 | |
|                                int                  b)
 | |
| {
 | |
|   return matcher->klass->has_position (matcher, forward, a, b);
 | |
| }
 | |
| 
 | |
| static inline gboolean
 | |
| _gtk_css_matcher_matches_any (const GtkCssMatcher *matcher)
 | |
| {
 | |
|   return matcher->klass->is_any;
 | |
| }
 | |
| 
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __GTK_CSS_MATCHER_PRIVATE_H__ */
 |