diff options
Diffstat (limited to 'src/gui/core/items.c')
-rw-r--r-- | src/gui/core/items.c | 50 |
1 files changed, 40 insertions, 10 deletions
diff --git a/src/gui/core/items.c b/src/gui/core/items.c index 9c82100..6c57b7b 100644 --- a/src/gui/core/items.c +++ b/src/gui/core/items.c @@ -24,6 +24,7 @@ #include "items.h" +#include <assert.h> #include <malloc.h> #include <string.h> @@ -33,7 +34,7 @@ -/* Liste des éléments enregistrés */ +/* Liste des éléments en place */ static GEditorItem **_item_list = NULL; static size_t _item_count = 0; @@ -52,7 +53,7 @@ static void track_cursor_on_view_panel(GLoadedPanel *, const GLineCursor *, gpoi /****************************************************************************** * * -* Paramètres : - * +* Paramètres : item = élément de l'interface graphique à intégrer. * * * * Description : Procède à l'enregistrement d'un élément reactif de l'éditeur.* * * @@ -75,9 +76,9 @@ void register_editor_item(GEditorItem *item) /****************************************************************************** * * -* Paramètres : target = désignation de l'élément réactif à retrouver. * +* Paramètres : target = type de l'élément réactif à retrouver. * * * -* Description : Retrouve un élément reactif de l'éditeur par son nom clef. * +* Description : Retrouve un élément reactif de l'éditeur par son type. * * * * Retour : Elément retrouvé ou NULL. * * * @@ -85,26 +86,24 @@ void register_editor_item(GEditorItem *item) * * ******************************************************************************/ -GEditorItem *find_editor_item_by_key(const char *target) +GEditorItem *find_editor_item_by_type(GType target) { GEditorItem *result; /* Elément à retourner */ size_t i; /* Boucle de parcours */ - char *key; /* Nom d'un élément à analyser */ + GType type; /* Type d'un élément analysé */ result = NULL; for (i = 0; i < _item_count && result == NULL; i++) { - key = g_editor_item_get_key(_item_list[i]); + type = G_TYPE_FROM_INSTANCE(_item_list[i]); - if (strcmp(key, target) == 0) + if (type == target) { result = _item_list[i]; g_object_ref(G_OBJECT(result)); } - free(key); - } return result; @@ -114,6 +113,37 @@ GEditorItem *find_editor_item_by_key(const char *target) /****************************************************************************** * * +* Paramètres : item = élément de l'interface graphique à oublier. * +* * +* Description : Retire un des éléments reactifs de l'éditeur. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void unregister_editor_item(GEditorItem *item) +{ + size_t i; /* Boucle de parcours */ + + for (i = 0; i < _item_count; i++) + if (_item_list[i] == item) + break; + + assert(i < _item_count); + + g_object_unref(G_OBJECT(item)); + + memmove(&_item_list[i], &_item_list[i + 1], (_item_count - i - 1) * sizeof(GEditorItem *)); + + _item_list = realloc(_item_list, --_item_count * sizeof(GEditorItem *)); + +} + + +/****************************************************************************** +* * * Paramètres : content = nouvelle instance de contenu analysé. * * * * Description : Lance une actualisation du fait d'un changement de contenu. * |