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: | 
