diff options
Diffstat (limited to 'src/gtkext/gtkbufferview.c')
-rw-r--r-- | src/gtkext/gtkbufferview.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/gtkext/gtkbufferview.c b/src/gtkext/gtkbufferview.c index 1b57341..7f62963 100644 --- a/src/gtkext/gtkbufferview.c +++ b/src/gtkext/gtkbufferview.c @@ -525,6 +525,7 @@ static gboolean gtk_buffer_view_query_tooltip(GtkWidget *widget, gint x, gint y, GBinFormat *format; /* Format du fichier binaire */ GBinSymbol *target_sym; /* Symbole présent à l'adresse */ GBinSymbol *next_sym; /* Symbole suivant l'adresse */ + GCodeBuffer *buffer; /* Tampon où lire les lignes */ const vmpa2t *stop_addr; /* Adresse associée, pour fin */ const mrange_t *lrange; /* Couverture d'une ligne */ size_t count; /* Nbre de lignes max à traiter*/ @@ -543,7 +544,6 @@ static gboolean gtk_buffer_view_query_tooltip(GtkWidget *widget, gint x, gint y, real_y = y; gtk_view_panel_compute_real_coord(GTK_VIEW_PANEL(view), &real_x, &real_y); - line = g_buffer_view_find_line_and_segment_at(view->buffer_view, &real_x, real_y, NULL, GTK_VIEW_PANEL(view)->display, &segment); @@ -584,6 +584,14 @@ static gboolean gtk_buffer_view_query_tooltip(GtkWidget *widget, gint x, gint y, /* Construction du contenu textuel */ + /** + * Dans le cas des vues de blocs basiques, il est impératif + * de chercher les lignes dans le tampon global, et non uniquement dans + * celui propre au bloc basique courant. + */ + + buffer = g_loaded_binary_get_disassembled_buffer(GTK_VIEW_PANEL(view)->binary); + if (g_binary_format_find_next_symbol_at(format, &addr, &next_sym)) stop_addr = get_mrange_addr(g_binary_symbol_get_range(next_sym)); @@ -591,11 +599,10 @@ static gboolean gtk_buffer_view_query_tooltip(GtkWidget *widget, gint x, gint y, markup = NULL; - for (i = 0, line = g_buffer_view_find_line_by_addr(view->buffer_view, &addr, BLF_NONE, &index); + for (i = 0, line = g_code_buffer_find_line_by_addr(buffer, &addr, BLF_NONE, &index); i < count && line != NULL; - i++, line = g_buffer_view_find_line_by_index(view->buffer_view, index + i)) + i++, line = g_code_buffer_find_line_by_index(buffer, index + i)) { - /* Si on commence à marcher sur les plates-bandes du symbole suivant... */ if (next_sym != NULL) { |