summaryrefslogtreecommitdiff
path: root/src/gui/panels/errors.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2018-06-01 21:33:51 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2018-06-01 21:33:51 (GMT)
commitf0fa987133468d7d3cae7894d813b852782bf895 (patch)
tree51b78b6f2751c8aa0c82cf6265e0f6a87eadfae5 /src/gui/panels/errors.c
parente060d9a9f29c0d7708e7002c2e1fc4962020ba94 (diff)
Setup more control when updating panels.
Diffstat (limited to 'src/gui/panels/errors.c')
-rw-r--r--src/gui/panels/errors.c27
1 files changed, 20 insertions, 7 deletions
diff --git a/src/gui/panels/errors.c b/src/gui/panels/errors.c
index b4be9ad..87c0a02 100644
--- a/src/gui/panels/errors.c
+++ b/src/gui/panels/errors.c
@@ -37,6 +37,7 @@
#include "updating-int.h"
#include "../core/global.h"
#include "../../core/global.h"
+#include "../../core/queue.h"
#include "../../format/format.h"
#include "../../glibext/signal.h"
#include "../../gtkext/support.h"
@@ -161,8 +162,6 @@ static void on_error_selection_changed(GtkTreeSelection *, gpointer);
/* Données utiles à la mise à jour */
struct _error_update_data
{
- GtkTreeModel *model; /* Source de données associée */
-
size_t count; /* Nombre de soucis présents */
size_t kept; /* Nombre d'éléments affichés */
@@ -242,6 +241,8 @@ static void g_error_panel_class_init(GErrorPanelClass *klass)
panel->unique = true;
+ panel->gid = setup_tiny_global_work_group(1);
+
}
@@ -356,6 +357,7 @@ static void g_error_panel_init(GErrorPanel *panel)
static void g_error_panel_interface_init(GUpdatablePanelInterface *iface)
{
iface->setup = (setup_updatable_cb)g_error_panel_setup;
+ iface->get_group = (get_updatable_group_cb)g_panel_item_get_group;
iface->introduce = (introduce_updatable_cb)g_error_panel_introduce;
iface->process = (process_updatable_cb)g_error_panel_process;
iface->conclude = (conclude_updatable_cb)g_error_panel_conclude;
@@ -1067,6 +1069,7 @@ static void g_error_panel_introduce(const GErrorPanel *panel, unsigned int uid,
{
GtkBuilder *builder; /* Constructeur utilisé */
GtkTreeView *treeview; /* Arborescence graphique */
+ GtkTreeModel *model; /* Source de données associée */
/* Basculement de l'affichage hors ligne */
@@ -1076,10 +1079,13 @@ static void g_error_panel_introduce(const GErrorPanel *panel, unsigned int uid,
treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, "treeview"));
- data->model = gtk_tree_view_get_model(treeview);
- g_object_ref(G_OBJECT(data->model));
+ model = gtk_tree_view_get_model(treeview);
- gtk_tree_view_set_model(treeview, NULL);
+ if (model != NULL)
+ {
+ g_object_ref(G_OBJECT(model));
+ gtk_tree_view_set_model(treeview, NULL);
+ }
}
@@ -1135,6 +1141,10 @@ static void g_error_panel_conclude(GErrorPanel *panel, unsigned int uid, error_u
{
GtkBuilder *builder; /* Constructeur utilisé */
GtkTreeView *treeview; /* Arborescence graphique */
+ GtkTreeModel *model; /* Source de données associée */
+
+ if (g_atomic_int_get(&G_PANEL_ITEM(panel)->switched) > 1)
+ goto skip_this_step;
/* Mise à jour des statistiques */
@@ -1149,9 +1159,12 @@ static void g_error_panel_conclude(GErrorPanel *panel, unsigned int uid, error_u
treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, "treeview"));
- gtk_tree_view_set_model(treeview, data->model);
+ model = GTK_TREE_MODEL(gtk_builder_get_object(builder, "filter"));
+
+ g_object_ref(G_OBJECT(model));
+ gtk_tree_view_set_model(treeview, model);
- g_object_unref(G_OBJECT(data->model));
+ skip_this_step:
g_panel_item_switch_to_updated_content(G_PANEL_ITEM(panel));