diff options
Diffstat (limited to 'src/gui/editor.c')
-rw-r--r-- | src/gui/editor.c | 825 |
1 files changed, 21 insertions, 804 deletions
diff --git a/src/gui/editor.c b/src/gui/editor.c index faf98a4..b4e13b0 100644 --- a/src/gui/editor.c +++ b/src/gui/editor.c @@ -42,8 +42,6 @@ #include "core/panels.h" #include "core/global.h" #include "core/items.h" -#include "panels/panel.h" -#include "panels/welcome.h" #include "tb/portions.h" #include "../common/extstr.h" #include "../core/global.h" @@ -53,6 +51,7 @@ #include "../gtkext/gtkdisplaypanel.h" #include "../gtkext/gtkdockable.h" #include "../gtkext/gtkdockstation.h" +#include "../gtkext/tiledgrid.h" #include "../gtkext/support.h" @@ -90,11 +89,6 @@ static gboolean on_key_event(GtkWidget *, GdkEventKey *, GObject *); - - - - - /* ------------------------ INTEGRATION DE LA BARRE D'OUTILS ------------------------ */ @@ -103,94 +97,11 @@ static GtkWidget *build_editor_toolbar(GObject *); - - -/* -------------------- MECANISMES DE (DE)PLACEMENT DES PANNEAUX -------------------- */ - - -/* Elément de la hiérarchie des panneaux */ -typedef struct _panel_node -{ - struct _panel_node *parent; /* Noeud parent */ - - char *path; /* Chemin du nom courant */ - - union - { - GtkWidget *widget; /* Accès généraliste */ - GtkWidget *station; /* Station d'accueil simple */ - GtkWidget *paned; /* Station d'accueil composée */ - - }; - - union - { - /* Version simple */ - /* ... */ - - /* Version composée */ - struct - { - struct _panel_node *first; /* Premier sous élément */ - struct _panel_node *second; /* Second sous élément */ - }; - - }; - -} panel_node; - - -#define IS_SIMPLE_NODE(nd) \ - ({ \ - bool __result; \ - __result = GTK_IS_DOCK_STATION(nd->station); \ - assert(__result || GTK_IS_PANED(nd->paned)); \ - __result; \ - }) - - -/* Support de fond pour les composants. */ -static GtkWidget *_support = NULL; -static panel_node *_nodes = NULL; - - -/* Crée un nouveau noeud pour un panneau particulier. */ -static panel_node *create_simple_panel_node_for_item(GPanelItem *, const char *); - -/* Prépare une nouvelle sous-division pour deux panneaux. */ -static void switch_panel_node_into_paned(panel_node *, bool, bool); - -/* Met en place un nouveau noeud dans une division. */ -static void attach_panel_node_to_paned(panel_node *, panel_node *, bool); - -/* Met à jour en cascade les chemins d'accès aux noeuds. */ -static void update_path_of_paned_nodes(panel_node *, const char *, const char *); - -/* Détermine la plus grande longueur commune entre éléments. */ -static size_t compute_path_common_length(const panel_node *, const char *); - -/* Place au bon endroit un panneau donné. */ -static panel_node *insert_item_as_panel_node(GPanelItem *, panel_node *, const char *, size_t); - -/* Tente de mettre la main sur une station d'accueil. */ -static panel_node *find_node_for_station(panel_node *, GtkWidget *); - -/* Tente de mettre la main sur un panneau de division graphique. */ -static panel_node *find_node_for_paned(panel_node *, GtkWidget *); - -/* Efface de l'organisation un noeud donné en place. */ -static void delete_panel_node(panel_node *); - - - /* ------------------- INTERACTIONS GRAPHIQUES LIEES AUX PANNEAUX ------------------- */ -/* Réagit à une demande de placement d'un panneau d'affichage. */ -void on_panel_item_dock_request(GPanelItem *, gpointer); - -/* Réagit à une demande de suppression d'un panneau d'affichage. */ -void on_panel_item_undock_request(GPanelItem *, gpointer); +/* Réagit à la mise en place d'une nouvelle station d'accueil. */ +static void on_dock_station_created(GtkTiledGrid *, GtkDockStation *, gpointer); /* Réagit au changement d'onglet d'un panneau quelconque. */ static void on_dock_item_switch(GtkDockStation *, GtkWidget *, gpointer); @@ -204,9 +115,6 @@ static void on_dock_menu_request(GtkDockStation *, GtkWidget *, gpointer); /* Réagit à une demande de fermeture du panneau courant. */ static void on_dock_close_request(GtkDockStation *, GtkWidget *, gpointer); -/* Réagit à une variation dans une séparation de panneaux. */ -static void notify_paned_handle_position_change(GObject *, GParamSpec *, gpointer); - /* ------------------------- INTEGRATION ET SUIVI DE PROJET ------------------------- */ @@ -288,6 +196,7 @@ GtkWidget *create_editor(void) GtkWidget *menuboard; /* Barre de menus principale */ GtkWidget *toolbar; /* Barre d'outils */ + GtkWidget *grid; /* Affichage en tuiles */ GtkWidget *vbox1; @@ -347,29 +256,26 @@ GtkWidget *create_editor(void) menuboard = g_editor_item_get_widget(editem); gtk_box_pack_start(GTK_BOX(vbox1), menuboard, FALSE, FALSE, 0); + g_object_set_data(ref, "menubar", editem); g_object_set_data(ref, "menuboard", menuboard); gtk_widget_hide(menuboard); - /* Barre d'outils */ toolbar = build_editor_toolbar(ref); gtk_box_pack_start(GTK_BOX(vbox1), toolbar, FALSE, FALSE, 0); - do - { - _support = gtk_event_box_new(); - gtk_widget_show(_support); - - //_support = init_panels2(G_CALLBACK(on_dock_item_switch), ref); - gtk_box_pack_start(GTK_BOX(vbox1), _support, TRUE, TRUE, 0); - + /* Coeur de la fenêtre principale */ - } while(0); + grid = gtk_tiled_grid_new(); + gtk_widget_show(grid); + set_tiled_grid(GTK_TILED_GRID(grid)); + g_signal_connect(grid, "station-created", G_CALLBACK(on_dock_station_created), NULL); + gtk_box_pack_start(GTK_BOX(vbox1), grid, TRUE, TRUE, 0); /* Barre de statut générale */ @@ -487,6 +393,8 @@ static void on_destroy_editor(GtkWidget *widget, GObject *ref) { /* Fermeture propre */ + gtk_tiled_grid_save_positions(get_tiled_grid(), get_main_configuration()); + /* ... */ on_focus_out(widget, NULL, ref); @@ -676,694 +584,39 @@ static GtkWidget *build_editor_toolbar(GObject *ref) gtk_widget_show(result); g_object_set_data(ref, "toolbar", result); - item = create_portions_tb_item(ref); register_editor_item(item); - return result; } - - - - - - - - - - - - - - - /* ---------------------------------------------------------------------------------- */ -/* MECANISMES DE (DE)PLACEMENT DES PANNEAUX */ +/* INTERACTIONS GRAPHIQUES LIEES AUX PANNEAUX */ /* ---------------------------------------------------------------------------------- */ /****************************************************************************** * * -* Paramètres : item = composant à présenter à l'affichage. * -* path = partie du chemin représentée ici. * +* Paramètres : grid = composant d'affichage en tuiles concerné. * +* station = nouvelle station créée. * +* unused = adresse non utilisée ici. * * * -* Description : Crée un nouveau noeud pour un panneau particulier. * +* Description : Réagit à la mise en place d'une nouvelle station d'accueil. * * * -* Retour : Structure d'accueil mise en place. * +* Retour : - * * * * Remarques : - * * * ******************************************************************************/ -static panel_node *create_simple_panel_node_for_item(GPanelItem *item, const char *path) +static void on_dock_station_created(GtkTiledGrid *grid, GtkDockStation *station, gpointer unused) { - panel_node *result; /* Structure à retourner */ - GtkWidget *station; /* Premier support concentré */ - - /* Partie graphique */ - - station = gtk_dock_station_new(); g_signal_connect(station, "switch-widget", G_CALLBACK(on_dock_item_switch), NULL); g_signal_connect(station, "menu-requested", G_CALLBACK(on_dock_menu_request), NULL); g_signal_connect(station, "close-requested", G_CALLBACK(on_dock_close_request), NULL); - gtk_widget_show(station); - - gtk_dock_station_add_dockable(GTK_DOCK_STATION(station), GTK_DOCKABLE(item)); - - /* Partie invisible */ - - result = (panel_node *)calloc(1, sizeof(panel_node)); - - result->station = station; - - result->path = strdup(path); - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : node = noeud à diviser. * -* horiz = indique le type d'orientation désiré. * -* first = indication sur l'emplacement à utiliser. * -* * -* Description : Prépare une nouvelle sous-division pour deux panneaux. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void switch_panel_node_into_paned(panel_node *node, bool horiz, bool first) -{ - GtkWidget *widget; /* Composant à traiter */ - panel_node *parent; /* Lien de parenté à conserver */ - panel_node *moved; /* Noeud descendu d'un étage */ - - /* Décroche graphiquement le support */ - - widget = node->widget; - - g_object_ref(G_OBJECT(widget)); - gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(widget)), widget); - - /* Descend l'élément actuel */ - - parent = node->parent; - - moved = (panel_node *)calloc(1, sizeof(panel_node)); - - memcpy(moved, node, sizeof(panel_node)); - - node->path = NULL; - - if (!IS_SIMPLE_NODE(moved)) - { - moved->first->parent = moved; - moved->second->parent = moved; - } - - /* Création du nouveau niveau intermédiaire */ - - if (horiz) - node->paned = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL); - else - node->paned = gtk_paned_new(GTK_ORIENTATION_VERTICAL); - - g_signal_connect(node->paned, "notify::position", G_CALLBACK(notify_paned_handle_position_change), NULL); - - gtk_widget_show(node->paned); - - if (parent == NULL) - attach_panel_node_to_paned(parent, node, true); - else - attach_panel_node_to_paned(parent, node, parent->first == node); - - /* Replace le composant d'origine */ - - attach_panel_node_to_paned(node, moved, first); - -} - - -/****************************************************************************** -* * -* Paramètres : parent = noeud d'accueil pour le nouveau noeud. * -* node = nouveau noeud à intégrer dans l'ensemble. * -* first = indication sur l'emplacement à utiliser. * -* * -* Description : Met en place un nouveau noeud dans une division. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void attach_panel_node_to_paned(panel_node *parent, panel_node *node, bool first) -{ - node->parent = parent; - - /* On se trouve à la racine... */ - - if (parent == NULL) - { - gtk_container_add(GTK_CONTAINER(_support), node->widget); - - update_path_of_paned_nodes(node, "", "R"); - - } - - else - { - /* Raccordement hiérarchique */ - - if (first) - parent->first = node; - else - parent->second = node; - - /* Raccordement graphique */ - - assert(!IS_SIMPLE_NODE(parent)); - - if (first) - gtk_paned_pack1(GTK_PANED(parent->paned), node->widget, TRUE, FALSE); - else - gtk_paned_pack2(GTK_PANED(parent->paned), node->widget, TRUE, FALSE); - - /* Mise à jour des chemins */ - - update_path_of_paned_nodes(node, parent->path, first ? "1" : "2"); - - } - -} - - -/****************************************************************************** -* * -* Paramètres : node = noeud dont le chemin est à mettre à jour. * -* root = chemin menant au niveau précédent. * -* sub = sous-chemin vers lequel l'orientation penche. * -* * -* Description : Met à jour en cascade les chemins d'accès aux noeuds. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void update_path_of_paned_nodes(panel_node *node, const char *root, const char *sub) -{ - GtkOrientation orientation; /* Orientation du support */ - char *key; /* Clef d'accès à un paramètre */ - gint position; /* Nouvelle position de barre */ - - if (!IS_SIMPLE_NODE(node)) - { - /* Reconstruction locale */ - - if (node->path != NULL) - free(node->path); - - node->path = strdup(root); - node->path = stradd(node->path, sub); - - orientation = gtk_orientable_get_orientation(GTK_ORIENTABLE(node->paned)); - - if (orientation == GTK_ORIENTATION_HORIZONTAL) - node->path = stradd(node->path, "h"); - else - node->path = stradd(node->path, "v"); - - /* Rechargement de la position ? */ - - asprintf(&key, "gui.panels.positions.%s", node->path); - - if (g_generic_config_get_value(get_main_configuration(), key, &position)) - gtk_paned_set_position(GTK_PANED(node->paned), position); - - free(key); - - /* Propagation de la mise à jour */ - - if (node->first) - update_path_of_paned_nodes(node->first, node->path, "1"); - - if (node->second != NULL) - update_path_of_paned_nodes(node->second, node->path, "2"); - - } - -} - - -/****************************************************************************** -* * -* Paramètres : node = noeud d'où lancer les recherches. * -* target = identifiant de la position visée. * -* * -* Description : Détermine la plus grande longueur commune entre éléments. * -* * -* Retour : Bilan de l'évaluation. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static size_t compute_path_common_length(const panel_node *node, const char *target) -{ - size_t result; /* Taille à retourner */ - size_t len; /* Longueur de comparaison */ - size_t common1; /* Tron common avec le côté #1 */ - size_t common2; /* Tron common avec le côté #2 */ - - if (IS_SIMPLE_NODE(node)) - { - len = MIN(strlen(node->path), strlen(target)); - - /** - * Il n'y a pas forcément de base commune entre deux branches, - * donc on parcourt les chemins depuis leur base respective. - */ - for (result = 0; result < len; result++) - if (node->path[result] != target[result]) - break; - - } - - else - { - common1 = compute_path_common_length(node->first, target); - common2 = compute_path_common_length(node->second, target); - - result = MAX(common1, common2); - - } - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : item = composant à présenter à l'affichage. * -* node = point d'insertion courant. * -* path = partie du chemin représentée ici. * -* consumed = profondeur du chemin utilisé. * -* * -* Description : Place au bon endroit un panneau donné. * -* * -* Retour : Noeud final inséré dans la liste. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static panel_node *insert_item_as_panel_node(GPanelItem *item, panel_node *node, const char *path, size_t consumed) -{ - panel_node *result; /* Noeud ultime à renvoyer */ - char div; /* Division demandée */ - bool horiz; /* Traduction en composant */ - bool first; /* Point d'insertion */ - size_t common1; /* Tron common avec le côté #1 */ - size_t common2; /* Tron common avec le côté #2 */ - - - fprintf(stderr, "=== INSERTING '%s' (%zu)... -> '%s'\n", path, consumed, - IS_SIMPLE_NODE(node) ? node->path : "-"); - - - - if (IS_SIMPLE_NODE(node)) - { - /* Le parcours s'arrête ici ! */ - if (strcmp(node->path, path) == 0) - { - gtk_dock_station_add_dockable(GTK_DOCK_STATION(node->station), GTK_DOCKABLE(item)); - result = node; - } - - /* On ne peut aller plus loin, on doit diviser... */ - else - { - div = toupper(path[consumed]); - first = (div == 'W' || div == 'N'); - horiz = (div == 'W' || div == 'E'); - - fprintf(stderr, "---%%<--- first=%d horiz=%d\n", first, horiz); - - fprintf(stderr, "--- cutting %p\n", node->station); - - switch_panel_node_into_paned(node, horiz, !first); - - result = create_simple_panel_node_for_item(item, path); - - attach_panel_node_to_paned(node, result, first); - - - fprintf(stderr, "1# [%p] widget = %p --- split :: %p // %p\n", - node, node->station, node->first, node->second); - - } - - } - - /* On regarde des autres côtés... */ - - else - { - common1 = compute_path_common_length(node->first, path); - common2 = compute_path_common_length(node->second, path); - - - - fprintf(stderr, " - L1 :: %zu <-> '%s'\n", common1, node->first->path); - fprintf(stderr, " - L2 :: %zu <-> '%s'\n", common2, node->second->path); - - - /* Si une descente est possible... */ - if (common1 > 0 || common2 > 0) - { - if (common1 > common2) - result = insert_item_as_panel_node(item, node->first, path, common1); - - else - result = insert_item_as_panel_node(item, node->second, path, common2); - - } - - /* Sinon, on doit diviser qqch... */ - else - { - div = toupper(path[consumed]); - first = (div == 'W' || div == 'N'); - horiz = (div == 'W' || div == 'E'); - - fprintf(stderr, "---%%<--- first=%d horiz=%d\n", first, horiz); - - switch_panel_node_into_paned(node, horiz, !first); - - result = create_simple_panel_node_for_item(item, path); - - attach_panel_node_to_paned(node, result, first); - - - fprintf(stderr, "2# [%p] split :: %p-%p // %p-%p\n", node, - node->first, node->first->widget, - node->second, node->second->widget); - - } - - } - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : node = point de départ des recherches locales. * -* station = composant graphique à retrouver. * -* * -* Description : Tente de mettre la main sur une station d'accueil. * -* * -* Retour : Eventuel noeud trouvé ou NULL. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static panel_node *find_node_for_station(panel_node *node, GtkWidget *station) -{ - panel_node *result; /* Bilan à remonter */ - - if (IS_SIMPLE_NODE(node)) - result = (node->station == station ? node : NULL); - - else - { - result = find_node_for_station(node->first, station); - - if (result == NULL) - result = find_node_for_station(node->second, station); - - } - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : node = point de départ des recherches locales. * -* paned = composant graphique à retrouver. * -* * -* Description : Tente de mettre la main sur un panneau de division graphique.* -* * -* Retour : Eventuel noeud trouvé ou NULL. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static panel_node *find_node_for_paned(panel_node *node, GtkWidget *paned) -{ - panel_node *result; /* Bilan à remonter */ - - if (IS_SIMPLE_NODE(node)) - result = NULL; - - else - { - if (node->paned == paned) - result = node; - - else - { - result = find_node_for_paned(node->first, paned); - - if (result == NULL) - result = find_node_for_paned(node->second, paned); - - } - - } - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : node = noeud à supprimer de l'arbre des noeuds. * -* * -* Description : Efface de l'organisation un noeud donné en place. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void delete_panel_node(panel_node *node) -{ - panel_node *parent; /* Noeud parent à transformer */ - GtkWidget *widget; /* Composant à traiter */ - panel_node *grandparent; /* Noeud supérieur au parent */ - panel_node *remaining; /* Noeud restant */ - - assert(IS_SIMPLE_NODE(node)); - - parent = node->parent; - - /* Destruction du noeud */ - - widget = node->station; - gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(widget)), widget); - - free(node->path); - - free(node); - - /* Suppression du niveau intermédiaire */ - - if (parent != NULL) - { - remaining = (node == parent->first ? parent->second : parent->first); - - /* Décroche graphiquement le support */ - - widget = remaining->widget; - - g_object_ref(G_OBJECT(widget)); - gtk_container_remove(GTK_CONTAINER(parent->paned), widget); - - /* Supprime le composant graphique intermédiaire */ - - gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(parent->paned)), parent->paned); - - /* Réinsère la partie restante */ - - grandparent = parent->parent; - - memcpy(parent, remaining, sizeof(panel_node)); - - if (!IS_SIMPLE_NODE(parent)) - { - parent->first->parent = parent; - parent->second->parent = parent; - } - - free(remaining); - - if (grandparent == NULL) - attach_panel_node_to_paned(grandparent, parent, true); - else - attach_panel_node_to_paned(grandparent, parent, grandparent->first == parent); - - } - -} - - - -/* ---------------------------------------------------------------------------------- */ -/* INTERACTIONS GRAPHIQUES LIEES AUX PANNEAUX */ -/* ---------------------------------------------------------------------------------- */ - - -/****************************************************************************** -* * -* Paramètres : panel = composant à placer dans l'affichage. * -* unused = adresse non utilisée ici. * -* * -* Description : Réagit à une demande de placement d'un panneau d'affichage. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void on_panel_item_dock_request(GPanelItem *panel, gpointer unused) -{ - const char *path; /* Chemin d'accès */ - panel_node *node; /* Noeud à supprimer */ - const char *name; /* Nom du dernier panneau */ - GPanelItem *welcome; /* Panneau d'accueil */ - - path = gtk_panel_item_get_path(panel); - - /* Tout est à faire... */ - if (_nodes == NULL) - { - _nodes = create_simple_panel_node_for_item(panel, path); - gtk_container_add(GTK_CONTAINER(_support), _nodes->widget); - } - else - { - node = insert_item_as_panel_node(panel, _nodes, path, 0); - - if (strncmp(node->path, "N", 1) == 0) - { - name = g_editor_item_get_name(G_EDITOR_ITEM(panel)); - - if (strcmp(name, PANEL_WELCOME_ID) != 0) - { - welcome = get_panel_item_by_name(PANEL_WELCOME_ID); - - if (!g_welcome_panel_get_user_origin(G_WELCOME_PANEL(welcome))) - { - /* Equivalent d'un appel "g_panel_item_undock(welcome)", avec effet immédiat */ - /////on_panel_item_undock_request(welcome, NULL); - } - - } - - } - - } - - g_panel_item_set_dock_status(panel, true); - -} - - -/****************************************************************************** -* * -* Paramètres : panel = composant à retirer de l'affichage. * -* unused = adresse non utilisée ici. * -* * -* Description : Réagit à une demande de suppression d'un panneau d'affichage.* -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void on_panel_item_undock_request(GPanelItem *panel, gpointer unused) -{ - GtkWidget *station; /* Support courant */ - GtkNotebook *notebook; /* Version parente de station */ - panel_node *node; /* Noeud à supprimer */ - bool allowed; /* Fermture permise ? */ - const char *name; /* Nom du dernier panneau */ - GPanelItem *welcome; /* Panneau d'accueil */ - - gtk_dockable_decompose(GTK_DOCKABLE(panel), &station); - - notebook = GTK_NOTEBOOK(station); - - node = find_node_for_station(_nodes, station); - assert(node != NULL); - - allowed = true; - - if (strcmp(node->path, "N") == 0 && gtk_notebook_get_n_pages(notebook) == 1) - { - name = g_editor_item_get_name(G_EDITOR_ITEM(panel)); - - if (strcmp(name, PANEL_WELCOME_ID) == 0) - allowed = false; - - else - { - welcome = get_panel_item_by_name(PANEL_WELCOME_ID); - g_welcome_panel_set_user_origin(G_WELCOME_PANEL(welcome), false); - - /* Equivalent d'un appel "g_panel_item_dock(welcome)", avec effet immédiat */ - on_panel_item_dock_request(welcome, NULL); - - } - - } - - if (allowed) - { - gtk_dock_station_remove_dockable(GTK_DOCK_STATION(station), GTK_DOCKABLE(panel)); - - if (gtk_notebook_get_n_pages(notebook) == 0) - delete_panel_node(node); - - g_panel_item_set_dock_status(panel, false); - - } } @@ -1558,42 +811,6 @@ static void on_dock_close_request(GtkDockStation *station, GtkWidget *button, gp } -/****************************************************************************** -* * -* Paramètres : obj = objet à l'origine de la procédure. * -* pspec = spécification de l'attribut qui a varié. * -* unused = adresse non utilisée ici. * -* * -* Description : Réagit à une variation dans une séparation de panneaux. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void notify_paned_handle_position_change(GObject *obj, GParamSpec *pspec, gpointer unused) -{ - GtkPaned *paned; /* Panneau concerné */ - panel_node *node; /* Noeud hiérarchique associé */ - gint position; /* Nouvelle position de barre */ - char *key; /* Clef d'accès à un paramètre */ - - paned = GTK_PANED(obj); - - node = find_node_for_paned(_nodes, GTK_WIDGET(paned)); - - position = gtk_paned_get_position(paned); - - asprintf(&key, "gui.panels.positions.%s", node->path); - - g_generic_config_create_or_udpdate_param(get_main_configuration(), key, CPT_INTEGER, position); - - free(key); - -} - - /* ---------------------------------------------------------------------------------- */ /* INTEGRATION ET SUIVI DE PROJET */ @@ -1671,7 +888,7 @@ void on_editor_loaded_content_added(GStudyProject *project, GLoadedContent *cont name = g_loaded_content_describe(content, false); lname = g_loaded_content_describe(content, true); - panel = g_panel_item_new(PIP_BINARY_VIEW, name, lname, selected, true, "N"); + panel = g_panel_item_new(PIP_BINARY_VIEW, name, lname, selected, true, "M"); register_panel_item(panel, get_main_configuration()); g_signal_connect(selected, "size-allocate", G_CALLBACK(scroll_for_the_first_time), content); |