diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/analysis/project.c | 16 | ||||
-rw-r--r-- | src/analysis/project.h | 4 | ||||
-rw-r--r-- | src/gui/core/core.c | 6 | ||||
-rw-r--r-- | src/gui/core/core.h | 2 | ||||
-rw-r--r-- | src/gui/core/global.c | 41 | ||||
-rw-r--r-- | src/gui/core/global.h | 6 | ||||
-rw-r--r-- | src/gui/core/panels.c | 30 | ||||
-rw-r--r-- | src/gui/core/panels.h | 4 | ||||
-rw-r--r-- | src/gui/editor.c | 7 | ||||
-rw-r--r-- | src/gui/menus/file.c | 39 | ||||
-rw-r--r-- | src/gui/panels/strings.c | 2 | ||||
-rw-r--r-- | src/gui/panels/welcome.c | 8 | ||||
-rw-r--r-- | src/main.c | 13 |
13 files changed, 105 insertions, 73 deletions
diff --git a/src/analysis/project.c b/src/analysis/project.c index 9377247..9a10985 100644 --- a/src/analysis/project.c +++ b/src/analysis/project.c @@ -76,8 +76,6 @@ struct _GStudyProject { GObject parent; /* A laisser en premier */ - GObject *ref; /* Espace de référencement */ - char *filename; /* Lieu d'enregistrement */ loaded_content *contents; /* Contenus binaires chargés */ @@ -181,15 +179,12 @@ static void g_study_project_init(GStudyProject *project) * * ******************************************************************************/ -GStudyProject *g_study_project_new(GObject *ref) +GStudyProject *g_study_project_new(void) { GStudyProject *result; /* Composant à retourner */ result = g_object_new(G_TYPE_STUDY_PROJECT, NULL); - g_object_ref(ref); - result->ref = ref; - return result; } @@ -197,8 +192,7 @@ GStudyProject *g_study_project_new(GObject *ref) /****************************************************************************** * * -* Paramètres : ref = espace de référencements global. * -* filename = chemin d'accès au fichier à charger. * +* Paramètres : filename = chemin d'accès au fichier à charger. * * * * Description : Crée un projet à partir du contenu XML d'un fichier. * * * @@ -208,7 +202,7 @@ GStudyProject *g_study_project_new(GObject *ref) * * ******************************************************************************/ -GStudyProject *g_study_project_open(GObject *ref, const char *filename) +GStudyProject *g_study_project_open(const char *filename) { GStudyProject *result; /* Adresse à retourner */ xmlDocPtr xdoc; /* Structure XML chargée */ @@ -228,7 +222,7 @@ GStudyProject *g_study_project_open(GObject *ref, const char *filename) if (!open_xml_file(filename, &xdoc, &context)) return NULL; - result = g_study_project_new(ref); + result = g_study_project_new(); result->filename = strdup(filename); @@ -866,7 +860,7 @@ GPanelItem *_setup_new_panel_item_for_binary(GStudyProject *project, GLoadedBina lname = g_loaded_binary_get_name(binary, true); result = g_panel_item_new(PIP_BINARY_VIEW, name, lname, selected, true, "N"); - register_panel_item(result, project->ref, get_main_configuration()); + register_panel_item(result, get_main_configuration()); handled->items = (GPanelItem **)realloc(handled->items, ++handled->count * sizeof(GPanelItem *)); handled->items[handled->count - 1] = result; diff --git a/src/analysis/project.h b/src/analysis/project.h index bf399fa..7ae3c03 100644 --- a/src/analysis/project.h +++ b/src/analysis/project.h @@ -68,10 +68,10 @@ typedef struct _GStudyProjectClass GStudyProjectClass; GType g_study_project_get_type(void); /* Crée un nouveau projet vierge. */ -GStudyProject *g_study_project_new(GObject *); +GStudyProject *g_study_project_new(void); /* Crée un projet à partir du contenu XML d'un fichier. */ -GStudyProject *g_study_project_open(GObject *, const char *); +GStudyProject *g_study_project_open(const char *); /* Procède à l'enregistrement d'un projet donné. */ bool g_study_project_save(GStudyProject *, const char *); diff --git a/src/gui/core/core.c b/src/gui/core/core.c index d9fece5..0530953 100644 --- a/src/gui/core/core.c +++ b/src/gui/core/core.c @@ -34,7 +34,7 @@ /****************************************************************************** * * -* Paramètres : ref = espace de référencement global. * +* Paramètres : - * * * * Description : Charge les éléments graphiques de l'éditeur. * * * @@ -44,11 +44,11 @@ * * ******************************************************************************/ -bool load_all_gui_components(GObject *ref) +bool load_all_gui_components(void) { bool result; /* Bilan à retourner */ - load_main_panels(ref); + load_main_panels(); load_extra_gtk_theme(); diff --git a/src/gui/core/core.h b/src/gui/core/core.h index 0dc7354..3112c44 100644 --- a/src/gui/core/core.h +++ b/src/gui/core/core.h @@ -34,7 +34,7 @@ /* Charge les éléments graphiques de l'éditeur. */ -bool load_all_gui_components(GObject *); +bool load_all_gui_components(void); /* Finalise le chargement des éléments graphiques de l'éditeur. */ bool complete_loading_of_all_gui_components(GGenConfig *); diff --git a/src/gui/core/global.c b/src/gui/core/global.c index 1eb8672..b4001c6 100644 --- a/src/gui/core/global.c +++ b/src/gui/core/global.c @@ -25,6 +25,9 @@ +/* Fenêtre principale de l'éditeur */ +static GtkWindow *_editor = NULL; + /* Barre de statut principale */ static GtkStatusStack *_status = NULL; @@ -47,6 +50,44 @@ G_LOCK_DEFINE_STATIC(_ci_mutex); /****************************************************************************** * * +* Paramètres : editor = fenêtre principale à référencer. * +* * +* Description : Note l'adresse de la fenêtre principale de l'éditeur. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void set_editor_window(GtkWindow *editor) +{ + _editor = editor; + +} + + +/****************************************************************************** +* * +* Paramètres : - * +* * +* Description : Fournit l'adresse de la fenêtre principale de l'éditeur. * +* * +* Retour : Fenêtre principale référencée. * +* * +* Remarques : - * +* * +******************************************************************************/ + +GtkWindow *get_editor_window(void) +{ + return _editor; + +} + + +/****************************************************************************** +* * * Paramètres : status = barre de statut à tenir informée. * * * * Description : Note l'adresse de la barre de statut principale. * diff --git a/src/gui/core/global.h b/src/gui/core/global.h index 33225e3..e69f743 100644 --- a/src/gui/core/global.h +++ b/src/gui/core/global.h @@ -31,6 +31,12 @@ +/* Note l'adresse de la fenêtre principale de l'éditeur. */ +void set_editor_window(GtkWindow *); + +/* Fournit l'adresse de la fenêtre principale de l'éditeur. */ +GtkWindow *get_editor_window(void); + /* Note l'adresse de la barre de statut principale. */ void set_global_status(GtkStatusStack *); diff --git a/src/gui/core/panels.c b/src/gui/core/panels.c index 5a1beb1..9d11e58 100644 --- a/src/gui/core/panels.c +++ b/src/gui/core/panels.c @@ -49,7 +49,7 @@ static GPanelItem *_panels_list = NULL; /****************************************************************************** * * -* Paramètres : ref = espace de référencement global. * +* Paramètres : - * * * * Description : Charge les principaux panneaux de l'éditeur. * * * @@ -59,7 +59,7 @@ static GPanelItem *_panels_list = NULL; * * ******************************************************************************/ -void load_main_panels(GObject *ref) +void load_main_panels(void) { GGenConfig *config; /* Configuration globale */ GPanelItem *item; /* Panneau de base à charger */ @@ -67,34 +67,34 @@ void load_main_panels(GObject *ref) config = get_main_configuration(); item = g_welcome_panel_new(); - register_panel_item(item, ref, config); + register_panel_item(item, config); item = g_log_panel_new(); - register_panel_item(item, ref, config); + register_panel_item(item, config); item = g_regedit_panel_new(); - register_panel_item(item, ref, config); + register_panel_item(item, config); item = g_symbols_panel_new(); - register_panel_item(item, ref, config); + register_panel_item(item, config); item = g_history_panel_new(); - register_panel_item(item, ref, config); + register_panel_item(item, config); item = g_strings_panel_new(); - register_panel_item(item, ref, config); + register_panel_item(item, config); item = g_glance_panel_new(); - register_panel_item(item, ref, config); + register_panel_item(item, config); item = g_bookmarks_panel_new(); - register_panel_item(item, ref, config); + register_panel_item(item, config); item = g_bintree_panel_new(); - register_panel_item(item, ref, config); + register_panel_item(item, config); item = g_error_panel_new(); - register_panel_item(item, ref, config); + register_panel_item(item, config); } @@ -102,7 +102,6 @@ void load_main_panels(GObject *ref) /****************************************************************************** * * * Paramètres : item = composant à présenter à l'affichage. * -* ref = espace de référencement global. * * config = configuration à compléter. * * * * Description : Enregistre un panneau comme partie intégrante de l'éditeur. * @@ -113,15 +112,12 @@ void load_main_panels(GObject *ref) * * ******************************************************************************/ -void register_panel_item(GPanelItem *item, GObject *ref, GGenConfig *config) +void register_panel_item(GPanelItem *item, GGenConfig *config) { GEditorItem *parent; /* Autre version de l'élément */ parent = G_EDITOR_ITEM(item); - g_object_ref(ref); - parent->ref = ref; - /* Enregistre correctement le tout */ register_editor_item(parent); panels_list_add_tail(item, &_panels_list); diff --git a/src/gui/core/panels.h b/src/gui/core/panels.h index 2b55517..0c55417 100644 --- a/src/gui/core/panels.h +++ b/src/gui/core/panels.h @@ -35,10 +35,10 @@ /* Charge les principaux panneaux de l'éditeur. */ -void load_main_panels(GObject *); +void load_main_panels(void); /* Enregistre un panneau comme partie intégrante de l'éditeur. */ -void register_panel_item(GPanelItem *, GObject *, GGenConfig *); +void register_panel_item(GPanelItem *, GGenConfig *); /* Réalise un traitement sur un panneau de l'éditeur. */ typedef bool (* handle_panel_item_fc) (GPanelItem *, void *); diff --git a/src/gui/editor.c b/src/gui/editor.c index a3055c7..d44d2af 100644 --- a/src/gui/editor.c +++ b/src/gui/editor.c @@ -286,6 +286,8 @@ GtkWidget *create_editor(void) gtk_container_set_border_width(GTK_CONTAINER(result), 4); gtk_window_set_title(GTK_WINDOW(result), _("Chrysalide")); + set_editor_window(GTK_WINDOW(result)); + g_generic_config_get_value(get_main_configuration(), MPK_TITLE_BAR, &hide); gtk_window_set_hide_titlebar_when_maximized(GTK_WINDOW(result), hide); @@ -345,7 +347,7 @@ GtkWidget *create_editor(void) //_support = init_panels2(G_CALLBACK(on_dock_item_switch), ref); gtk_box_pack_start(GTK_BOX(vbox1), _support, TRUE, TRUE, 0); - /* ... = */load_all_gui_components(ref); + /* ... = */load_all_gui_components(); } while(0); @@ -1379,7 +1381,8 @@ static void on_dock_item_switch(GtkDockStation *station, GtkWidget *widget, gpoi else g_object_unref(G_OBJECT(binary)); - g_object_unref(G_OBJECT(old_binary)); + if (old_binary != NULL) + g_object_unref(G_OBJECT(old_binary)); g_object_ref(G_OBJECT(widget)); change_editor_items_current_view(GTK_DISPLAY_PANEL(widget)); diff --git a/src/gui/menus/file.c b/src/gui/menus/file.c index c3865b6..d83f05b 100644 --- a/src/gui/menus/file.c +++ b/src/gui/menus/file.c @@ -28,16 +28,17 @@ #include <i18n.h> +#include "../core/global.h" #include "../../analysis/project.h" #include "../../gtkext/easygtk.h" /* Réagit au menu "Fichier -> Nouveau projet". */ -static void mcb_file_new_project(GtkMenuItem *, GObject *); +static void mcb_file_new_project(GtkMenuItem *, gpointer); /* Réagit au menu "Fichier -> Ouvrir un projet". */ -static void mcb_file_open_project(GtkMenuItem *, GObject *); +static void mcb_file_open_project(GtkMenuItem *, gpointer); /* Réagit au menu "Fichier -> Enregistrer le projet". */ static void mcb_file_save_project(GtkMenuItem *, gpointer); @@ -77,7 +78,7 @@ GtkWidget *build_menu_file(GObject *ref, GtkAccelGroup *accgroup) menubar = qck_create_menu(GTK_MENU_ITEM(result)); submenuitem = qck_create_menu_item(NULL, NULL, _("New project"), - G_CALLBACK(mcb_file_new_project), ref); + G_CALLBACK(mcb_file_new_project), NULL); add_accelerator_to_menu_item(submenuitem, "<Ctrl>N", accgroup); gtk_container_add(GTK_CONTAINER(menubar), submenuitem); @@ -85,7 +86,7 @@ GtkWidget *build_menu_file(GObject *ref, GtkAccelGroup *accgroup) gtk_container_add(GTK_CONTAINER(menubar), submenuitem); submenuitem = qck_create_menu_item(NULL, NULL, _("Open project"), - G_CALLBACK(mcb_file_open_project), ref); + G_CALLBACK(mcb_file_open_project), NULL); add_accelerator_to_menu_item(submenuitem, "<Ctrl>O", accgroup); gtk_container_add(GTK_CONTAINER(menubar), submenuitem); @@ -106,12 +107,12 @@ GtkWidget *build_menu_file(GObject *ref, GtkAccelGroup *accgroup) gtk_container_add(GTK_CONTAINER(menubar), submenuitem); submenuitem = qck_create_menu_item(NULL, NULL, _("Save project"), - G_CALLBACK(mcb_file_save_project), ref); + G_CALLBACK(mcb_file_save_project), NULL); add_accelerator_to_menu_item(submenuitem, "<Ctrl>S", accgroup); gtk_container_add(GTK_CONTAINER(menubar), submenuitem); submenuitem = qck_create_menu_item(NULL, NULL, _("Save project as..."), - G_CALLBACK(mcb_file_save_project_as), ref); + G_CALLBACK(mcb_file_save_project_as), NULL); gtk_container_add(GTK_CONTAINER(menubar), submenuitem); submenuitem = qck_create_menu_separator(); @@ -129,7 +130,7 @@ GtkWidget *build_menu_file(GObject *ref, GtkAccelGroup *accgroup) /****************************************************************************** * * * Paramètres : menuitem = élément de menu sélectionné. * -* ref = adresse de l'espace de référencement global. * +* unused = adresse non utilisée ici. * * * * Description : Réagit au menu "Fichier -> Nouveau projet". * * * @@ -139,11 +140,11 @@ GtkWidget *build_menu_file(GObject *ref, GtkAccelGroup *accgroup) * * ******************************************************************************/ -static void mcb_file_new_project(GtkMenuItem *menuitem, GObject *ref) +static void mcb_file_new_project(GtkMenuItem *menuitem, gpointer unused) { GStudyProject *project; /* Nouveau projet courant */ - project = g_study_project_new(ref); + project = g_study_project_new(); set_current_project(project); @@ -155,7 +156,7 @@ static void mcb_file_new_project(GtkMenuItem *menuitem, GObject *ref) /****************************************************************************** * * * Paramètres : menuitem = élément de menu sélectionné. * -* ref = adresse de l'espace de référencement global. * +* unused = adresse non utilisée ici. * * * * Description : Réagit au menu "Fichier -> Ouvrir un projet". * * * @@ -165,13 +166,13 @@ static void mcb_file_new_project(GtkMenuItem *menuitem, GObject *ref) * * ******************************************************************************/ -static void mcb_file_open_project(GtkMenuItem *menuitem, GObject *ref) +static void mcb_file_open_project(GtkMenuItem *menuitem, gpointer unused) { GtkWidget *dialog; /* Boîte à afficher */ GStudyProject *project; /* Projet chargé */ gchar *filename; /* Nom du fichier à intégrer */ - dialog = gtk_file_chooser_dialog_new(_("Open a project"), GTK_WINDOW(ref), + dialog = gtk_file_chooser_dialog_new(_("Open a project"), get_editor_window(), GTK_FILE_CHOOSER_ACTION_OPEN, _("_Cancel"), GTK_RESPONSE_CANCEL, _("_Open"), GTK_RESPONSE_ACCEPT, @@ -187,7 +188,7 @@ static void mcb_file_open_project(GtkMenuItem *menuitem, GObject *ref) { filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); - project = g_study_project_open(ref, filename); + project = g_study_project_open(filename); if (project != NULL) { @@ -208,7 +209,7 @@ static void mcb_file_open_project(GtkMenuItem *menuitem, GObject *ref) /****************************************************************************** * * * Paramètres : menuitem = élément de menu sélectionné. * -* data = adresse de l'espace de référencement global. * +* unused = adresse non utilisée ici. * * * * Description : Réagit au menu "Fichier -> Enregistrer le projet". * * * @@ -218,7 +219,7 @@ static void mcb_file_open_project(GtkMenuItem *menuitem, GObject *ref) * * ******************************************************************************/ -static void mcb_file_save_project(GtkMenuItem *menuitem, gpointer data) +static void mcb_file_save_project(GtkMenuItem *menuitem, gpointer unused) { GStudyProject *project; /* Projet courant */ @@ -231,7 +232,7 @@ static void mcb_file_save_project(GtkMenuItem *menuitem, gpointer data) } else - mcb_file_save_project_as(menuitem, data); + mcb_file_save_project_as(menuitem, NULL); } @@ -239,7 +240,7 @@ static void mcb_file_save_project(GtkMenuItem *menuitem, gpointer data) /****************************************************************************** * * * Paramètres : menuitem = élément de menu sélectionné. * -* data = adresse de l'espace de référencement global. * +* unused = adresse non utilisée ici. * * * * Description : Réagit au menu "Fichier -> Enregistrer le projet sous...". * * * @@ -249,13 +250,13 @@ static void mcb_file_save_project(GtkMenuItem *menuitem, gpointer data) * * ******************************************************************************/ -static void mcb_file_save_project_as(GtkMenuItem *menuitem, gpointer data) +static void mcb_file_save_project_as(GtkMenuItem *menuitem, gpointer unused) { GtkWidget *dialog; /* Boîte à afficher */ GStudyProject *project; /* Projet courant */ gchar *filename; /* Nom du fichier à intégrer */ - dialog = gtk_file_chooser_dialog_new(_("Save the project as..."), GTK_WINDOW(data), + dialog = gtk_file_chooser_dialog_new(_("Save the project as..."), get_editor_window(), GTK_FILE_CHOOSER_ACTION_SAVE, _("_Cancel"), GTK_RESPONSE_CANCEL, _("_Save"), GTK_RESPONSE_ACCEPT, diff --git a/src/gui/panels/strings.c b/src/gui/panels/strings.c index c9d971e..6ae44b1 100644 --- a/src/gui/panels/strings.c +++ b/src/gui/panels/strings.c @@ -1054,7 +1054,7 @@ static void mcb_strings_panel_find_refs(GtkMenuItem *menuitem, GStringsPanel *pa */ instr = g_arch_processor_find_instr_by_address(proc, get_mrange_addr(range)); - ref = g_editor_item_get_global_ref(G_EDITOR_ITEM(panel)); + ref = G_OBJECT(get_editor_window());//g_editor_item_get_global_ref(G_EDITOR_ITEM(panel)); dialog = create_gotox_dialog_for_cross_references(GTK_WINDOW(ref), binary, instr, true); diff --git a/src/gui/panels/welcome.c b/src/gui/panels/welcome.c index 44ff517..8ae1667 100644 --- a/src/gui/panels/welcome.c +++ b/src/gui/panels/welcome.c @@ -37,6 +37,7 @@ #include "panel-int.h" +#include "../core/global.h" #include "../../analysis/project.h" #include "../../common/cpp.h" #include "../../common/io.h" @@ -468,7 +469,7 @@ static void on_new_binary_clicked(GtkButton *button, GWelcomePanel *panel) GObject *ref; /* Espace de référencements */ GtkMenuItem *item; /* Elément de menu simulé */ - ref = g_editor_item_get_global_ref(G_EDITOR_ITEM(panel)); + ref = G_OBJECT(get_editor_window());//g_editor_item_get_global_ref(G_EDITOR_ITEM(panel)); item = GTK_MENU_ITEM(g_object_get_data(ref, "mnu_project_add_binary")); @@ -594,7 +595,6 @@ static void on_row_activated_for_projects(GtkTreeView *treeview, GtkTreePath *pa GtkTreeIter iter; /* Point de la consultation */ gboolean valid; /* Validité de l'entrée */ gchar *filename; /* Chemin d'accès au projet */ - GObject *ref; /* Espace de référencements */ GStudyProject *project; /* Nouveau projet à ouvrir */ model = gtk_tree_view_get_model(treeview); @@ -605,9 +605,7 @@ static void on_row_activated_for_projects(GtkTreeView *treeview, GtkTreePath *pa if (valid) { - ref = g_editor_item_get_global_ref(G_EDITOR_ITEM(panel)); - - project = g_study_project_open(ref, filename); + project = g_study_project_open(filename); if (project != NULL) { @@ -60,11 +60,6 @@ static int open_binaries(char **, int); -/* Espace de référencement global. // FIXME à déplacer */ -static GObject *_ref = NULL; - - - /****************************************************************************** * * * Paramètres : name = nom du programme en question. * @@ -251,8 +246,6 @@ int main(int argc, char **argv) editor = create_editor(); if (editor == NULL) goto failed_to_load_editor; - _ref = G_OBJECT(editor); - if (!batch_mode) gtk_widget_show_now(editor); @@ -288,7 +281,7 @@ int main(int argc, char **argv) g_idle_add((GSourceFunc)load_last_project, config); else - set_current_project(g_study_project_new(_ref)); + set_current_project(g_study_project_new()); /* Exécution du programme */ @@ -341,8 +334,8 @@ static gboolean load_last_project(GGenConfig *cfg) if (!g_generic_config_get_value(cfg, MPK_LAST_PROJECT, &filename)) filename = NULL; - if (filename == NULL) project = g_study_project_new(_ref); - else project = g_study_project_open(_ref, filename); + if (filename == NULL) project = g_study_project_new(); + else project = g_study_project_open(filename); set_current_project(project); |