From 9b915ec951f8f6350d3933886e1abeafe27d9802 Mon Sep 17 00:00:00 2001 From: Cyrille Bagard Date: Wed, 27 Apr 2016 08:45:53 +0200 Subject: Avoided freezes by refreshing the GUI in the main loop only. --- ChangeLog | 5 +++++ src/analysis/db/items/move.c | 46 +++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 3719707..c16b9a6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +16-04-27 Cyrille Bagard + + * src/analysis/db/items/move.c: + Avoid freezes by refreshing the GUI in the main loop only. + 16-04-25 Cyrille Bagard * src/analysis/db/keymgn.c: diff --git a/src/analysis/db/items/move.c b/src/analysis/db/items/move.c index 20b9609..6cf1592 100644 --- a/src/analysis/db/items/move.c +++ b/src/analysis/db/items/move.c @@ -25,6 +25,7 @@ #include +#include #include #include @@ -422,10 +423,53 @@ static bool g_db_move_run(const GDbMove *move, const vmpa2t *addr) { GtkViewPanel *vpanel; /* Afficheur effectif de code */ + typedef struct _move_params + { + GtkViewPanel *vpanel; /* Afficheur effectif de code */ + vmpa2t addr; /* Adresse de déplacement */ + + } move_params; + + move_params *params; /* Paramètres à transmettre */ + + /* Procédure de nettoyage */ + + void delete_move_params(move_params *p) + { + g_object_unref(G_OBJECT(p->vpanel)); + + free(p); + + } + + /* Procédure d'application différée */ + + gboolean do_move_in_main_loop(move_params *p) + { + gtk_view_panel_scroll_to_address(p->vpanel, &p->addr, SPT_CENTER); + + return G_SOURCE_REMOVE; + + } + + /* Lancement de l'opération */ + vpanel = g_editor_item_get_current_view(NULL); if (vpanel != NULL) - gtk_view_panel_scroll_to_address(vpanel, addr, SPT_CENTER); + { + params = (move_params *)calloc(1, sizeof(move_params)); + + params->vpanel = vpanel; + g_object_ref(G_OBJECT(vpanel)); + + copy_vmpa(¶ms->addr, addr); + + g_idle_add_full(G_PRIORITY_DEFAULT_IDLE, + (GSourceFunc)do_move_in_main_loop, + params, (GDestroyNotify)delete_move_params); + + } return true; -- cgit v0.11.2-87-g4458