[gtk+/wip/actor: 41/42] cssmatcher: Redo the fallback detection



commit 52b8590e7b61144f4290fe193cc7851adb5cc02e
Author: Benjamin Otte <otte redhat com>
Date:   Tue Dec 18 12:37:58 2012 +0100

    cssmatcher: Redo the fallback detection
    
    We need to do the fallback detection when we initialize the matcher, not
    when we first decide what matcher to create. This is necessary to be
    able to switch from actor matching to widget path matching for
    submatchers.

 gtk/actors/gtkcssactor.c |   27 ---------------------------
 gtk/gtkcssmatcher.c      |   39 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 39 insertions(+), 27 deletions(-)
---
diff --git a/gtk/actors/gtkcssactor.c b/gtk/actors/gtkcssactor.c
index 3a766b7..2f3b262 100644
--- a/gtk/actors/gtkcssactor.c
+++ b/gtk/actors/gtkcssactor.c
@@ -31,7 +31,6 @@
 #include "gtkstylecontext.h"
 #include "gtkstylecontextprivate.h"
 #include "gtktypebuiltins.h"
-#include "gtkwidgetactorprivate.h"
 #include "gtkwidgetprivate.h"
 
 struct _GtkCssActorPrivate {
@@ -233,35 +232,9 @@ _gtk_css_actor_get_style_context (GtkCssActor *actor)
 }
 
 static gboolean
-actor_needs_to_use_widget_path (GtkActor *actor)
-{
-  GtkWidget *widget, *parent;
-
-  if (!GTK_IS_WIDGET_ACTOR (actor))
-    return FALSE;
-
-  widget = _gtk_actor_get_widget (actor);
-  if (widget == NULL)
-    return FALSE;
-
-  parent = gtk_widget_get_parent (widget);
-  if (parent == NULL)
-    return FALSE;
-
-  if (GTK_CONTAINER_GET_CLASS (parent)->get_path_for_child == 
-      GTK_CONTAINER_CLASS(g_type_class_peek (GTK_TYPE_CONTAINER))->get_path_for_child)
-    return FALSE;
-
-  return TRUE;
-}
-
-static gboolean
 gtk_css_actor_source_init_css_matcher (GtkCssMatcher *matcher,
                                        gpointer       actor)
 {
-  if (actor_needs_to_use_widget_path (actor))
-    return FALSE;
-
   _gtk_css_matcher_actor_init (matcher, actor);
 
   return TRUE;
diff --git a/gtk/gtkcssmatcher.c b/gtk/gtkcssmatcher.c
index 536e511..065b899 100644
--- a/gtk/gtkcssmatcher.c
+++ b/gtk/gtkcssmatcher.c
@@ -19,7 +19,10 @@
 
 #include "gtkcssmatcherprivate.h"
 
+#include "gtkcontainer.h"
+#include "gtkwidget.h"
 #include "gtkwidgetpath.h"
+#include "actors/gtkwidgetactorprivate.h"
 
 /* GTK_CSS_MATCHER_WIDGET_PATH */
 
@@ -573,6 +576,31 @@ static const GtkCssMatcherClass GTK_CSS_MATCHER_ACTOR = {
   FALSE
 };
 
+static gboolean
+actor_needs_to_use_widget_path (GtkActor *actor)
+{
+  GtkWidget *widget, *parent;
+
+  return TRUE;
+
+  if (!GTK_IS_WIDGET_ACTOR (actor))
+    return FALSE;
+
+  widget = _gtk_actor_get_widget (actor);
+  if (widget == NULL)
+    return FALSE;
+
+  parent = gtk_widget_get_parent (widget);
+  if (parent == NULL)
+    return FALSE;
+
+  if (GTK_CONTAINER_GET_CLASS (parent)->get_path_for_child == 
+      GTK_CONTAINER_CLASS(g_type_class_peek (GTK_TYPE_CONTAINER))->get_path_for_child)
+    return FALSE;
+
+  return TRUE;
+}
+
 void
 _gtk_css_matcher_actor_init (GtkCssMatcher *matcher,
                              GtkCssBox     *box)
@@ -580,6 +608,17 @@ _gtk_css_matcher_actor_init (GtkCssMatcher *matcher,
   g_return_if_fail (matcher != NULL);
   g_return_if_fail (GTK_IS_CSS_BOX (box));
 
+  if (actor_needs_to_use_widget_path (GTK_ACTOR (box)))
+    {
+      if (!_gtk_css_matcher_init (matcher,
+                                  gtk_widget_get_path (_gtk_actor_get_widget (GTK_ACTOR (box))),
+                                  _gtk_css_box_get_effective_state (box)))
+        {
+          g_assert_not_reached ();
+        }
+      return;
+    }
+
   matcher->actor.klass = &GTK_CSS_MATCHER_ACTOR;
   matcher->actor.actor = GTK_ACTOR (box);
 }



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