diff options
Diffstat (limited to 'src/gui/menus')
-rw-r--r-- | src/gui/menus/edition.c | 17 | ||||
-rw-r--r-- | src/gui/menus/edition.h | 4 | ||||
-rw-r--r-- | src/gui/menus/menubar.c | 106 |
3 files changed, 53 insertions, 74 deletions
diff --git a/src/gui/menus/edition.c b/src/gui/menus/edition.c index 2cc22b2..99ade8c 100644 --- a/src/gui/menus/edition.c +++ b/src/gui/menus/edition.c @@ -229,9 +229,9 @@ GtkWidget *build_menu_edition(GObject *ref, GtkAccelGroup *accgroup, GMenuBar *b /****************************************************************************** * * -* Paramètres : bar = barre de menus à actualiser. * -* addr = nouvelle adresse du curseur courant. * -* info = barre de statut présentant les informations. * +* Paramètres : ref = espace de référencements à consulter. * +* vpanel = panneau d'affichage actif ou NULL si aucun. * +* addr = nouvelle adresse du curseur courant. * * * * Description : Met à jour les accès du menu "Edition" selon une position. * * * @@ -241,7 +241,7 @@ GtkWidget *build_menu_edition(GObject *ref, GtkAccelGroup *accgroup, GMenuBar *b * * ******************************************************************************/ -void update_access_in_menu_edition(GObject *ref, GtkBufferView *view, const vmpa2t *addr) +void update_access_in_menu_edition(GObject *ref, GtkViewPanel *vpanel, const vmpa2t *addr) { bool state; /* Etat principal à considérer */ gboolean access; /* Accès à déterminer */ @@ -252,14 +252,14 @@ void update_access_in_menu_edition(GObject *ref, GtkBufferView *view, const vmpa /* Préliminaire */ - if (view == NULL || addr == NULL) + if (vpanel == NULL || addr == NULL) { state = false; line = NULL; segment = NULL; } else - state = gtk_view_panel_get_position(GTK_VIEW_PANEL(view), &line, &segment); + state = gtk_view_panel_get_position(vpanel, &line, &segment); if (state) creator = g_buffer_segment_get_creator(segment); @@ -292,6 +292,11 @@ void update_access_in_menu_edition(GObject *ref, GtkBufferView *view, const vmpa item = GTK_WIDGET(g_object_get_data(ref, "mnu_edit_follow_ref")); gtk_widget_set_sensitive(item, access); + access = state; + + item = GTK_WIDGET(g_object_get_data(ref, "mnu_edit_list_xrefs")); + gtk_widget_set_sensitive(item, access); + /* Nettoyage et sortie finale */ if (creator != NULL) g_object_unref(G_OBJECT(creator)); diff --git a/src/gui/menus/edition.h b/src/gui/menus/edition.h index 82a48bd..8be50f8 100644 --- a/src/gui/menus/edition.h +++ b/src/gui/menus/edition.h @@ -30,7 +30,7 @@ #include "menubar.h" -#include "../../gtkext/gtkbufferview.h" +#include "../../gtkext/gtkviewpanel.h" @@ -38,7 +38,7 @@ GtkWidget *build_menu_edition(GObject *, GtkAccelGroup *, GMenuBar *); /* Met à jour les accès du menu "Edition" selon une position. */ -void update_access_in_menu_edition(GObject *, GtkBufferView *, const vmpa2t *); +void update_access_in_menu_edition(GObject *, GtkViewPanel *, const vmpa2t *); diff --git a/src/gui/menus/menubar.c b/src/gui/menus/menubar.c index cbb6ae2..db1905c 100644 --- a/src/gui/menus/menubar.c +++ b/src/gui/menus/menubar.c @@ -74,14 +74,14 @@ static void g_menu_bar_dispose(GMenuBar *); /* Procède à la libération totale de la mémoire. */ static void g_menu_bar_finalize(GMenuBar *); -/* Lance une actualisation liée à une modification du cheptel. */ -static void manage_view_in_menu_bar(GMenuBar *, GtkViewPanel *, bool); - /* Lance une actualisation du fait d'un changement de vue. */ static void update_menu_bar_for_view(GMenuBar *, GtkViewPanel *); +/* Réagit à un changement de focus des panneaux d'affichage. */ +static void notify_focus_change_for_menu_bar(GMenuBar *, GtkViewPanel *); + /* Met à jour les accès aux menus en fonction de la position. */ -static void track_caret_address_for_menu_bar(GMenuBar *, GtkBufferView *, const vmpa2t *); +static void track_caret_address_for_menu_bar(GMenuBar *, GtkViewPanel *, const vmpa2t *); /* Lance une actualisation relative à l'étendue du projet. */ static void update_menu_bar_for_project(GMenuBar *, GStudyProject *); @@ -116,8 +116,8 @@ static void g_menu_bar_class_init(GMenuBarClass *klass) editem = G_EDITOR_ITEM_CLASS(klass); - editem->manage_view = (manage_item_view_fc)manage_view_in_menu_bar; editem->update_view = (update_item_view_fc)update_menu_bar_for_view; + editem->notify_focus = (notify_focus_change_fc)notify_focus_change_for_menu_bar; editem->track_caret = (track_caret_in_view_fc)track_caret_address_for_menu_bar; editem->update_project = (update_project_fc)update_menu_bar_for_project; @@ -262,11 +262,10 @@ GEditorItem *g_menu_bar_new(GObject *ref, GtkAccelGroup *accgroup) /****************************************************************************** * * -* Paramètres : bar = barre de menus à actualiser. * -* view = nouveau panneau d'affichage nouveau. * -* created = fait état d'une création ou d'une destruction. * +* Paramètres : bar = barre de menus à actualiser. * +* view = nouveau panneau d'affichage actif. * * * -* Description : Lance une actualisation liée à une modification du cheptel. * +* Description : Lance une actualisation du fait d'un changement de vue. * * * * Retour : - * * * @@ -274,55 +273,9 @@ GEditorItem *g_menu_bar_new(GObject *ref, GtkAccelGroup *accgroup) * * ******************************************************************************/ -static void manage_view_in_menu_bar(GMenuBar *bar, GtkViewPanel *view, bool created) +static void update_menu_bar_for_view(GMenuBar *bar, GtkViewPanel *view) { - - gboolean view_got_focus(GtkWidget *widget, GtkDirectionType dir, GObject *ref) - { - GtkWidget *item; - - item = GTK_WIDGET(g_object_get_data(ref, "mnu_edit_follow_ref")); - - gtk_widget_set_sensitive(item, TRUE); - - item = GTK_WIDGET(g_object_get_data(ref, "mnu_edit_list_xrefs")); - - gtk_widget_set_sensitive(item, TRUE); - - return FALSE; - - } - - gboolean view_lost_focus(GtkWidget *widget, GtkDirectionType dir, GObject *ref) - { - GtkWidget *item; - - item = GTK_WIDGET(g_object_get_data(ref, "mnu_edit_follow_ref")); - - gtk_widget_set_sensitive(item, FALSE); - - item = GTK_WIDGET(g_object_get_data(ref, "mnu_edit_list_xrefs")); - - gtk_widget_set_sensitive(item, FALSE); - - return FALSE; - - } - - - if (created) - { - g_signal_connect(view, "focus-in-event", G_CALLBACK(view_got_focus), G_EDITOR_ITEM(bar)->ref); - g_signal_connect(view, "focus-out-event", G_CALLBACK(view_lost_focus), G_EDITOR_ITEM(bar)->ref); - } - else - { - g_signal_handlers_disconnect_by_func(view, G_CALLBACK(view_got_focus), G_EDITOR_ITEM(bar)->ref); - g_signal_handlers_disconnect_by_func(view, G_CALLBACK(view_lost_focus), G_EDITOR_ITEM(bar)->ref); - } - - - // update_menu_view_for_view(bar->view, view, bar); + update_menu_view_for_view(bar->view, view, bar); } @@ -330,9 +283,9 @@ static void manage_view_in_menu_bar(GMenuBar *bar, GtkViewPanel *view, bool crea /****************************************************************************** * * * Paramètres : bar = barre de menus à actualiser. * -* view = nouveau panneau d'affichage actif. * +* panel = composant d'affichage concerné par l'opération. * * * -* Description : Lance une actualisation du fait d'un changement de vue. * +* Description : Réagit à un changement de focus des panneaux d'affichage. * * * * Retour : - * * * @@ -340,18 +293,39 @@ static void manage_view_in_menu_bar(GMenuBar *bar, GtkViewPanel *view, bool crea * * ******************************************************************************/ -static void update_menu_bar_for_view(GMenuBar *bar, GtkViewPanel *view) +static void notify_focus_change_for_menu_bar(GMenuBar *bar, GtkViewPanel *panel) { - update_menu_view_for_view(bar->view, view, bar); + GBufferLine *line; /* Ligne de position courante */ + const mrange_t *range; /* Couverture en mémoire */ + const vmpa2t *addr; /* Position courante */ + GEditorItem *item; /* Autre version de l'élément */ + + if (panel != NULL && gtk_view_panel_get_position(panel, &line, NULL)) + { + range = g_buffer_line_get_range(line); + addr = get_mrange_addr(range); + } + else + { + line = NULL; + addr = NULL; + } + + item = G_EDITOR_ITEM(bar); + + update_access_in_menu_edition(item->ref, panel, addr); + + if (line != NULL) + g_object_unref(G_OBJECT(line)); } /****************************************************************************** * * -* Paramètres : bar = barre de menus à actualiser. * -* addr = nouvelle adresse du curseur courant. * -* info = barre de statut présentant les informations. * +* Paramètres : bar = barre de menus à actualiser. * +* vpanel = panneau d'affichage actif ou NULL si aucun. * +* addr = nouvelle adresse du curseur courant. * * * * Description : Met à jour les accès aux menus en fonction de la position. * * * @@ -361,13 +335,13 @@ static void update_menu_bar_for_view(GMenuBar *bar, GtkViewPanel *view) * * ******************************************************************************/ -static void track_caret_address_for_menu_bar(GMenuBar *bar, GtkBufferView *view, const vmpa2t *addr) +static void track_caret_address_for_menu_bar(GMenuBar *bar, GtkViewPanel *vpanel, const vmpa2t *addr) { GEditorItem *item; /* Autre version de l'élément */ item = G_EDITOR_ITEM(bar); - update_access_in_menu_edition(item->ref, view, addr); + update_access_in_menu_edition(item->ref, vpanel, addr); } |