summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/analysis/project.c16
-rw-r--r--src/analysis/project.h4
-rw-r--r--src/gui/core/core.c6
-rw-r--r--src/gui/core/core.h2
-rw-r--r--src/gui/core/global.c41
-rw-r--r--src/gui/core/global.h6
-rw-r--r--src/gui/core/panels.c30
-rw-r--r--src/gui/core/panels.h4
-rw-r--r--src/gui/editor.c7
-rw-r--r--src/gui/menus/file.c39
-rw-r--r--src/gui/panels/strings.c2
-rw-r--r--src/gui/panels/welcome.c8
-rw-r--r--src/main.c13
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)
{
diff --git a/src/main.c b/src/main.c
index 46eb3e8..43fa5d3 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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);