GLADE_CB void on_go_to_address4_activate (GtkMenuItem *menuitem, gpointer user_data) { if(value == -1) return; dbgmem_add_tab(value); value = -1; }
static void goto_romcall(const char *str) { gchar *ptr; uint32_t addr; int id; ptr = strchr(str, '['); if(ptr != NULL) { int ret = sscanf(ptr, "[$%x] - #%03x ", &addr, &id); if(ret == 2) { if(addr < 0x200000) dbgmem_add_tab(addr & 0xffffff); else dbgcode_disasm_at(addr & 0xffffff); } } }
GLADE_CB gboolean on_heap_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data) { GtkWidget *list = GTK_WIDGET(widget); GtkTreeView *view = GTK_TREE_VIEW(list); GtkTreeSelection *selection; GtkTreeModel *model; GList *l; // is double click ? if(event->type != GDK_2BUTTON_PRESS) return FALSE; // get selection selection = gtk_tree_view_get_selection(view); l = gtk_tree_selection_get_selected_rows(selection, &model); if(l != NULL) { GtkTreeIter iter; GtkTreePath *path = l->data; gchar** row_text = g_malloc0((CLIST_NVCOLS + 1) * sizeof(gchar *)); uint32_t addr; // get address gtk_tree_model_get_iter(model, &iter, path); gtk_tree_model_get(model, &iter, COL_ADDR, &row_text[COL_ADDR], -1); // show tab sscanf(row_text[COL_ADDR], "$%x", &addr); dbgmem_add_tab(addr); g_strfreev(row_text); } // free selection g_list_foreach (l, (GFunc)gtk_tree_path_free, NULL); g_list_free (l); return FALSE; }
GLADE_CB void on_dbgheap_view_memory1_activate (GtkMenuItem *menuitem, gpointer user_data) { dbgmem_add_tab(value); }
GLADE_CB gboolean on_heap_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data) { GtkWidget *list = GTK_WIDGET(widget); GtkTreeView *view = GTK_TREE_VIEW(list); GtkTreeSelection *selection; GtkTreeModel *model; GList *l; // get selection selection = gtk_tree_view_get_selection(view); l = gtk_tree_selection_get_selected_rows(selection, &model); if(l != NULL) { GtkTreeIter iter; GtkTreePath *path = l->data; gchar** row_text = g_malloc0((CLIST_NVCOLS + 1) * sizeof(gchar *)); // get address gtk_tree_model_get_iter(model, &iter, path); gtk_tree_model_get(model, &iter, COL_ADDR, &row_text[COL_ADDR], -1); // show tab sscanf(row_text[COL_ADDR], "%x", &value); g_strfreev(row_text); } if (l && event->type == GDK_2BUTTON_PRESS) { dbgmem_add_tab(value); g_list_foreach (l, (GFunc)gtk_tree_path_free, NULL); g_list_free (l); return TRUE; } else if(l && event->button == 3) { GdkEventButton *bevent; GtkWidget *menu; // popup menu bevent = (GdkEventButton *) (event); menu = display_dbgheap_popup_menu(); gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, bevent->button, bevent->time); gtk_widget_show(menu); g_list_foreach (l, (GFunc)gtk_tree_path_free, NULL); g_list_free (l); return TRUE; } return FALSE; }