From 8f1d6f2e36c57e74d0b0a32bb217da9b44918834 Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
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