diff options
Diffstat (limited to 'src/gui/panel.c')
-rw-r--r-- | src/gui/panel.c | 448 |
1 files changed, 306 insertions, 142 deletions
diff --git a/src/gui/panel.c b/src/gui/panel.c index 18ecbb0..a509f40 100644 --- a/src/gui/panel.c +++ b/src/gui/panel.c @@ -31,20 +31,23 @@ #include "panel-int.h" +#include "core/global.h" +#include "core/items.h" #include "../common/extstr.h" #include "../core/params.h" #include "../gtkext/gtkdockable-int.h" #include "../gtkext/named.h" +#include "../plugins/dt.h" /* ------------------------- COEUR DES PANNEAUX D'AFFICHAGE ------------------------- */ -/* Initialise la classe des éléments réactifs de l'éditeur. */ +/* Initialise la classe des panneaux graphiques de l'éditeur. */ static void g_panel_item_class_init(GPanelItemClass *); -/* Initialise une instance d'élément réactif pour l'éditeur. */ +/* Initialise une instance de panneau graphique pour l'éditeur. */ static void g_panel_item_init(GPanelItem *); /* Procède à l'initialisation de l'interface d'incrustation. */ @@ -56,6 +59,9 @@ static void g_panel_item_dispose(GPanelItem *); /* Procède à la libération totale de la mémoire. */ static void g_panel_item_finalize(GPanelItem *); +/* Construit la chaîne d'accès à un élément de configuration. */ +static char *gtk_panel_item_class_build_configuration_key(const GPanelItemClass *, const char *); + /* Fournit le nom court du composant encapsulable. */ static char *gtk_panel_item_get_name(const GPanelItem *); @@ -71,9 +77,6 @@ static GtkWidget *gtk_panel_item_get_widget(GPanelItem *); /* Démarre l'actualisation du filtrage du contenu. */ static void gtk_panel_item_update_filtered(GPanelItem *, const char *); -/* Construit la chaîne d'accès à un élément de configuration. */ -static char *gtk_panel_item_build_configuration_key(const GPanelItem *, const char *); - /* ---------------------- MECANISMES DE MISE A JOUR DE PANNEAU ---------------------- */ @@ -96,9 +99,9 @@ G_DEFINE_TYPE_WITH_CODE(GPanelItem, g_panel_item, G_TYPE_EDITOR_ITEM, /****************************************************************************** * * -* Paramètres : klass = classe à initialiser. * +* Paramètres : class = classe à initialiser. * * * -* Description : Initialise la classe des éléments réactifs de l'éditeur. * +* Description : Initialise la classe des panneaux graphiques de l'éditeur. * * * * Retour : - * * * @@ -106,21 +109,24 @@ G_DEFINE_TYPE_WITH_CODE(GPanelItem, g_panel_item, G_TYPE_EDITOR_ITEM, * * ******************************************************************************/ -static void g_panel_item_class_init(GPanelItemClass *klass) +static void g_panel_item_class_init(GPanelItemClass *class) { GObjectClass *object; /* Autre version de la classe */ GEditorItemClass *item; /* Encore une autre vision... */ - object = G_OBJECT_CLASS(klass); + object = G_OBJECT_CLASS(class); object->dispose = (GObjectFinalizeFunc/* ! */)g_panel_item_dispose; object->finalize = (GObjectFinalizeFunc)g_panel_item_finalize; - item = G_EDITOR_ITEM_CLASS(klass); + item = G_EDITOR_ITEM_CLASS(class); - item->get_key = (get_item_key_fc)gtk_panel_item_get_name; item->get_widget = (get_item_widget_fc)gtk_panel_item_get_widget; + class->get_personality = gtk_panel_item_class_get_personality_singleton; + class->dock_at_startup = gtk_panel_item_class_return_true; + class->can_search = gtk_panel_item_class_return_false; + g_signal_new("dock-request", G_TYPE_PANEL_ITEM, G_SIGNAL_RUN_LAST, @@ -137,8 +143,6 @@ static void g_panel_item_class_init(GPanelItemClass *klass) g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); - klass->can_search = false; - } @@ -146,7 +150,7 @@ static void g_panel_item_class_init(GPanelItemClass *klass) * * * Paramètres : item = instance à initialiser. * * * -* Description : Initialise une instance d'élément réactif pour l'éditeur. * +* Description : Initialise une instance de panneau graphique pour l'éditeur. * * * * Retour : - * * * @@ -156,9 +160,7 @@ static void g_panel_item_class_init(GPanelItemClass *klass) static void g_panel_item_init(GPanelItem *item) { - DL_LIST_ITEM_INIT(&item->link); - - item->personality = PIP_INVALID; + item->docked = false; item->widget = NULL; item->cached_widget = NULL; @@ -230,8 +232,6 @@ static void g_panel_item_dispose(GPanelItem *item) static void g_panel_item_finalize(GPanelItem *item) { - free(item->path); - if (item->filter != NULL) free(item->filter); @@ -245,33 +245,44 @@ static void g_panel_item_finalize(GPanelItem *item) /****************************************************************************** * * -* Paramètres : personality = nature du panneau à mettre en place. * -* widget = composant avec noms à présenter à l'affichage. * -* startup = chargement au démarrage ? * -* path = chemin vers la place idéale pour le futur panneau. * +* Paramètres : class = classe à consulter. * * * -* Description : Crée un élément de panneau réactif. * +* Description : Fournit une indication sur la personnalité du panneau. * * * -* Retour : Adresse de la structure mise en place. * +* Retour : Identifiant lié à la nature du panneau. * * * * Remarques : - * * * ******************************************************************************/ -GPanelItem *g_panel_item_new(PanelItemPersonality personality, GNamedWidget *widget, bool startup, const char *path) +PanelItemPersonality gtk_panel_item_class_get_personality(const GPanelItemClass *class) { - GPanelItem *result; /* Structure à retourner */ + PanelItemPersonality result; /* Personnalité à retourner */ + + result = class->get_personality(class); + + return result; - result = g_object_new(G_TYPE_PANEL_ITEM, NULL); +} - assert(personality > PIP_INVALID && personality < PIP_COUNT); - result->personality = personality; - result->widget = widget; - g_object_ref(G_OBJECT(widget)); +/****************************************************************************** +* * +* Paramètres : class = classe à consulter. * +* * +* Description : Fournit une indication sur la personnalité du panneau. * +* * +* Retour : Identifiant lié à la nature unique du panneau. * +* * +* Remarques : - * +* * +******************************************************************************/ - result->dock_at_startup = startup; - result->path = strdup(path); +PanelItemPersonality gtk_panel_item_class_get_personality_singleton(const GPanelItemClass *class) +{ + PanelItemPersonality result; /* Personnalité à retourner */ + + result = PIP_SINGLETON; return result; @@ -280,23 +291,37 @@ GPanelItem *g_panel_item_new(PanelItemPersonality personality, GNamedWidget *wid /****************************************************************************** * * -* Paramètres : item = instance de panneau à consulter. * +* Paramètres : class = classe à consulter. * * * -* Description : Indique le composant graphique principal du panneau. * +* Description : Fournit une indication d'accroche du panneau au démarrage. * * * -* Retour : Composant graphique avec nom constituant le panneau. * +* Retour : true si le panneau doit être affiché de prime abord. * * * * Remarques : - * * * ******************************************************************************/ -GNamedWidget *gtk_panel_item_get_named_widget(const GPanelItem *item) +bool gtk_panel_item_class_dock_at_startup(const GPanelItemClass *class) { - GNamedWidget *result; /* Composant nommé à retourner */ + bool result; /* Statut à retourner */ + GGenConfig *config; /* Configuration courante */ + char *key; /* Clef d'accès à un paramètre */ +#ifndef NDEBUG + bool status; /* Bilan de consultation */ +#endif - result = item->widget; + config = get_main_configuration(); - g_object_ref(G_OBJECT(result)); + key = gtk_panel_item_class_build_configuration_key(class, "dock_at_startup"); + +#ifndef NDEBUG + status = g_generic_config_get_value(config, key, &result); + assert(status); +#else + g_generic_config_get_value(config, key, &result); +#endif + + free(key); return result; @@ -305,21 +330,21 @@ GNamedWidget *gtk_panel_item_get_named_widget(const GPanelItem *item) /****************************************************************************** * * -* Paramètres : item = instance GTK dont l'interface est à consulter. * +* Paramètres : class = classe associée à la consultation. * * * -* Description : Fournit le nom court du composant encapsulable. * +* Description : Renvoie false lors d'une consultation de la classe. * * * -* Retour : Désignation humaine pour titre d'onglet ou de fenêtre. * +* Retour : false. * * * * Remarques : - * * * ******************************************************************************/ -static char *gtk_panel_item_get_name(const GPanelItem *item) +bool gtk_panel_item_class_return_false(const GPanelItemClass *class) { - char *result; /* Désignation à retourner */ + bool result; /* Statut à retourner */ - result = g_named_widget_get_name(G_NAMED_WIDGET(item->widget), false); + result = false; return result; @@ -328,21 +353,21 @@ static char *gtk_panel_item_get_name(const GPanelItem *item) /****************************************************************************** * * -* Paramètres : item = instance GTK dont l'interface est à consulter. * +* Paramètres : class = classe associée à la consultation. * * * -* Description : Fournit le nom long du composant encapsulable. * +* Description : Renvoie true lors d'une consultation de la classe. * * * -* Retour : Désignation humaine pour titre d'onglet ou de fenêtre. * +* Retour : true. * * * * Remarques : - * * * ******************************************************************************/ -static char *gtk_panel_item_get_desc(const GPanelItem *item) +bool gtk_panel_item_class_return_true(const GPanelItemClass *class) { - char *result; /* Description à retourner */ + bool result; /* Statut à retourner */ - result = g_named_widget_get_name(G_NAMED_WIDGET(item->widget), true); + result = true; return result; @@ -351,7 +376,7 @@ static char *gtk_panel_item_get_desc(const GPanelItem *item) /****************************************************************************** * * -* Paramètres : item = instance GTK dont l'interface est à consulter. * +* Paramètres : class = classe à consulter. * * * * Description : Détermine si un panneau peut être filtré. * * * @@ -361,14 +386,11 @@ static char *gtk_panel_item_get_desc(const GPanelItem *item) * * ******************************************************************************/ -static bool gtk_panel_item_can_search(const GPanelItem *item) +bool gtk_panel_item_class_can_search(const GPanelItemClass *class) { - bool result; /* Indication à retourner */ - GPanelItemClass *class; /* Classe de l'élément visé */ + bool result; /* Statut à retourner */ - class = G_PANEL_ITEM_GET_CLASS(item); - - result = class->can_search; + result = class->can_search(class); return result; @@ -377,26 +399,40 @@ static bool gtk_panel_item_can_search(const GPanelItem *item) /****************************************************************************** * * -* Paramètres : item = instance GTK dont l'interface est à consulter. * +* Paramètres : class = classe à consulter. * * * -* Description : Fournit le composant graphique intégrable dans un ensemble. * +* Description : Indique le chemin initial de la localisation d'un panneau. * * * -* Retour : Composant graphique prêt à emploi. * +* Retour : Chemin fixé associé à la position initiale. * * * * Remarques : - * * * ******************************************************************************/ -static GtkWidget *gtk_panel_item_get_widget(GPanelItem *item) +char *gtk_panel_item_class_get_path(const GPanelItemClass *class) { - GtkWidget *result; /* Composant à retourner */ + char *result; /* Emplacement à retourner */ + GGenConfig *config; /* Configuration courante */ + char *key; /* Clef d'accès à un paramètre */ + const char *path; /* Nouveau chemin de placement */ +#ifndef NDEBUG + bool status; /* Statut de l'encapsulation */ +#endif - if (item->cached_widget == NULL) - item->cached_widget = g_named_widget_get_widget(G_NAMED_WIDGET(item->widget)); + config = get_main_configuration(); - result = item->cached_widget; + key = gtk_panel_item_class_build_configuration_key(class, "path"); - g_object_ref(G_OBJECT(result)); +#ifndef NDEBUG + status = g_generic_config_get_value(config, key, &path); + assert(status); +#else + g_generic_config_get_value(config, key, &path); +#endif + + free(key); + + result = strdup(path); return result; @@ -405,33 +441,34 @@ static GtkWidget *gtk_panel_item_get_widget(GPanelItem *item) /****************************************************************************** * * -* Paramètres : item = instance GTK dont l'interface est à sollicitée. * +* Paramètres : class = classe à consulter. * * * -* Description : Démarre l'actualisation du filtrage du contenu. * +* Description : Indique la définition d'un éventuel raccourci clavier. * * * -* Retour : - * +* Retour : Description d'un raccourci ou NULL si aucun de défini. * * * * Remarques : - * * * ******************************************************************************/ -static void gtk_panel_item_update_filtered(GPanelItem *item, const char *filter) +char *gtk_panel_item_class_get_key_bindings(const GPanelItemClass *class) { - assert(gtk_panel_item_can_search(item)); + char *result; /* Emplacement à retourner */ - if (item->filter != NULL) - free(item->filter); + if (class->get_bindings != NULL) + result = class->get_bindings(class); - item->filter = (filter ? strdup(filter) : NULL); + else + result = NULL; - G_PANEL_ITEM_GET_CLASS(item)->update_filtered(item); + return result; } /****************************************************************************** * * -* Paramètres : item = instance GTK à consulter. * +* Paramètres : class = classe du type de panneau à traiter. * * attrib = élément de configuration à inclure dans le résultat.* * * * Description : Construit la chaîne d'accès à un élément de configuration. * @@ -442,12 +479,12 @@ static void gtk_panel_item_update_filtered(GPanelItem *item, const char *filter) * * ******************************************************************************/ -static char *gtk_panel_item_build_configuration_key(const GPanelItem *item, const char *attrib) +static char *gtk_panel_item_class_build_configuration_key(const GPanelItemClass *class, const char *attrib) { char *result; /* Construction à renvoyer */ const char *name; /* Nom court du panneau */ - name = g_editor_item_get_key(G_EDITOR_ITEM(item)); + name = g_editor_item_class_get_key(G_EDITOR_ITEM_CLASS(class)); asprintf(&result, "gui.panels.%s.%s", attrib, name); @@ -462,10 +499,10 @@ static char *gtk_panel_item_build_configuration_key(const GPanelItem *item, cons /****************************************************************************** * * -* Paramètres : item = instance GTK à consulter. * +* Paramètres : class = classe de panneau à consulter. * * config = configuration à compléter. * * * -* Description : Met en place les bases de la configuration du panneau. * +* Description : Met en place les bases de la configuration d'un panneau. * * * * Retour : Bilan de l'opération. * * * @@ -473,33 +510,42 @@ static char *gtk_panel_item_build_configuration_key(const GPanelItem *item, cons * * ******************************************************************************/ -bool gtk_panel_item_setup_configuration(const GPanelItem *item, GGenConfig *config) +bool gtk_panel_item_class_setup_configuration(const GPanelItemClass *class, GGenConfig *config) { bool result; /* Bilan à retourner */ char *key; /* Clef d'accès à un paramètre */ + bool dock_at_startup; /* Affichage dès le départ ? */ GCfgParam *param; /* Paramètre chargé */ + char *path; /* Localisation du panneau */ result = true; - key = gtk_panel_item_build_configuration_key(item, "dock_at_startup"); + key = gtk_panel_item_class_build_configuration_key(class, "dock_at_startup"); + + dock_at_startup = class->dock_at_startup(class); - param = g_generic_config_create_param(config, key, CPT_BOOLEAN, item->dock_at_startup); + param = g_generic_config_create_param_if_not_exist(config, key, CPT_BOOLEAN, dock_at_startup); + + free(key); if (param == NULL) { result = false; - goto gpisc_exit; + goto exit; } - free(key); + key = gtk_panel_item_class_build_configuration_key(class, "path"); + + path = class->get_path(class); - key = gtk_panel_item_build_configuration_key(item, "path"); + param = g_generic_config_create_param_if_not_exist(config, key, CPT_STRING, path); - param = g_generic_config_create_param(config, key, CPT_STRING, item->path); if (param == NULL) result = false; - gpisc_exit: + free(path); + + exit: free(key); @@ -510,116 +556,160 @@ bool gtk_panel_item_setup_configuration(const GPanelItem *item, GGenConfig *conf /****************************************************************************** * * -* Paramètres : item = instance GTK à consulter. * -* config = configuration à charger. * +* Paramètres : type = type de panneau à mettre en place. * +* path = emplacement d'affichage ou NULL. * * * -* Description : Charge un panneau sur les bases de la configuration fournie. * +* Description : Crée un élément de panneau réactif. * * * -* Retour : true, par conformité avec browse_all_item_panels(). * +* Retour : Adresse de la structure mise en place. * * * * Remarques : - * * * ******************************************************************************/ -bool gtk_panel_item_apply_configuration(GPanelItem *item, GGenConfig *config) +GPanelItem *g_panel_item_new(GType type, const char *path) { - char *key; /* Clef d'accès à un paramètre */ - const char *new_path; /* Nouveau chemin de placement */ - bool status; /* Statut de l'encapsulation */ + GPanelItem *result; /* Structure à retourner */ + GPanelItemClass *class; /* Classe associée au type */ + PanelItemPersonality personality; /* Caractéristique de panneau */ + GtkTiledGrid *grid; /* Composant d'affichage */ + + class = g_type_class_ref(type); - key = gtk_panel_item_build_configuration_key(item, "path"); + personality = gtk_panel_item_class_get_personality(class); + assert(path != NULL || personality == PIP_PERSISTENT_SINGLETON); - if (g_generic_config_get_value(config, key, &new_path)) + g_type_class_unref(class); + + if (personality == PIP_PERSISTENT_SINGLETON || personality == PIP_SINGLETON) { - free(item->path); + result = G_PANEL_ITEM(find_editor_item_by_type(type)); - item->path = strdup(new_path); + if (result != NULL) + goto singleton; } - free(key); + result = create_object_from_type(type); - key = gtk_panel_item_build_configuration_key(item, "dock_at_startup"); + grid = get_tiled_grid(); - if (g_generic_config_get_value(config, key, &status)) + g_signal_connect_swapped(result, "dock-request", G_CALLBACK(gtk_tiled_grid_add), grid); + g_signal_connect_swapped(result, "undock-request", G_CALLBACK(gtk_tiled_grid_remove), grid); + + gtk_dockable_setup_dnd(GTK_DOCKABLE(result)); + + register_editor_item(G_EDITOR_ITEM(result)); + + singleton: + + if (path != NULL) { - item->dock_at_startup = status; + if (path[0] != '\0') + gtk_panel_item_set_path(result, path); - if (item->dock_at_startup) - g_signal_emit_by_name(item, "dock-request"); + g_panel_item_dock(result); } - free(key); - - return true; + return result; } /****************************************************************************** * * -* Paramètres : item = instance GTK à consulter. * +* Paramètres : item = instance de panneau à consulter. * * * -* Description : Fournit une indication sur la personnalité du panneau. * +* Description : Indique le composant graphique principal du panneau. * * * -* Retour : Identifiant lié à la nature du panneau. * +* Retour : Composant graphique avec nom constituant le panneau. * * * * Remarques : - * * * ******************************************************************************/ -PanelItemPersonality gtk_panel_item_get_personality(const GPanelItem *item) +GNamedWidget *gtk_panel_item_get_named_widget(const GPanelItem *item) { - return item->personality; + GNamedWidget *result; /* Composant nommé à retourner */ + + result = item->widget; + + g_object_ref(G_OBJECT(result)); + + return result; } /****************************************************************************** * * -* Paramètres : item = instance GTK à consulter. * +* Paramètres : item = instance GTK dont l'interface est à consulter. * * * -* Description : Fournit le chemin d'accès à utiliser pour les encapsulations.* +* Description : Fournit le nom court du composant encapsulable. * * * -* Retour : Chemin d'accès défini. * +* Retour : Désignation humaine pour titre d'onglet ou de fenêtre. * * * * Remarques : - * * * ******************************************************************************/ -const char *gtk_panel_item_get_path(const GPanelItem *item) +static char *gtk_panel_item_get_name(const GPanelItem *item) { - return item->path; + char *result; /* Désignation à retourner */ + + result = g_named_widget_get_name(G_NAMED_WIDGET(item->widget), false); + + return result; } + /****************************************************************************** * * -* Paramètres : item = instance GTK à consulter. * -* path = nouvelle emplacement d'inclusion. * +* Paramètres : item = instance GTK dont l'interface est à consulter. * * * -* Description : Définit le chemin d'accès à utiliser pour les encapsulations.* +* Description : Fournit le nom long du composant encapsulable. * * * -* Retour : - * +* Retour : Désignation humaine pour titre d'onglet ou de fenêtre. * * * * Remarques : - * * * ******************************************************************************/ -void gtk_panel_item_set_path(GPanelItem *item, const char *path) +static char *gtk_panel_item_get_desc(const GPanelItem *item) { - char *key; /* Clef d'accès à un paramètre */ + char *result; /* Description à retourner */ - free(item->path); + result = g_named_widget_get_name(G_NAMED_WIDGET(item->widget), true); - item->path = strdup(path); + return result; - key = gtk_panel_item_build_configuration_key(item, "path"); +} - g_generic_config_set_value(get_main_configuration(), key, item->path); - free(key); +/****************************************************************************** +* * +* Paramètres : item = instance GTK dont l'interface est à consulter. * +* * +* Description : Détermine si un panneau peut être filtré. * +* * +* Retour : Bilan de la consultation. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static bool gtk_panel_item_can_search(const GPanelItem *item) +{ + bool result; /* Indication à retourner */ + GPanelItemClass *class; /* Classe de l'élément visé */ + + class = G_PANEL_ITEM_GET_CLASS(item); + + result = gtk_panel_item_class_can_search(class); + + return result; } @@ -628,17 +718,81 @@ void gtk_panel_item_set_path(GPanelItem *item, const char *path) * * * Paramètres : item = instance GTK dont l'interface est à consulter. * * * -* Description : Indique la définition d'un éventuel raccourci clavier. * +* Description : Fournit le composant graphique intégrable dans un ensemble. * * * -* Retour : Description d'un raccourci ou NULL si aucun de défini. * +* Retour : Composant graphique prêt à emploi. * * * * Remarques : - * * * ******************************************************************************/ -const char *gtk_panel_item_get_key_bindings(const GPanelItem *item) +static GtkWidget *gtk_panel_item_get_widget(GPanelItem *item) { - return G_PANEL_ITEM_GET_CLASS(item)->bindings; + GtkWidget *result; /* Composant à retourner */ + + if (item->cached_widget == NULL) + item->cached_widget = g_named_widget_get_widget(G_NAMED_WIDGET(item->widget)); + + result = item->cached_widget; + + g_object_ref(G_OBJECT(result)); + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : item = instance GTK dont l'interface est à sollicitée. * +* * +* Description : Démarre l'actualisation du filtrage du contenu. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void gtk_panel_item_update_filtered(GPanelItem *item, const char *filter) +{ + assert(gtk_panel_item_can_search(item)); + + if (item->filter != NULL) + free(item->filter); + + item->filter = (filter ? strdup(filter) : NULL); + + G_PANEL_ITEM_GET_CLASS(item)->update_filtered(item); + +} + + +/****************************************************************************** +* * +* Paramètres : item = instance GTK à consulter. * +* path = nouvelle emplacement d'inclusion. * +* * +* Description : Définit le chemin d'accès à utiliser pour les encapsulations.* +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void gtk_panel_item_set_path(GPanelItem *item, const char *path) +{ + GGenConfig *config; /* Configuration courante */ + char *key; /* Clef d'accès à un paramètre */ + + config = get_main_configuration(); + + key = gtk_panel_item_class_build_configuration_key(G_PANEL_ITEM_GET_CLASS(item), "path"); + + g_generic_config_set_value(config, key, path); + + free(key); } @@ -680,16 +834,15 @@ void g_panel_item_dock(GPanelItem *item) * * ******************************************************************************/ -void g_panel_item_set_dock_status(GPanelItem *item, bool status) +void g_panel_item_set_dock_at_startup(GPanelItem *item, bool status) { char *key; /* Clef d'accès à un paramètre */ item->docked = status; - item->dock_at_startup = status; - key = gtk_panel_item_build_configuration_key(item, "dock_at_startup"); + key = gtk_panel_item_class_build_configuration_key(G_PANEL_ITEM_GET_CLASS(item), "dock_at_startup"); - g_generic_config_set_value(get_main_configuration(), key, item->dock_at_startup); + g_generic_config_set_value(get_main_configuration(), key, status); free(key); @@ -710,7 +863,11 @@ void g_panel_item_set_dock_status(GPanelItem *item, bool status) bool g_panel_item_is_docked(const GPanelItem *item) { - return item->docked; + bool result; /* Status à retourner */ + + result = item->docked; + + return result; } @@ -729,6 +886,8 @@ bool g_panel_item_is_docked(const GPanelItem *item) void g_panel_item_undock(GPanelItem *item) { + PanelItemPersonality personality; /* Caractéristique de panneau */ + assert(item->docked); g_signal_emit_by_name(item, "undock-request"); @@ -736,6 +895,11 @@ void g_panel_item_undock(GPanelItem *item) if (G_PANEL_ITEM_GET_CLASS(item)->ack_undock != NULL) G_PANEL_ITEM_GET_CLASS(item)->ack_undock(item); + personality = gtk_panel_item_class_get_personality(G_PANEL_ITEM_GET_CLASS(item)); + + if (personality != PIP_PERSISTENT_SINGLETON) + unregister_editor_item(G_EDITOR_ITEM(item)); + } |