summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2021-09-11 06:06:02 +0200
committerBenjamin Otte <otte@redhat.com>2021-09-11 22:28:40 +0200
commit9f2b847835b1cf6f14239b71f17a51368a809907 (patch)
tree6820714b403aa9aa497c1a0b08e2f19ef41a5ed4
parentdb3858a204a0dec5113830f5a39da05cfdbe7a1a (diff)
downloadgtk+-9f2b847835b1cf6f14239b71f17a51368a809907.tar.gz
rendernode: Write the whole node
It turns out g_output_stream_write_bytes() does not write the bytes. It should be renamed to g_output_stream_write_some_of_the_bytes() maybe.
-rw-r--r--gsk/gskrendernodeimpl.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/gsk/gskrendernodeimpl.c b/gsk/gskrendernodeimpl.c
index 4b85fa60c1..fd2a9e5d44 100644
--- a/gsk/gskrendernodeimpl.c
+++ b/gsk/gskrendernodeimpl.c
@@ -5674,7 +5674,7 @@ gsk_render_node_content_serializer_finish (GObject *source,
GOutputStream *stream = G_OUTPUT_STREAM (source);
GError *error = NULL;
- if (!g_output_stream_write_bytes_finish (stream, result, &error))
+ if (g_output_stream_splice_finish (stream, result, &error) < 0)
gdk_content_serializer_return_error (serializer, error);
else
gdk_content_serializer_return_success (serializer);
@@ -5683,6 +5683,7 @@ gsk_render_node_content_serializer_finish (GObject *source,
static void
gsk_render_node_content_serializer (GdkContentSerializer *serializer)
{
+ GInputStream *input;
const GValue *value;
GskRenderNode *node;
GBytes *bytes;
@@ -5690,13 +5691,16 @@ gsk_render_node_content_serializer (GdkContentSerializer *serializer)
value = gdk_content_serializer_get_value (serializer);
node = gsk_value_get_render_node (value);
bytes = gsk_render_node_serialize (node);
-
- g_output_stream_write_bytes_async (gdk_content_serializer_get_output_stream (serializer),
- bytes,
- gdk_content_serializer_get_priority (serializer),
- gdk_content_serializer_get_cancellable (serializer),
- gsk_render_node_content_serializer_finish,
- serializer);
+ input = g_memory_input_stream_new_from_bytes (bytes);
+
+ g_output_stream_splice_async (gdk_content_serializer_get_output_stream (serializer),
+ input,
+ G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE,
+ gdk_content_serializer_get_priority (serializer),
+ gdk_content_serializer_get_cancellable (serializer),
+ gsk_render_node_content_serializer_finish,
+ serializer);
+ g_object_unref (input);
g_bytes_unref (bytes);
}