summaryrefslogtreecommitdiff
path: root/src/gui/menus
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2016-02-10 20:16:25 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2016-02-10 20:16:25 (GMT)
commit61b7967d5031e0724ac8d02694ff58505818a5a0 (patch)
tree4b9ea233e61ee9e688fd29e93a8061732a755e6e /src/gui/menus
parentabc912f8500312c888832ff521d3dd17d8b2c613 (diff)
Refreshed all menu accesses in a better way.
Diffstat (limited to 'src/gui/menus')
-rw-r--r--src/gui/menus/edition.c17
-rw-r--r--src/gui/menus/edition.h4
-rw-r--r--src/gui/menus/menubar.c106
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);
}