summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2020-08-22 18:06:12 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2020-08-22 18:06:12 (GMT)
commit8f1d6f2e36c57e74d0b0a32bb217da9b44918834 (patch)
tree30ffc03aae6d3240d614d6bcb214070bead42fb7
parent9dca3fdb21e3086363038926d4f49e1300b4130d (diff)
Refreshed the display faster.
-rw-r--r--src/glibext/buffercache.c32
-rw-r--r--src/glibext/buffercache.h3
-rw-r--r--src/gtkext/gtkblockdisplay.c12
3 files changed, 46 insertions, 1 deletions
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;
}