gsk: Avoid using gtk css types in public 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
This commit is contained in:
Matthias Clasen 2020-11-16 22:21:27 -05:00
parent 2c9bf55eea
commit 121e61cf01
7 changed files with 93 additions and 44 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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 *

View File

@ -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_free (section_str);
g_warning ("Error at %s: %s", string->str, error->message);
g_string_free (string, TRUE);
}

View File

@ -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_free (section_str);
g_warning ("Error at %s: %s", string->str, error->message);
g_string_free (string, TRUE);
}
static void

View File

@ -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);
}
free (section_str);
g_warning ("Error at %s: %s", string->str, error->message);
g_string_free (string, TRUE);
}
static const GOptionEntry options[] = {

View File

@ -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);