[gtk+/wip/otte/tokenizer: 46/78] cssstylesheet: Store the file we loaded from



commit b3ee2328802459cd666614f8c7cf508f25e39a33
Author: Benjamin Otte <otte redhat com>
Date:   Mon Mar 21 17:53:30 2016 +0100

    cssstylesheet: Store the file we loaded from

 gtk/gtkcssstylesheet.c        |   34 ++++++++++++++++++++++++++++++++++
 gtk/gtkcssstylesheetprivate.h |    2 ++
 2 files changed, 36 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtkcssstylesheet.c b/gtk/gtkcssstylesheet.c
index 03a027b..afb9d53 100644
--- a/gtk/gtkcssstylesheet.c
+++ b/gtk/gtkcssstylesheet.c
@@ -25,6 +25,8 @@ typedef struct _GtkCssStyleSheetPrivate GtkCssStyleSheetPrivate;
 struct _GtkCssStyleSheetPrivate {
   GtkCssRule *parent_rule;
   GtkCssRuleList *css_rules;
+
+  GFile *file;
 };
 
 G_DEFINE_TYPE_WITH_PRIVATE (GtkCssStyleSheet, gtk_css_style_sheet, G_TYPE_OBJECT)
@@ -36,6 +38,8 @@ gtk_css_style_sheet_finalize (GObject *object)
   GtkCssStyleSheetPrivate *priv = gtk_css_style_sheet_get_instance_private (style_sheet);
 
   g_object_unref (priv->css_rules);
+  if (priv->file)
+    g_object_unref (priv->file);
 
   G_OBJECT_CLASS (gtk_css_style_sheet_parent_class)->finalize (object);
 }
@@ -62,6 +66,23 @@ gtk_css_style_sheet_new (void)
   return g_object_new (GTK_TYPE_CSS_STYLE_SHEET, NULL);
 }
 
+static void
+gtk_css_style_sheet_set_file (GtkCssStyleSheet *style_sheet,
+                              GFile            *file)
+{
+  GtkCssStyleSheetPrivate *priv = gtk_css_style_sheet_get_instance_private (style_sheet);
+
+  if (priv->file == file)
+    return;
+
+  if (priv->file)
+    g_object_unref (priv->file);
+
+  priv->file = file;
+  if (file)
+    g_object_ref (file);
+}
+
 void
 gtk_css_style_sheet_parse (GtkCssStyleSheet  *style_sheet,
                            GtkCssTokenSource *source)
@@ -72,10 +93,23 @@ gtk_css_style_sheet_parse (GtkCssStyleSheet  *style_sheet,
   g_return_if_fail (source != NULL);
 
   priv = gtk_css_style_sheet_get_instance_private (style_sheet);
+  gtk_css_style_sheet_set_file (style_sheet, gtk_css_token_source_get_location (source));
 
   gtk_css_rule_list_parse (priv->css_rules, source, NULL, style_sheet);
 }
 
+GFile *
+gtk_css_style_sheet_get_file (GtkCssStyleSheet *style_sheet)
+{
+  GtkCssStyleSheetPrivate *priv;
+
+  g_return_val_if_fail (GTK_IS_CSS_STYLE_SHEET (style_sheet), NULL);
+
+  priv = gtk_css_style_sheet_get_instance_private (style_sheet);
+
+  return priv->file;
+}
+
 GtkCssStyleSheet *
 gtk_css_style_sheet_get_parent_style_sheet (GtkCssStyleSheet *style_sheet)
 {
diff --git a/gtk/gtkcssstylesheetprivate.h b/gtk/gtkcssstylesheetprivate.h
index f2d9132..6cc319f 100644
--- a/gtk/gtkcssstylesheetprivate.h
+++ b/gtk/gtkcssstylesheetprivate.h
@@ -57,6 +57,8 @@ void                   gtk_css_style_sheet_parse                        (GtkCssS
 /* StyleSheet interface */
 GtkCssStyleSheet *     gtk_css_style_sheet_get_parent_style_sheet       (GtkCssStyleSheet       
*style_sheet);
 
+GFile *                gtk_css_style_sheet_get_file                     (GtkCssStyleSheet       
*style_sheet);
+
 /* CSSStyleSheet interface */
 GtkCssRule *           gtk_css_style_sheet_get_parent_rule              (GtkCssStyleSheet       
*style_sheet);
 GtkCssRuleList *       gtk_css_style_sheet_get_css_rules                (GtkCssStyleSheet       
*style_sheet);


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