From b4f47417b8bc7b7e97b1e60a35663d99155a92c2 Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Thu, 6 Jul 2017 23:22:39 +0200
Subject: Replaced the use of a nested function in a delayed invocation by a
 direct call.

---
 ChangeLog            |  9 +++++++++
 src/gtkext/easygtk.c | 27 +++++++++++++++++++++++++++
 src/gtkext/easygtk.h |  3 +++
 src/gui/panels/log.c | 34 ++--------------------------------
 4 files changed, 41 insertions(+), 32 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 99f4354..5389446 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+17-07-06  Cyrille Bagard <nocbos@gmail.com>
+
+	* src/gtkext/easygtk.c:
+	* src/gtkext/easygtk.h:
+	Provide a way to scroll a tree view to a given point.
+
+	* src/gui/panels/log.c:
+	Replace the use of a nested function in a delayed invocation by a direct call.
+
 17-06-02  Cyrille Bagard <nocbos@gmail.com>
 
 	* src/main.c:
diff --git a/src/gtkext/easygtk.c b/src/gtkext/easygtk.c
index b931ff0..5d54771 100644
--- a/src/gtkext/easygtk.c
+++ b/src/gtkext/easygtk.c
@@ -1282,3 +1282,30 @@ void attach_popup_menu_to_widget(GtkMenu *menu, gint *x, gint *y, gboolean *push
     *push = TRUE;
 
 }
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : treeview = représentation graphique d'une liste à traiter.   *
+*                model    = gestionnaire des données de la liste.             *
+*                iter     = point à considérer pour l'opération.              *
+*                                                                             *
+*  Description : Fait défiler une liste jusqu'à un point donné.               *
+*                                                                             *
+*  Retour      : -                                                            *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+void scroll_to_treeview_iter(GtkTreeView *treeview, GtkTreeModel *model, GtkTreeIter *iter)
+{
+    GtkTreePath *path;                      /* Chemin d'accès à la ligne   */
+
+    path = gtk_tree_model_get_path(model, iter);
+
+    gtk_tree_view_scroll_to_cell(treeview, path, NULL, FALSE, 0.0, 0.0);
+
+    gtk_tree_path_free(path);
+
+}
diff --git a/src/gtkext/easygtk.h b/src/gtkext/easygtk.h
index fb6ad5a..fee45db 100644
--- a/src/gtkext/easygtk.h
+++ b/src/gtkext/easygtk.h
@@ -130,6 +130,9 @@ gint qck_show_question(GtkWindow *, const char *, const char *);
 /* Détermine la position d'un menu associé à un composant. */
 void attach_popup_menu_to_widget(GtkMenu *, gint *, gint *, gboolean *, GtkWidget *);
 
+/* Fait défiler une liste jusqu'à un point donné. */
+void scroll_to_treeview_iter(GtkTreeView *, GtkTreeModel *, GtkTreeIter *);
+
 
 
 #endif  /* _EASYGTK_H */
diff --git a/src/gui/panels/log.c b/src/gui/panels/log.c
index 0e9df9a..2fd8f4f 100644
--- a/src/gui/panels/log.c
+++ b/src/gui/panels/log.c
@@ -34,6 +34,7 @@
 
 #include "panel-int.h"
 #include "../core/panels.h"
+#include "../../gtkext/easygtk.h"
 
 
 
@@ -57,14 +58,6 @@ typedef struct _log_data
 
 } log_data;
 
-/* Paramètres à transmettre pour un défilement */
-typedef struct _scroll_data
-{
-    GtkTreeView *treeview;                  /* Affichage de la liste       */
-    GtkTreePath *path;                      /* Chemin d'accès à cibler     */
-
-} scroll_data;
-
 
 /* Panneau d'accueil (instance) */
 struct _GLogPanel
@@ -401,8 +394,6 @@ static gboolean log_message(log_data *data)
     GtkTreeStore *store;                    /* Modèle de gestion           */
     GtkTreeIter iter;                       /* Point d'insertion           */
     GtkTreeView *treeview;                  /* Affichage de la liste       */
-    GtkTreePath *path;                      /* Chemin d'accès à la ligne   */
-    scroll_data *sdata;                     /* Paramètres de défilement    */
 
     /* Mise en place du message */
 
@@ -459,30 +450,9 @@ static gboolean log_message(log_data *data)
 
     /* Défilement pour pointer à l'affichage */
 
-    gboolean wait_for_scrolling(scroll_data *_data)
-    {
-        gtk_tree_view_scroll_to_cell(_data->treeview, _data->path, NULL, FALSE, 0.0, 0.0);
-
-        g_object_unref(G_OBJECT(_data->treeview));
-        gtk_tree_path_free(_data->path);
-
-        free(_data);
-
-        return G_SOURCE_REMOVE;
-
-    }
-
     treeview = GTK_TREE_VIEW(g_object_get_data(G_OBJECT(panel), "treeview"));
-    path = gtk_tree_model_get_path(GTK_TREE_MODEL(store), &iter);
-
-    sdata = (scroll_data *)calloc(1, sizeof(log_data));
-
-    sdata->treeview = treeview;
-    sdata->path = path;
-
-    g_object_ref(G_OBJECT(sdata->treeview));
 
-    g_idle_add((GSourceFunc)wait_for_scrolling, sdata);
+    scroll_to_treeview_iter(treeview, GTK_TREE_MODEL(store), &iter);
 
     /* Nettoyage de la mémoire */
 
-- 
cgit v0.11.2-87-g4458