summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2014-06-04 22:44:21 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2014-06-04 22:44:21 (GMT)
commit11395d684736467fb010b93b0eaeefcc06bf0f5e (patch)
treed9f9e06d27f5b8721f308b6b4636cd043e4f7d20
parent83ba2204e700501023cb78dfd84978c611fe61b0 (diff)
Fixed bugs when dealing with views and updated the code for GTK3.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@378 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
-rw-r--r--ChangeLog15
-rw-r--r--src/gtkext/gtkbufferview.c36
-rw-r--r--src/gtkext/gtkgraphview.c25
-rw-r--r--src/gtkext/gtkviewpanel-int.h8
-rw-r--r--src/gtkext/gtkviewpanel.c85
-rw-r--r--src/gui/menus/view.c14
-rw-r--r--src/gui/status.c7
7 files changed, 46 insertions, 144 deletions
diff --git a/ChangeLog b/ChangeLog
index c2ab5aa..83dcb63 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+14-06-05 Cyrille Bagard <nocbos@gmail.com>
+
+ * src/gtkext/gtkbufferview.c:
+ * src/gtkext/gtkgraphview.c:
+ * src/gtkext/gtkviewpanel.c:
+ * src/gtkext/gtkviewpanel-int.h:
+ Avoid to rely on the now deprecated set-scroll-adjustments signal.
+ Remove all the relative dead code.
+
+ * src/gui/menus/view.c:
+ Fix a bug when changing views: one level was missing in widgets stack.
+
+ * src/gui/status.c:
+ Clean the code.
+
14-06-04 Cyrille Bagard <nocbos@gmail.com>
* src/gtkext/gtkbufferview.c
diff --git a/src/gtkext/gtkbufferview.c b/src/gtkext/gtkbufferview.c
index 38fff5a..26f67c1 100644
--- a/src/gtkext/gtkbufferview.c
+++ b/src/gtkext/gtkbufferview.c
@@ -64,9 +64,6 @@ static gboolean gtk_buffer_view_key_press(GtkWidget *, GdkEventKey *);
/* Indique la position d'affichage d'une adresse donnée. */
static bool gtk_buffer_view_get_address_coordinates(const GtkBufferView *, vmpa_t, gint *, gint *);
-/* Réagit à un défilement quelconque. */
-static void gtk_buffer_view_scroll(GtkBufferView *);
-
/* Place en cache un rendu destiné à l'aperçu graphique rapide. */
static void gtk_buffer_view_cache_glance(GtkBufferView *, cairo_t *, const GtkAllocation *, double);
@@ -148,7 +145,6 @@ static void gtk_buffer_view_init(GtkBufferView *view)
viewpanel = GTK_VIEW_PANEL(view);
viewpanel->get_coordinates = (get_addr_coordinates_fc)gtk_buffer_view_get_address_coordinates;
- viewpanel->scroll = (scroll_fc)gtk_buffer_view_scroll;
viewpanel->cache_glance = (cache_glance_fc)gtk_buffer_view_cache_glance;
view->caret.x = 10;
@@ -598,25 +594,6 @@ static bool gtk_buffer_view_get_address_coordinates(const GtkBufferView *view, v
/******************************************************************************
* *
-* Paramètres : view = composant GTK à mettre à jour. *
-* *
-* Description : Réagit à un défilement quelconque. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void gtk_buffer_view_scroll(GtkBufferView *view)
-{
- gtk_widget_queue_draw(GTK_WIDGET(view));
-
-}
-
-
-/******************************************************************************
-* *
* Paramètres : view = composant GTK à manipuler. *
* cairo = assistant pour la création de rendus. *
* area = taille de la surface réduite à disposition. *
@@ -799,11 +776,24 @@ static void restart_caret_blinking(GtkBufferView *view)
static gboolean gtk_buffer_view_refresh_caret(GtkBufferView *view)
{
GtkWidget *widget; /* Autre version du composant */
+ GdkWindow *window; /* Fenêtre de support associée */
GdkRectangle area; /* Région adaptée à traiter */
cairo_t *cr; /* Contexte graphique */
GdkRGBA *color; /* Couleur du curseur */
widget = GTK_WIDGET(view);
+ window = gtk_widget_get_window(widget);
+
+ /**
+ * Si le composant n'est pas encore réalisé (ou caché, en cas de
+ * basculement entre les types de vues), gdk_cairo_create() ne va
+ * pas apprécier l'argument NULL. Donc on écourte l'opération.
+ */
+ if (window == NULL)
+ {
+ view->show_caret = !view->show_caret;
+ return TRUE;
+ }
area = view->caret;
gtk_buffer_view_compute_relative_coords(view, &area.x, &area.y);
diff --git a/src/gtkext/gtkgraphview.c b/src/gtkext/gtkgraphview.c
index 530de74..3b4fb78 100644
--- a/src/gtkext/gtkgraphview.c
+++ b/src/gtkext/gtkgraphview.c
@@ -90,9 +90,6 @@ static void gtk_graph_view_prepare_resize(GtkGraphView *);
/* Indique la position d'affichage d'une adresse donnée. */
static bool gtk_graph_view_get_address_coordinates(const GtkGraphView *, vmpa_t, gint *, gint *);
-/* Réagit à un défilement quelconque. */
-static void gtk_graph_view_scroll(GtkGraphView *);
-
/* Place en cache un rendu destiné à l'aperçu graphique rapide. */
static void gtk_graph_view_cache_glance(GtkGraphView *, cairo_t *, const GtkAllocation *, double);
@@ -158,7 +155,6 @@ static void gtk_graph_view_init(GtkGraphView *view)
viewpanel->define = (define_address_fc)gtk_graph_view_define_main_address;
viewpanel->resize = (prepare_resize_fc)gtk_graph_view_prepare_resize;
viewpanel->get_coordinates = (get_addr_coordinates_fc)gtk_graph_view_get_address_coordinates;
- viewpanel->scroll = (scroll_fc)gtk_graph_view_scroll;
viewpanel->cache_glance = (cache_glance_fc)gtk_graph_view_cache_glance;
//binview = GTK_BIN_VIEW(view);
@@ -523,27 +519,6 @@ static bool gtk_graph_view_get_address_coordinates(const GtkGraphView *view, vmp
/******************************************************************************
* *
-* Paramètres : view = composant GTK à mettre à jour. *
-* *
-* Description : Réagit à un défilement quelconque. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void gtk_graph_view_scroll(GtkGraphView *view)
-{
- gtk_fixed_move(GTK_FIXED(view), GTK_WIDGET(view->support),
- -gtk_adjustment_get_value(GTK_VIEW_PANEL(view)->hadjustment),
- -gtk_adjustment_get_value(GTK_VIEW_PANEL(view)->vadjustment));
-
-}
-
-
-/******************************************************************************
-* *
* Paramètres : view = composant GTK à manipuler. *
* cairo = assistant pour la création de rendus. *
* area = taille de la surface réduite à disposition. *
diff --git a/src/gtkext/gtkviewpanel-int.h b/src/gtkext/gtkviewpanel-int.h
index 36d5050..63a6a5b 100644
--- a/src/gtkext/gtkviewpanel-int.h
+++ b/src/gtkext/gtkviewpanel-int.h
@@ -45,9 +45,6 @@ typedef void (* prepare_resize_fc) (GtkViewPanel *);
/* Indique la position d'affichage d'une adresse donnée. */
typedef bool (* get_addr_coordinates_fc) (const GtkViewPanel *, vmpa_t, gint *, gint *);
-/* Réagit à un défilement quelconque. */
-typedef void (* scroll_fc) (GtkViewPanel *);
-
/* Place en cache un rendu destiné à l'aperçu graphique rapide. */
typedef void (* cache_glance_fc) (GtkViewPanel *, cairo_t *, const GtkAllocation *, double);
@@ -69,7 +66,6 @@ struct _GtkViewPanel
define_address_fc define; /* Centrage sur une partie */
prepare_resize_fc resize; /* Prépare une nouvelle taille */
get_addr_coordinates_fc get_coordinates;/* Conversion adresse <-> pos. */
- scroll_fc scroll; /* Défilement du contenu */
cache_glance_fc cache_glance; /* Cache de la mignature */
bool *display_addr; /* Affichage des adresses ? */
@@ -82,10 +78,6 @@ struct _GtkViewPanelClass
{
GtkFixedClass parent; /* A laisser en premier */
- /* Signaux */
-
- void (* set_scroll_adjustments) (GtkViewPanel *, GtkAdjustment *, GtkAdjustment *);
-
};
diff --git a/src/gtkext/gtkviewpanel.c b/src/gtkext/gtkviewpanel.c
index f10713f..2b1aa97 100644
--- a/src/gtkext/gtkviewpanel.c
+++ b/src/gtkext/gtkviewpanel.c
@@ -35,12 +35,6 @@ static void gtk_view_panel_class_init(GtkViewPanelClass *);
/* Procède à l'initialisation de l'afficheur générique. */
static void gtk_view_panel_init(GtkViewPanel *);
-/* Enregistre les défilements à associer au composant GTK. */
-static void gtk_view_panel_set_scroll_adjustments(GtkViewPanel *, GtkAdjustment *, GtkAdjustment *);
-
-/* Prend acte d'un nouveau défilement. */
-static void gtk_view_panel_adj_value_changed(GtkAdjustment *, GtkViewPanel *);
-
/* Encadre la construction graphique initiale de l'affichage. */
static void gtk_view_panel_realize(GtkWidget *);
@@ -74,21 +68,6 @@ static void gtk_view_panel_class_init(GtkViewPanelClass *class)
widget_class->realize = gtk_view_panel_realize;
widget_class->draw = gtk_view_panel_draw;
- class->set_scroll_adjustments = gtk_view_panel_set_scroll_adjustments;
-
- /*
- widget_class->set_scroll_adjustments_signal =
- g_signal_new(("set_scroll_adjustments"),
- GTK_TYPE_VIEW_PANEL,
- G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET(GtkViewPanelClass, set_scroll_adjustments),
- NULL, NULL,
- g_cclosure_user_marshal_VOID__OBJECT_OBJECT,
- G_TYPE_NONE, 2,
- GTK_TYPE_ADJUSTMENT,
- GTK_TYPE_ADJUSTMENT);
- */
-
}
@@ -114,63 +93,6 @@ static void gtk_view_panel_init(GtkViewPanel *panel)
/******************************************************************************
* *
-* Paramètres : panel = vue à compléter. *
-* hadjustment = nouveau défilement horizontal à intégrer. *
-* vadjustment = nouveau défilement vertical à intégrer. *
-* *
-* Description : Enregistre les défilements à associer au composant GTK. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void gtk_view_panel_set_scroll_adjustments(GtkViewPanel *panel, GtkAdjustment *hadjustment, GtkAdjustment *vadjustment)
-{
- /* TODO : déconnecter les anciens ? */
-
- panel->hadjustment = hadjustment;
- panel->vadjustment = vadjustment;
-
- /**
- * On vérifie que le support n'est pas en train de nous libérer,
- * avant de se connecter...
- */
-
- if (hadjustment != NULL)
- g_signal_connect(hadjustment, "value_changed",
- G_CALLBACK(gtk_view_panel_adj_value_changed), panel);
-
- if (vadjustment != NULL)
- g_signal_connect(vadjustment, "value_changed",
- G_CALLBACK(gtk_view_panel_adj_value_changed), panel);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : adj = défilement à l'origine de l'action. *
-* panel = composant GTK à redessiner. *
-* *
-* Description : Prend acte d'un nouveau défilement. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void gtk_view_panel_adj_value_changed(GtkAdjustment *adj, GtkViewPanel *panel)
-{
- panel->scroll(panel);
-
-}
-
-
-/******************************************************************************
-* *
* Paramètres : adj = valeurs de défilement à consulter. *
* changed = note une mise à jour de valeur. [OUT] *
* *
@@ -549,6 +471,7 @@ void gtk_view_panel_scroll_to_address(GtkViewPanel *panel, vmpa_t addr)
{
gint x; /* Abscisse à garantir */
gint y; /* Ordonnée à garantir */
+ GtkWidget *viewport; /* Parent avec défilement */
GtkAdjustment *adj; /* Défilement à mettre à jour */
double limit; /* Limite à ne pas dépasser */
@@ -557,7 +480,9 @@ void gtk_view_panel_scroll_to_address(GtkViewPanel *panel, vmpa_t addr)
if (panel->get_coordinates(panel, addr, &x, &y))
{
- adj = panel->hadjustment;
+ viewport = gtk_widget_get_parent(GTK_WIDGET(panel));
+
+ g_object_get(G_OBJECT(viewport), "hadjustment", &adj, NULL);
limit = gtk_adjustment_get_upper(adj) - gtk_adjustment_get_page_size(adj);
if (x > limit)
@@ -565,7 +490,7 @@ void gtk_view_panel_scroll_to_address(GtkViewPanel *panel, vmpa_t addr)
gtk_adjustment_set_value(adj, x);
- adj = panel->vadjustment;
+ g_object_get(G_OBJECT(viewport), "vadjustment", &adj, NULL);
limit = gtk_adjustment_get_upper(adj) - gtk_adjustment_get_page_size(adj);
if (y > limit)
diff --git a/src/gui/menus/view.c b/src/gui/menus/view.c
index 0bcc2fe..511d9db 100644
--- a/src/gui/menus/view.c
+++ b/src/gui/menus/view.c
@@ -192,8 +192,20 @@ static void mcb_view_change_support(GtkRadioMenuItem *menuitem, GMenuBar *bar)
view = GPOINTER_TO_UINT(g_object_get_data(G_OBJECT(iter->data), "kind_of_view"));
+ /**
+ * La hiérarchie des composants empilés est la suivante :
+ *
+ * - GtkBlockView / GtkGraphView / GtkSourceView
+ * - GtkViewport
+ * - GtkScrolledWindow
+ * - GtkNotebook
+ * - GtkDockStation
+ *
+ */
+
vpanel = g_editor_item_get_current_view(G_EDITOR_ITEM(bar));
- station = gtk_widget_get_parent(GTK_WIDGET(vpanel)); /* ScrollWindow */
+ station = gtk_widget_get_parent(GTK_WIDGET(vpanel)); /* GtkViewport */
+ station = gtk_widget_get_parent(GTK_WIDGET(station)); /* ScrollWindow */
station = gtk_widget_get_parent(station); /* NoteBook */
station = gtk_widget_get_parent(station); /* DockStation */
diff --git a/src/gui/status.c b/src/gui/status.c
index 50424de..c059f4e 100644
--- a/src/gui/status.c
+++ b/src/gui/status.c
@@ -169,10 +169,6 @@ GEditorItem *g_status_info_new(GObject *ref)
static void update_status_info_for_view(GStatusInfo *info, GtkViewPanel *view)
{
- printf("new view :: %p\n", view);
-
- //track_caret_address_on_buffer_views
-
if (info->caret_instance != NULL)
{
g_signal_handlers_disconnect_by_func(info->caret_instance,
@@ -186,9 +182,6 @@ static void update_status_info_for_view(GStatusInfo *info, GtkViewPanel *view)
G_CALLBACK(track_caret_address_on_buffer_views),
info);
- else
- return;
-
info->caret_instance = G_OBJECT(view);
g_object_ref(info->caret_instance);