diff options
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/pychrysalide/gui/core/global.c | 43 | ||||
-rw-r--r-- | plugins/pychrysalide/gui/menubar.c | 323 | ||||
-rw-r--r-- | plugins/ropgadgets/plugin.c | 27 |
3 files changed, 74 insertions, 319 deletions
diff --git a/plugins/pychrysalide/gui/core/global.c b/plugins/pychrysalide/gui/core/global.c index 26d51cb..a3b62ee 100644 --- a/plugins/pychrysalide/gui/core/global.c +++ b/plugins/pychrysalide/gui/core/global.c @@ -25,6 +25,7 @@ #include "global.h" +#include <assert.h> #include <pygobject.h> @@ -36,6 +37,9 @@ +/* Fournit l'adresse du constructeur principal de l'éditeur. */ +static PyObject *py_global_get_editor_builder(PyObject *, PyObject *); + /* Fournit l'adresse de la fenêtre principale de l'éditeur. */ static PyObject *py_global_get_editor_window(PyObject *, PyObject *); @@ -49,6 +53,44 @@ static PyObject *py_global_get_current_content(PyObject *, PyObject *); * Paramètres : self = objet Python concerné par l'appel. * * args = non utilisé ici. * * * +* Description : Fournit l'adresse du constructeur principal de l'éditeur. * +* * +* Retour : Constructeur principal référencé. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static PyObject *py_global_get_editor_builder(PyObject *self, PyObject *args) +{ + PyObject *result; /* Instance Python à retourner */ + GtkBuilder *builder; /* Constructeur principal */ + +#define GLOBAL_GET_EDITOR_BUILDER_METHOD PYTHON_METHOD_DEF \ +( \ + get_editor_builder, "", \ + METH_NOARGS, py_global, \ + "Provide access to the Chrysalide main window builder.\n" \ + "\n" \ + "The result should be an instance of Gtk.Builder, never None." \ +) + + builder = get_editor_builder(); + assert(builder != NULL); + + result = pygobject_new(G_OBJECT(builder)); + g_object_unref(G_OBJECT(builder)); + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : self = objet Python concerné par l'appel. * +* args = non utilisé ici. * +* * * Description : Fournit l'adresse de la fenêtre principale de l'éditeur. * * * * Retour : Fenêtre principale référencée. * @@ -150,6 +192,7 @@ bool populate_gui_core_module_with_global(void) PyObject *module; /* Module à recompléter */ static PyMethodDef py_global_methods[] = { + GLOBAL_GET_EDITOR_BUILDER_METHOD, GLOBAL_GET_EDITOR_WINDOW_METHOD, GLOBAL_GET_CURRENT_CONTENT_METHOD, { NULL } diff --git a/plugins/pychrysalide/gui/menubar.c b/plugins/pychrysalide/gui/menubar.c index 0234fba..5c6270e 100644 --- a/plugins/pychrysalide/gui/menubar.c +++ b/plugins/pychrysalide/gui/menubar.c @@ -47,296 +47,9 @@ " 'menubar' as key." -/* Fournit le composant GTK associé au menu "Fichier". */ -static PyObject *py_menu_bar_get_file_menu(PyObject *, void *); +/* Fournit le constructeur associé à la barre de menus. */ +static PyObject *py_menu_bar_get_builder(PyObject *self, void *); -/* Fournit le composant GTK associé au menu "Edition". */ -static PyObject *py_menu_bar_get_edition_menu(PyObject *, void *); - -/* Fournit le composant GTK associé au menu "Affichage". */ -static PyObject *py_menu_bar_get_view_menu(PyObject *, void *); - -/* Fournit le composant GTK associé au menu "Projet". */ -static PyObject *py_menu_bar_get_project_menu(PyObject *, void *); - -/* Fournit le composant GTK associé au menu "Binaire". */ -static PyObject *py_menu_bar_get_binary_menu(PyObject *, void *); - -/* Fournit le composant GTK associé au menu "Débogage". */ -static PyObject *py_menu_bar_get_debug_menu(PyObject *, void *); - -/* Fournit le composant GTK associé au menu "Options". */ -static PyObject *py_menu_bar_get_options_menu(PyObject *, void *); - -/* Fournit le composant GTK associé au menu "Aide". */ -static PyObject *py_menu_bar_get_help_menu(PyObject *, void *); - - - -/****************************************************************************** -* * -* Paramètres : self = objet Python concerné par l'appel. * -* closure = non utilisé ici. * -* * -* Description : Fournit le composant GTK associé au menu "Fichier". * -* * -* Retour : Instance de composant graphique correspondant au menu visé. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyObject *py_menu_bar_get_file_menu(PyObject *self, void *closure) -{ - PyObject *result; /* Valeur à retourner */ - GMenuBar *bar; /* Elément à consulter */ - GtkWidget *menu; /* Composant GTK visé */ - -#define MENU_BAR_FILE_MENU_ATTRIB PYTHON_GET_DEF_FULL \ -( \ - file_menu, py_menu_bar, \ - "File menu included in the main menubar, as a" \ - " Gtk.MenuItem instance." \ -) - - bar = G_MENU_BAR(pygobject_get(self)); - - menu = g_menu_bar_get_file_menu(bar); - - result = pygobject_new(G_OBJECT(menu)); - g_object_unref(G_OBJECT(menu)); - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : self = objet Python concerné par l'appel. * -* closure = non utilisé ici. * -* * -* Description : Fournit le composant GTK associé au menu "Edition". * -* * -* Retour : Instance de composant graphique correspondant au menu visé. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyObject *py_menu_bar_get_edition_menu(PyObject *self, void *closure) -{ - PyObject *result; /* Valeur à retourner */ - GMenuBar *bar; /* Elément à consulter */ - GtkWidget *menu; /* Composant GTK visé */ - -#define MENU_BAR_EDITION_MENU_ATTRIB PYTHON_GET_DEF_FULL \ -( \ - edition_menu, py_menu_bar, \ - "Edition menu included in the main menubar, as a" \ - " Gtk.MenuItem instance." \ -) - - bar = G_MENU_BAR(pygobject_get(self)); - - menu = g_menu_bar_get_edition_menu(bar); - - result = pygobject_new(G_OBJECT(menu)); - g_object_unref(G_OBJECT(menu)); - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : self = objet Python concerné par l'appel. * -* closure = non utilisé ici. * -* * -* Description : Fournit le composant GTK associé au menu "Affichage". * -* * -* Retour : Instance de composant graphique correspondant au menu visé. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyObject *py_menu_bar_get_view_menu(PyObject *self, void *closure) -{ - PyObject *result; /* Valeur à retourner */ - GMenuBar *bar; /* Elément à consulter */ - GtkWidget *menu; /* Composant GTK visé */ - -#define MENU_BAR_VIEW_MENU_ATTRIB PYTHON_GET_DEF_FULL \ -( \ - view_menu, py_menu_bar, \ - "View menu included in the main menubar, as a" \ - " Gtk.MenuItem instance." \ -) - - bar = G_MENU_BAR(pygobject_get(self)); - - menu = g_menu_bar_get_view_menu(bar); - - result = pygobject_new(G_OBJECT(menu)); - g_object_unref(G_OBJECT(menu)); - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : self = objet Python concerné par l'appel. * -* closure = non utilisé ici. * -* * -* Description : Fournit le composant GTK associé au menu "Projet". * -* * -* Retour : Instance de composant graphique correspondant au menu visé. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyObject *py_menu_bar_get_project_menu(PyObject *self, void *closure) -{ - PyObject *result; /* Valeur à retourner */ - GMenuBar *bar; /* Elément à consulter */ - GtkWidget *menu; /* Composant GTK visé */ - -#define MENU_BAR_PROJECT_MENU_ATTRIB PYTHON_GET_DEF_FULL \ -( \ - project_menu, py_menu_bar, \ - "Project menu included in the main menubar, as a" \ - " Gtk.MenuItem instance." \ -) - - bar = G_MENU_BAR(pygobject_get(self)); - - menu = g_menu_bar_get_project_menu(bar); - - result = pygobject_new(G_OBJECT(menu)); - g_object_unref(G_OBJECT(menu)); - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : self = objet Python concerné par l'appel. * -* closure = non utilisé ici. * -* * -* Description : Fournit le composant GTK associé au menu "Binaire". * -* * -* Retour : Instance de composant graphique correspondant au menu visé. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyObject *py_menu_bar_get_binary_menu(PyObject *self, void *closure) -{ - PyObject *result; /* Valeur à retourner */ - GMenuBar *bar; /* Elément à consulter */ - GtkWidget *menu; /* Composant GTK visé */ - -#define MENU_BAR_BINARY_MENU_ATTRIB PYTHON_GET_DEF_FULL \ -( \ - binary_menu, py_menu_bar, \ - "Binary menu included in the main menubar, as a" \ - " Gtk.MenuItem instance." \ -) - - bar = G_MENU_BAR(pygobject_get(self)); - - menu = g_menu_bar_get_binary_menu(bar); - - result = pygobject_new(G_OBJECT(menu)); - g_object_unref(G_OBJECT(menu)); - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : self = objet Python concerné par l'appel. * -* closure = non utilisé ici. * -* * -* Description : Fournit le composant GTK associé au menu "Débogage". * -* * -* Retour : Instance de composant graphique correspondant au menu visé. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyObject *py_menu_bar_get_debug_menu(PyObject *self, void *closure) -{ - PyObject *result; /* Valeur à retourner */ - GMenuBar *bar; /* Elément à consulter */ - GtkWidget *menu; /* Composant GTK visé */ - -#define MENU_BAR_DEBUG_MENU_ATTRIB PYTHON_GET_DEF_FULL \ -( \ - debug_menu, py_menu_bar, \ - "Debug menu included in the main menubar, as a" \ - " Gtk.MenuItem instance." \ -) - - bar = G_MENU_BAR(pygobject_get(self)); - - menu = g_menu_bar_get_debug_menu(bar); - - result = pygobject_new(G_OBJECT(menu)); - g_object_unref(G_OBJECT(menu)); - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : self = objet Python concerné par l'appel. * -* closure = non utilisé ici. * -* * -* Description : Fournit le composant GTK associé au menu "Options". * -* * -* Retour : Instance de composant graphique correspondant au menu visé. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyObject *py_menu_bar_get_options_menu(PyObject *self, void *closure) -{ - PyObject *result; /* Valeur à retourner */ - GMenuBar *bar; /* Elément à consulter */ - GtkWidget *menu; /* Composant GTK visé */ - -#define MENU_BAR_OPTIONS_MENU_ATTRIB PYTHON_GET_DEF_FULL \ -( \ - options_menu, py_menu_bar, \ - "Options menu included in the main menubar, as a" \ - " Gtk.MenuItem instance." \ -) - - bar = G_MENU_BAR(pygobject_get(self)); - - menu = g_menu_bar_get_options_menu(bar); - - result = pygobject_new(G_OBJECT(menu)); - g_object_unref(G_OBJECT(menu)); - - return result; - -} /****************************************************************************** @@ -344,33 +57,32 @@ static PyObject *py_menu_bar_get_options_menu(PyObject *self, void *closure) * Paramètres : self = objet Python concerné par l'appel. * * closure = non utilisé ici. * * * -* Description : Fournit le composant GTK associé au menu "Aide". * +* Description : Fournit le constructeur associé à la barre de menus. * * * -* Retour : Instance de composant graphique correspondant au menu visé. * +* Retour : Instance du constructeur (principal) associé à la barre. * * * * Remarques : - * * * ******************************************************************************/ -static PyObject *py_menu_bar_get_help_menu(PyObject *self, void *closure) +static PyObject *py_menu_bar_get_builder(PyObject *self, void *closure) { PyObject *result; /* Valeur à retourner */ GMenuBar *bar; /* Elément à consulter */ - GtkWidget *menu; /* Composant GTK visé */ + GtkBuilder *builder; /* Instance GTK visée */ -#define MENU_BAR_HELP_MENU_ATTRIB PYTHON_GET_DEF_FULL \ -( \ - help_menu, py_menu_bar, \ - "Help menu included in the main menubar, as a" \ - " Gtk.MenuItem instance." \ +#define MENU_BAR_BUILDER_ATTRIB PYTHON_GET_DEF_FULL \ +( \ + builder, py_menu_bar, \ + "Builder linked to the main menubar, as a Gtk.Builder instance." \ ) bar = G_MENU_BAR(pygobject_get(self)); - menu = g_menu_bar_get_help_menu(bar); + builder = g_menu_bar_get_builder(bar); - result = pygobject_new(G_OBJECT(menu)); - g_object_unref(G_OBJECT(menu)); + result = pygobject_new(G_OBJECT(builder)); + g_object_unref(G_OBJECT(builder)); return result; @@ -396,14 +108,7 @@ PyTypeObject *get_python_menu_bar_type(void) }; static PyGetSetDef py_menu_bar_getseters[] = { - MENU_BAR_FILE_MENU_ATTRIB, - MENU_BAR_EDITION_MENU_ATTRIB, - MENU_BAR_VIEW_MENU_ATTRIB, - MENU_BAR_PROJECT_MENU_ATTRIB, - MENU_BAR_BINARY_MENU_ATTRIB, - MENU_BAR_DEBUG_MENU_ATTRIB, - MENU_BAR_OPTIONS_MENU_ATTRIB, - MENU_BAR_HELP_MENU_ATTRIB, + MENU_BAR_BUILDER_ATTRIB, { NULL } }; diff --git a/plugins/ropgadgets/plugin.c b/plugins/ropgadgets/plugin.c index c4c33dc..836717c 100644 --- a/plugins/ropgadgets/plugin.c +++ b/plugins/ropgadgets/plugin.c @@ -70,27 +70,34 @@ static void mcb_plugins_list_rop_gadgets(GtkMenuItem *, gpointer); G_MODULE_EXPORT bool chrysalide_plugin_init(GPluginModule *plugin) { bool result; /* Bilan à retourner */ - GObject *ref; /* Espace de référencements */ - GtkContainer *menubar; /* Support pour éléments */ + GtkBuilder *builder; /* Constructeur principal */ + GtkMenuItem *item; /* Menu à compléter */ + GtkContainer *menu; /* Support pour éléments */ GtkWidget *submenuitem; /* Sous-élément de menu */ result = false; - ref = G_OBJECT(get_editor_window()); - if (ref == NULL) goto no_editor; + builder = get_editor_builder(); + if (builder == NULL) + { + result = true; + goto no_editor; + } - menubar = GTK_CONTAINER(g_object_get_data(ref, "menubar_plugins")); - if (menubar == NULL) goto no_menubar; + item = GTK_MENU_ITEM(gtk_builder_get_object(builder, "binary")); + if (item == NULL) goto no_binary_menu; - submenuitem = qck_create_menu_item(ref, "mnu_plugins_ropgadgets", _("List ROP gadgets"), + menu = GTK_CONTAINER(gtk_menu_item_get_submenu(item)); + + submenuitem = qck_create_menu_item(G_OBJECT(item), "binary_ropgadgets", _("List ROP gadgets"), G_CALLBACK(mcb_plugins_list_rop_gadgets), NULL); - gtk_container_add(GTK_CONTAINER(menubar), submenuitem); + gtk_container_add(GTK_CONTAINER(menu), submenuitem); result = true; - no_menubar: + no_binary_menu: - g_object_unref(ref); + g_object_unref(G_OBJECT(builder)); no_editor: |