summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2020-11-16 22:21:27 -0500
committerMatthias Clasen <mclasen@redhat.com>2020-11-16 23:27:44 -0500
commit121e61cf01e70d0791e3b661dca57de19ed94ef9 (patch)
tree5f3644b7beff891cc1346fac4756e952b6f7a0b4
parent2c9bf55eea71f1de0ee9dc93f030a4fd78200cc8 (diff)
downloadgtk+-gsk-binding-api.tar.gz
gsk: Avoid using gtk css types in public apigsk-binding-api
Using GtkCssSection in public headers here may be ok from the C perspective, since it all ends up in the same library anyway. But it causes circular dependency problems for our gir files that are still split by namespace. To avoid this problem, copy the GtkCssLocation struct struct as GskParseLocation, and pass take two of them instead of a GtkCssSection in the error callback. Update all users. Fixes: #2454
-rw-r--r--demos/node-editor/node-editor-window.c9
-rw-r--r--gsk/gskrendernode.h23
-rw-r--r--gsk/gskrendernodeparser.c10
-rw-r--r--tests/rendernode.c23
-rw-r--r--tests/showrendernode.c23
-rw-r--r--testsuite/gsk/compare-render.c24
-rw-r--r--testsuite/gsk/node-parser.c25
7 files changed, 93 insertions, 44 deletions
diff --git a/demos/node-editor/node-editor-window.c b/demos/node-editor/node-editor-window.c
index 73cf2b06ec..ff536d60ca 100644
--- a/demos/node-editor/node-editor-window.c
+++ b/demos/node-editor/node-editor-window.c
@@ -102,12 +102,11 @@ text_buffer_remove_all_tags (GtkTextBuffer *buffer)
}
static void
-deserialize_error_func (const GtkCssSection *section,
- const GError *error,
- gpointer user_data)
+deserialize_error_func (const GskParseLocation *start_location,
+ const GskParseLocation *end_location,
+ const GError *error,
+ gpointer user_data)
{
- const GtkCssLocation *start_location = gtk_css_section_get_start_location (section);
- const GtkCssLocation *end_location = gtk_css_section_get_end_location (section);
NodeEditorWindow *self = user_data;
GtkTextIter start_iter, end_iter;
TextViewError text_view_error;
diff --git a/gsk/gskrendernode.h b/gsk/gskrendernode.h
index dd655d3b35..683bf5d9ff 100644
--- a/gsk/gskrendernode.h
+++ b/gsk/gskrendernode.h
@@ -54,18 +54,31 @@ struct _GskShadow
float radius;
};
+typedef struct _GskParseLocation GskParseLocation;
+
+struct _GskParseLocation
+{
+ gsize bytes;
+ gsize chars;
+ gsize lines;
+ gsize line_bytes;
+ gsize line_chars;
+};
+
/**
* GskParseErrorFunc:
- * @section: the #GtkCssSection where the error occurred
- * @error: the error
+ * @start: start of the error location
+ * @end: end of the error location
+ * @error: the error
* @user_data: user data
*
* The type of callback that is called when a parse error occurs
* during deserialization of node data.
*/
-typedef void (* GskParseErrorFunc) (const GtkCssSection *section,
- const GError *error,
- gpointer user_data);
+typedef void (* GskParseErrorFunc) (const GskParseLocation *start,
+ const GskParseLocation *end,
+ const GError *error,
+ gpointer user_data);
GDK_AVAILABLE_IN_ALL
GType gsk_render_node_get_type (void) G_GNUC_CONST;
diff --git a/gsk/gskrendernodeparser.c b/gsk/gskrendernodeparser.c
index 320f74a13c..2be0a55393 100644
--- a/gsk/gskrendernodeparser.c
+++ b/gsk/gskrendernodeparser.c
@@ -1859,12 +1859,10 @@ gsk_render_node_parser_error (GtkCssParser *parser,
} *error_func_pair = user_data;
if (error_func_pair->error_func)
- {
- GtkCssSection *section = gtk_css_section_new (gtk_css_parser_get_file (parser), start, end);
-
- error_func_pair->error_func (section, error, error_func_pair->user_data);
- gtk_css_section_unref (section);
- }
+ error_func_pair->error_func ((const GskParseLocation *)start,
+ (const GskParseLocation *)end,
+ error,
+ error_func_pair->user_data);
}
GskRenderNode *
diff --git a/tests/rendernode.c b/tests/rendernode.c
index 786cc6d050..d0e3230663 100644
--- a/tests/rendernode.c
+++ b/tests/rendernode.c
@@ -14,15 +14,26 @@ static GOptionEntry options[] = {
};
static void
-deserialize_error_func (const GtkCssSection *section,
- const GError *error,
- gpointer user_data)
+deserialize_error_func (const GskParseLocation *start,
+ const GskParseLocation *end,
+ const GError *error,
+ gpointer user_data)
{
- char *section_str = gtk_css_section_to_string (section);
+ GString *string = g_string_new ("<data>");
- g_warning ("Error at %s: %s", section_str, error->message);
+ g_string_append_printf (string, ":%zu:%zu",
+ start->lines + 1, start->line_chars + 1);
+ if (start->lines != end->lines || start->line_chars != end->line_chars)
+ {
+ g_string_append (string, "-");
+ if (start->lines != end->lines)
+ g_string_append_printf (string, "%zu:", end->lines + 1);
+ g_string_append_printf (string, "%zu", end->line_chars + 1);
+ }
+
+ g_warning ("Error at %s: %s", string->str, error->message);
- g_free (section_str);
+ g_string_free (string, TRUE);
}
diff --git a/tests/showrendernode.c b/tests/showrendernode.c
index 92bc6d40eb..5fafd3c00e 100644
--- a/tests/showrendernode.c
+++ b/tests/showrendernode.c
@@ -102,15 +102,26 @@ gtk_node_view_class_init (GtkNodeViewClass *klass)
}
static void
-deserialize_error_func (const GtkCssSection *section,
- const GError *error,
- gpointer user_data)
+deserialize_error_func (const GskParseLocation *start,
+ const GskParseLocation *end,
+ const GError *error,
+ gpointer user_data)
{
- char *section_str = gtk_css_section_to_string (section);
+ GString *string = g_string_new ("<data>");
- g_warning ("Error at %s: %s", section_str, error->message);
+ g_string_append_printf (string, ":%zu:%zu",
+ start->lines + 1, start->line_chars + 1);
+ if (start->lines != end->lines || start->line_chars != end->line_chars)
+ {
+ g_string_append (string, "-");
+ if (start->lines != end->lines)
+ g_string_append_printf (string, "%zu:", end->lines + 1);
+ g_string_append_printf (string, "%zu", end->line_chars + 1);
+ }
+
+ g_warning ("Error at %s: %s", string->str, error->message);
- g_free (section_str);
+ g_string_free (string, TRUE);
}
static void
diff --git a/testsuite/gsk/compare-render.c b/testsuite/gsk/compare-render.c
index c71ee55b7c..562a82e5d7 100644
--- a/testsuite/gsk/compare-render.c
+++ b/testsuite/gsk/compare-render.c
@@ -111,16 +111,26 @@ save_image (cairo_surface_t *surface,
}
static void
-deserialize_error_func (const GtkCssSection *section,
- const GError *error,
- gpointer user_data)
+deserialize_error_func (const GskParseLocation *start,
+ const GskParseLocation *end,
+ const GError *error,
+ gpointer user_data)
{
- char *section_str = gtk_css_section_to_string (section);
+ GString *string = g_string_new ("<data>");
- g_print ("Error at %s: %s", section_str, error->message);
- *((gboolean *) user_data) = FALSE;
+ g_string_append_printf (string, ":%zu:%zu",
+ start->lines + 1, start->line_chars + 1);
+ if (start->lines != end->lines || start->line_chars != end->line_chars)
+ {
+ g_string_append (string, "-");
+ if (start->lines != end->lines)
+ g_string_append_printf (string, "%zu:", end->lines + 1);
+ g_string_append_printf (string, "%zu", end->line_chars + 1);
+ }
+
+ g_warning ("Error at %s: %s", string->str, error->message);
- free (section_str);
+ g_string_free (string, TRUE);
}
static const GOptionEntry options[] = {
diff --git a/testsuite/gsk/node-parser.c b/testsuite/gsk/node-parser.c
index cd3c930461..e7cf97887e 100644
--- a/testsuite/gsk/node-parser.c
+++ b/testsuite/gsk/node-parser.c
@@ -122,19 +122,26 @@ append_error_value (GString *string,
}
static void
-deserialize_error_func (const GtkCssSection *section,
- const GError *error,
- gpointer user_data)
+deserialize_error_func (const GskParseLocation *start,
+ const GskParseLocation *end,
+ const GError *error,
+ gpointer user_data)
{
GString *errors = user_data;
- char *section_string;
+ GString *string = g_string_new ("<data>");
- section_string = gtk_css_section_to_string (section);
+ g_string_append_printf (string, ":%zu:%zu",
+ start->lines + 1, start->line_chars + 1);
+ if (start->lines != end->lines || start->line_chars != end->line_chars)
+ {
+ g_string_append (string, "-");
+ if (start->lines != end->lines)
+ g_string_append_printf (string, "%zu:", end->lines + 1);
+ g_string_append_printf (string, "%zu", end->line_chars + 1);
+ }
- g_string_append_printf (errors,
- "%s: error: ",
- section_string);
- g_free (section_string);
+ g_string_append_printf (errors, "%s: error: ", string->str);
+ g_string_free (string, TRUE);
if (error->domain == GTK_CSS_PARSER_ERROR)
append_error_value (errors, GTK_TYPE_CSS_PARSER_ERROR, error->code);