diff options
Diffstat (limited to 'src/gui/menus/menubar.c')
-rw-r--r-- | src/gui/menus/menubar.c | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/gui/menus/menubar.c b/src/gui/menus/menubar.c index 77ff7cd..cc69e0d 100644 --- a/src/gui/menus/menubar.c +++ b/src/gui/menus/menubar.c @@ -72,6 +72,9 @@ 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 *); @@ -108,6 +111,7 @@ 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->update_project = (update_project_fc)update_menu_bar_for_project; @@ -247,6 +251,73 @@ 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. * +* * +* Description : Lance une actualisation liée à une modification du cheptel. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void manage_view_in_menu_bar(GMenuBar *bar, GtkViewPanel *view, bool created) +{ + + 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); + +} + + +/****************************************************************************** +* * * Paramètres : bar = barre de menus à actualiser. * * view = nouveau panneau d'affichage actif. * * * |