From b4f47417b8bc7b7e97b1e60a35663d99155a92c2 Mon Sep 17 00:00:00 2001 From: Cyrille Bagard 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 + + * 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 * 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