diff options
Diffstat (limited to 'src/gui')
| -rw-r--r-- | src/gui/dialogs/goto.c | 42 | ||||
| -rw-r--r-- | src/gui/menus/edition.c | 6 | 
2 files changed, 42 insertions, 6 deletions
| diff --git a/src/gui/dialogs/goto.c b/src/gui/dialogs/goto.c index 1fe2bbd..1cb365f 100644 --- a/src/gui/dialogs/goto.c +++ b/src/gui/dialogs/goto.c @@ -30,6 +30,8 @@  #include <i18n.h> +#include "../core/global.h" +#include "../../analysis/binary.h"  #include "../../gtkext/easygtk.h" @@ -150,6 +152,12 @@ GtkWidget *create_goto_dialog(GtkWindow *parent)      GtkWidget *entry;                       /* Zone de saisie principale   */      GtkWidget *hbox;                        /* Support à construire #2     */      GtkWidget *radio;                       /* Définition de localisation  */ +    GLoadedBinary *binary;                  /* Binaire en cours d'édition  */ +    vmpa2t *old_gotos;                      /* Liste de destinations       */ +    size_t count;                           /* Taille de cette liste       */ +    size_t i;                               /* Boucle de parcours          */ +    bool is_virt;                           /* Détermination de l'utile    */ +    VMPA_BUFFER(loc);                       /* Version humaintement lisible*/      result = gtk_dialog_new();      gtk_window_set_title(GTK_WINDOW(result), _("Go to address")); @@ -181,11 +189,6 @@ GtkWidget *create_goto_dialog(GtkWindow *parent)      g_signal_connect(G_OBJECT(entry), "activate",                       G_CALLBACK(validate_addresses), GTK_DIALOG(result)); - -    /* TODO */ -    //gtk_combo_box_append_text(combobox, "test"); - -      /* Propriétés de la localisation */      hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 8); @@ -207,9 +210,36 @@ GtkWidget *create_goto_dialog(GtkWindow *parent)      gtk_dialog_add_button(GTK_DIALOG(result), _("_Ok"), GTK_RESPONSE_OK);      gtk_entry_set_text(GTK_ENTRY(entry), "0x"); -    gtk_widget_grab_focus (entry); +    gtk_widget_grab_focus(entry);      gtk_editable_set_position(GTK_EDITABLE(entry), -1); +    /* Restaurationd d'anciennes destinations */ + +    binary = G_LOADED_BINARY(get_current_content()); +    old_gotos = g_loaded_binary_get_old_gotos(binary, &count); +    g_object_unref(G_OBJECT(binary)); + +    if (old_gotos != NULL) +    { +        for (i = 0; i < count; i++) +        { +            is_virt = has_virt_addr(&old_gotos[i]); + +            if (is_virt) +                vmpa2_virt_to_string(&old_gotos[i], MDS_UNDEFINED, loc, NULL); +            else +                vmpa2_phys_to_string(&old_gotos[i], MDS_UNDEFINED, loc, NULL); + +            gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combobox), loc); + +        } + +        free(old_gotos); + +        gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), 0); + +    } +      return result;  } diff --git a/src/gui/menus/edition.c b/src/gui/menus/edition.c index b1ac0ad..be045b5 100644 --- a/src/gui/menus/edition.c +++ b/src/gui/menus/edition.c @@ -36,6 +36,7 @@  #include "../dialogs/bookmark.h"  #include "../dialogs/goto.h"  #include "../dialogs/gotox.h" +#include "../../analysis/binary.h"  #include "../../analysis/db/items/switcher.h"  #include "../../arch/targetableop.h"  #include "../../glibext/gbinarycursor.h" @@ -422,6 +423,7 @@ static void mcb_edition_goto(GtkMenuItem *menuitem, GMenuBar *bar)      GtkWidget *dialog;                      /* Boîte de dialogue à montrer */      vmpa2t *addr;                           /* Adresse de destination      */      GLoadedPanel *panel;                    /* Afficheur effectif de code  */ +    GLoadedBinary *binary;                  /* Binaire en cours d'édition  */      ref = g_editor_item_get_global_ref(G_EDITOR_ITEM(bar));      dialog = create_goto_dialog(GTK_WINDOW(ref)); @@ -433,6 +435,10 @@ static void mcb_edition_goto(GtkMenuItem *menuitem, GMenuBar *bar)          panel = get_current_view();          assert(GTK_IS_BLOCK_DISPLAY(panel) || GTK_IS_GRAPH_DISPLAY(panel)); +        binary = G_LOADED_BINARY(g_loaded_panel_get_content(panel)); +        g_loaded_binary_remember_new_goto(binary, addr); +        g_object_unref(G_OBJECT(binary)); +          gtk_display_panel_request_move(GTK_DISPLAY_PANEL(panel), addr);          g_object_unref(G_OBJECT(panel)); | 
