]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkcssprovider.c
cssprovider: Remove unused members from scanner
[~andy/gtk] / gtk / gtkcssprovider.c
index 0136414518c91b99599f7aff8b7a746f4ee43269..2569bd9309a377a3e7ed085f153f170a679ccecb 100644 (file)
@@ -999,8 +999,6 @@ struct _GtkCssScanner
   GtkCssParser *parser;
   GtkCssSection *section;
   GtkCssScanner *parent;
-  GFile *file;
-  GFile *base;
   GSList *state;
 };
 
@@ -1311,9 +1309,6 @@ gtk_css_scanner_destroy (GtkCssScanner *scanner)
   if (scanner->section)
     gtk_css_section_unref (scanner->section);
   g_object_unref (scanner->provider);
-  if (scanner->file)
-    g_object_unref (scanner->file);
-  g_object_unref (scanner->base);
   _gtk_css_parser_free (scanner->parser);
 
   g_slice_free (GtkCssScanner, scanner);
@@ -1357,18 +1352,6 @@ gtk_css_scanner_new (GtkCssProvider *provider,
   if (section)
     scanner->section = gtk_css_section_ref (section);
 
-  if (file)
-    {
-      scanner->file = g_object_ref (file);
-      scanner->base = g_file_get_parent (file);
-    }
-  else
-    {
-      char *dir = g_get_current_dir ();
-      scanner->base = g_file_new_for_path (dir);
-      g_free (dir);
-    }
-
   scanner->parser = _gtk_css_parser_new (text,
                                          gtk_css_scanner_parser_error,
                                          scanner);
@@ -1376,19 +1359,14 @@ gtk_css_scanner_new (GtkCssProvider *provider,
   return scanner;
 }
 
-static GFile *
-gtk_css_scanner_get_base_url (GtkCssScanner *scanner)
-{
-  return scanner->base;
-}
-
 static gboolean
 gtk_css_scanner_would_recurse (GtkCssScanner *scanner,
                                GFile         *file)
 {
   while (scanner)
     {
-      if (scanner->file && g_file_equal (scanner->file, file))
+      GFile *parser_file = _gtk_css_parser_get_file (scanner->parser);
+      if (parser_file && g_file_equal (parser_file, file))
         return TRUE;
 
       scanner = scanner->parent;
@@ -1485,25 +1463,26 @@ gtk_css_provider_get_style (GtkStyleProvider *provider,
   props = gtk_style_properties_new ();
 
   css_provider_dump_symbolic_colors (css_provider, props);
-  _gtk_css_matcher_init (&matcher, path, 0);
-
-  for (i = 0; i < priv->rulesets->len; i++)
+  if (_gtk_css_matcher_init (&matcher, path, 0))
     {
-      GtkCssRuleset *ruleset;
+      for (i = 0; i < priv->rulesets->len; i++)
+        {
+          GtkCssRuleset *ruleset;
 
-      ruleset = &g_array_index (priv->rulesets, GtkCssRuleset, i);
+          ruleset = &g_array_index (priv->rulesets, GtkCssRuleset, i);
 
-      if (ruleset->styles == NULL)
-        continue;
+          if (ruleset->styles == NULL)
+            continue;
 
-      if (!gtk_css_ruleset_matches (ruleset, &matcher))
-        continue;
+          if (!gtk_css_ruleset_matches (ruleset, &matcher))
+            continue;
 
-      for (j = 0; j < ruleset->n_styles; j++)
-       _gtk_style_properties_set_property_by_property (props,
-                                                       GTK_CSS_STYLE_PROPERTY (ruleset->styles[i].property),
-                                                       _gtk_css_selector_get_state_flags (ruleset->selector),
-                                                       ruleset->styles[i].value);
+          for (j = 0; j < ruleset->n_styles; j++)
+            _gtk_style_properties_set_property_by_property (props,
+                                                            GTK_CSS_STYLE_PROPERTY (ruleset->styles[i].property),
+                                                            _gtk_css_selector_get_state_flags (ruleset->selector),
+                                                            ruleset->styles[i].value);
+        }
     }
 
   return props;
@@ -1524,10 +1503,12 @@ gtk_css_provider_get_style_property (GtkStyleProvider *provider,
   gchar *prop_name;
   gint i;
 
+  if (!_gtk_css_matcher_init (&matcher, path, state))
+    return FALSE;
+
   prop_name = g_strdup_printf ("-%s-%s",
                                g_type_name (pspec->owner_type),
                                pspec->name);
-  _gtk_css_matcher_init (&matcher, path, 0);
 
   for (i = priv->rulesets->len - 1; i >= 0; i--)
     {
@@ -1890,7 +1871,7 @@ parse_import (GtkCssScanner *scanner)
       char *uri;
 
       uri = _gtk_css_parser_read_string (scanner->parser);
-      file = g_file_resolve_relative_path (gtk_css_scanner_get_base_url (scanner), uri);
+      file = _gtk_css_parser_get_file_for_path (scanner->parser, uri);
       g_free (uri);
     }
   else
@@ -1942,7 +1923,7 @@ parse_import (GtkCssScanner *scanner)
 static gboolean
 parse_color_definition (GtkCssScanner *scanner)
 {
-  GtkSymbolicColor *symbolic;
+  GtkCssValue *symbolic;
   char *name;
 
   gtk_css_scanner_push_section (scanner, GTK_CSS_SECTION_COLOR_DEFINITION);
@@ -1966,7 +1947,7 @@ parse_color_definition (GtkCssScanner *scanner)
       return TRUE;
     }
 
-  symbolic = _gtk_css_parser_read_symbolic_color (scanner->parser);
+  symbolic = _gtk_css_symbolic_value_new (scanner->parser);
   if (symbolic == NULL)
     {
       g_free (name);
@@ -1978,7 +1959,7 @@ parse_color_definition (GtkCssScanner *scanner)
   if (!_gtk_css_parser_try (scanner->parser, ";", TRUE))
     {
       g_free (name);
-      gtk_symbolic_color_unref (symbolic);
+      _gtk_css_value_unref (symbolic);
       gtk_css_provider_error_literal (scanner->provider,
                                       scanner,
                                       GTK_CSS_PROVIDER_ERROR,
@@ -2537,6 +2518,8 @@ gtk_css_provider_load_from_data (GtkCssProvider  *css_provider,
 
   g_free (free_data);
 
+  _gtk_style_provider_private_changed (GTK_STYLE_PROVIDER_PRIVATE (css_provider));
+
   return ret;
 }
 
@@ -2556,12 +2539,18 @@ gtk_css_provider_load_from_file (GtkCssProvider  *css_provider,
                                  GFile           *file,
                                  GError         **error)
 {
+  gboolean success;
+
   g_return_val_if_fail (GTK_IS_CSS_PROVIDER (css_provider), FALSE);
   g_return_val_if_fail (G_IS_FILE (file), FALSE);
 
   gtk_css_provider_reset (css_provider);
 
-  return gtk_css_provider_load_internal (css_provider, NULL, file, NULL, error);
+  success = gtk_css_provider_load_internal (css_provider, NULL, file, NULL, error);
+
+  _gtk_style_provider_private_changed (GTK_STYLE_PROVIDER_PRIVATE (css_provider));
+
+  return success;
 }
 
 /**
@@ -2711,7 +2700,6 @@ gtk_css_provider_get_named (const gchar *name,
 
   if (!provider)
     {
-      const gchar *home_dir;
       gchar *subpath, *path = NULL;
 
       if (variant)
@@ -2719,17 +2707,31 @@ gtk_css_provider_get_named (const gchar *name,
       else
         subpath = g_strdup ("gtk-3.0" G_DIR_SEPARATOR_S "gtk.css");
 
-      /* First look in the users home directory
+      /* First look in the user's config directory
        */
-      home_dir = g_get_home_dir ();
-      if (home_dir)
+      path = g_build_filename (g_get_user_data_dir (), "themes", name, subpath, NULL);
+      if (!g_file_test (path, G_FILE_TEST_EXISTS))
         {
-          path = g_build_filename (home_dir, ".themes", name, subpath, NULL);
+          g_free (path);
+          path = NULL;
+        }
 
-          if (!g_file_test (path, G_FILE_TEST_EXISTS))
+      /* Next look in the user's home directory
+       */
+      if (!path)
+        {
+          const gchar *home_dir;
+
+          home_dir = g_get_home_dir ();
+          if (home_dir)
             {
-              g_free (path);
-              path = NULL;
+              path = g_build_filename (home_dir, ".themes", name, subpath, NULL);
+
+              if (!g_file_test (path, G_FILE_TEST_EXISTS))
+                {
+                  g_free (path);
+                  path = NULL;
+                }
             }
         }