From 8f1d6f2e36c57e74d0b0a32bb217da9b44918834 Mon Sep 17 00:00:00 2001 From: Cyrille Bagard Date: Sat, 22 Aug 2020 20:06:12 +0200 Subject: Refreshed the display faster. --- src/glibext/buffercache.c | 32 +++++++++++++++++++++++++++++++- src/glibext/buffercache.h | 3 +++ src/gtkext/gtkblockdisplay.c | 12 ++++++++++++ 3 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/glibext/buffercache.c b/src/glibext/buffercache.c index 169c75e..2913409 100644 --- a/src/glibext/buffercache.c +++ b/src/glibext/buffercache.c @@ -1433,7 +1433,7 @@ BufferLineFlags g_buffer_cache_get_line_flags(const GBufferCache *cache, size_t * * * Paramètres : cache = tampon de lignes à venir consulter. * * index = indice de la ligne visée par la consultation. * -* flag = propriété à supprimer. * +* flag = propriété à supprimer. * * * * Description : Retire une propriété particulière attachée à une ligne. * * * @@ -1469,6 +1469,36 @@ void g_buffer_cache_remove_line_flag(GBufferCache *cache, size_t index, BufferLi /****************************************************************************** * * +* Paramètres : cache = tampon de lignes à venir consulter. * +* index = indice de la ligne visée par l'opération. * +* * +* Description : Force la mise à jour du contenu d'une ligne donnée. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void g_buffer_cache_refresh_line(GBufferCache *cache, size_t index) +{ + cache_info *info; /* Accès direct à une ligne */ + + // TODO : check lock + + assert(index < cache->used); + + info = &cache->lines[index]; + + reset_cache_info_line(info); + + g_signal_emit_by_name(cache, "line-updated", index); + +} + + +/****************************************************************************** +* * * Paramètres : cache = tampon de lignes à consulter. * * index = indice de la ligne recherchée. * * * diff --git a/src/glibext/buffercache.h b/src/glibext/buffercache.h index 7422c76..f0f54b0 100644 --- a/src/glibext/buffercache.h +++ b/src/glibext/buffercache.h @@ -108,6 +108,9 @@ BufferLineFlags g_buffer_cache_get_line_flags(const GBufferCache *, size_t); /* Retire une propriété particulière attachée à une ligne. */ void g_buffer_cache_remove_line_flag(GBufferCache *, size_t, BufferLineFlags); +/* Force la mise à jour du contenu d'une ligne donnée. */ +void g_buffer_cache_refresh_line(GBufferCache *, size_t); + #define g_buffer_cache_lock(c) #define g_buffer_cache_unlock(c) diff --git a/src/gtkext/gtkblockdisplay.c b/src/gtkext/gtkblockdisplay.c index 69a7325..1810fc9 100644 --- a/src/gtkext/gtkblockdisplay.c +++ b/src/gtkext/gtkblockdisplay.c @@ -361,8 +361,20 @@ static gboolean gtk_block_display_query_tooltip(GtkWidget *widget, gint x, gint static gboolean gtk_block_display_need_redraw(GtkBlockDisplay *display, GBufferView *view) { + GtkWidget *widget; /* Autre version du composant */ + gtk_widget_queue_draw(GTK_WIDGET(display)); + /** + * Pour une raison non comprise, le redessin n'est pris en compte que + * si le parent est concerné également... + */ + + widget = gtk_widget_get_parent(GTK_WIDGET(display)); + + if (GTK_IS_SCROLLED_WINDOW(widget)) + gtk_widget_queue_draw(widget); + return FALSE; } -- cgit v0.11.2-87-g4458