summaryrefslogtreecommitdiff
path: root/src/project.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2015-02-25 21:57:42 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2015-02-25 21:57:42 (GMT)
commit4724b73c5161140222cab3c61bb5b3d0c8dde360 (patch)
treed341f43bacdad465ddae8c8b6c076a573c53e43d /src/project.c
parent9ff8702e5c51c7916e239caee13b974dccff6413 (diff)
Provided tweaks about positions when looking for address coordinates.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@480 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/project.c')
-rw-r--r--src/project.c30
1 files changed, 21 insertions, 9 deletions
diff --git a/src/project.c b/src/project.c
index f3a2702..c8d23f7 100644
--- a/src/project.c
+++ b/src/project.c
@@ -324,24 +324,36 @@ const char *g_study_project_get_filename(const GStudyProject *project)
void g_study_project_add_loaded_binary(GLoadedBinary *binary, GStudyProject *project)
{
size_t index; /* Indice du nouveau binaire */
- GBinFormat *format; /* Format associé au binaire */
- GBinSymbol *symbol; /* Point d'entrée trouvé */
- const mrange_t *range; /* Emplacement de ce point */
index = g_study_project_attach_binary(project, binary);
- g_panel_item_dock(G_PANEL_ITEM(project->binaries[index]->item));
+ gboolean scroll_for_the_first_time(GtkWidget *widget, GdkEvent *event, GLoadedBinary *binary)
+ {
+ GBinFormat *format; /* Format associé au binaire */
+ GBinSymbol *symbol; /* Point d'entrée trouvé */
+ const mrange_t *range; /* Emplacement de ce point */
- format = G_BIN_FORMAT(g_loaded_binary_get_format(binary));
+ g_signal_handlers_disconnect_by_func(widget, G_CALLBACK(scroll_for_the_first_time), binary);
- if (g_binary_format_find_symbol_by_label(format, "entry_point", &symbol))
- {
- range = g_binary_symbol_get_range(symbol);
+ format = G_BIN_FORMAT(g_loaded_binary_get_format(binary));
- gtk_view_panel_scroll_to_address(project->binaries[index]->views[BVW_BLOCK], get_mrange_addr(range));
+ if (g_binary_format_find_symbol_by_label(format, "entry_point", &symbol))
+ {
+ range = g_binary_symbol_get_range(symbol);
+
+ gtk_view_panel_scroll_to_address(GTK_VIEW_PANEL(widget), get_mrange_addr(range), SPT_CENTER);
+
+ }
+
+ return FALSE;
}
+ g_signal_connect(project->binaries[index]->views[BVW_BLOCK], "size-allocate",
+ G_CALLBACK(scroll_for_the_first_time), binary);
+
+ g_panel_item_dock(G_PANEL_ITEM(project->binaries[index]->item));
+
}