diff --git a/gsk/ngl/gsknglcommandqueue.c b/gsk/ngl/gsknglcommandqueue.c index d955f49bc3..aff201cb4a 100644 --- a/gsk/ngl/gsknglcommandqueue.c +++ b/gsk/ngl/gsknglcommandqueue.c @@ -143,7 +143,7 @@ G_GNUC_UNUSED static inline void gsk_ngl_command_queue_print_batch (GskNglCommandQueue *self, const GskNglCommandBatch *batch) { - static const char *command_kinds[] = { "Clear", NULL, NULL, "Draw", }; + static const char *command_kinds[] = { "Clear", "Draw", }; guint framebuffer_id; g_assert (GSK_IS_NGL_COMMAND_QUEUE (self)); diff --git a/gtk/gtktextlayout.c b/gtk/gtktextlayout.c index 027ae9ca74..b90e6d12f1 100644 --- a/gtk/gtktextlayout.c +++ b/gtk/gtktextlayout.c @@ -4142,6 +4142,8 @@ gtk_text_layout_snapshot (GtkTextLayout *layout, GSList *line_list; GSList *tmp_list; GdkRGBA color; + GtkSnapshot *cursor_snapshot; + GskRenderNode *cursors; g_return_if_fail (GTK_IS_TEXT_LAYOUT (layout)); g_return_if_fail (layout->default_style != NULL); @@ -4158,6 +4160,8 @@ gtk_text_layout_snapshot (GtkTextLayout *layout, if (line_list == NULL) return; /* nothing on the screen */ + cursor_snapshot = gtk_snapshot_new (); + crenderer = gsk_pango_renderer_acquire (); gsk_pango_renderer_set_shape_handler (crenderer, snapshot_shape); @@ -4274,14 +4278,14 @@ gtk_text_layout_snapshot (GtkTextLayout *layout, dir = (line_display->direction == GTK_TEXT_DIR_RTL) ? PANGO_DIRECTION_RTL : PANGO_DIRECTION_LTR; if (cursor.is_insert || cursor.is_selection_bound) - gtk_snapshot_push_opacity (crenderer->snapshot, cursor_alpha); + gtk_snapshot_push_opacity (cursor_snapshot, cursor_alpha); - gtk_snapshot_render_insertion_cursor (crenderer->snapshot, context, + gtk_snapshot_render_insertion_cursor (cursor_snapshot, context, line_display->x_offset, offset_y + line_display->top_margin, line_display->layout, cursor.pos, dir); if (cursor.is_insert || cursor.is_selection_bound) - gtk_snapshot_pop (crenderer->snapshot); + gtk_snapshot_pop (cursor_snapshot); } } } /* line_display->height > 0 */ @@ -4295,6 +4299,13 @@ gtk_text_layout_snapshot (GtkTextLayout *layout, gtk_text_layout_wrap_loop_end (layout); + cursors = gtk_snapshot_free_to_node (cursor_snapshot); + if (cursors) + { + gtk_snapshot_append_node (crenderer->snapshot, cursors); + gsk_render_node_unref (cursors); + } + /* Only update eviction source once per snapshot */ gtk_text_line_display_cache_delay_eviction (priv->cache);