From 6a444b273cf812c080c57d36a43436bf4aa4d55e Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Fri, 21 Dec 2018 11:54:43 +0100
Subject: Centered graph view content at first display.

---
 src/gtkext/gtkgraphdisplay.c | 41 ++++-------------------------------------
 src/gui/menus/view.c         | 16 ++++++++++++++++
 2 files changed, 20 insertions(+), 37 deletions(-)

diff --git a/src/gtkext/gtkgraphdisplay.c b/src/gtkext/gtkgraphdisplay.c
index fdd48ce..0aee486 100644
--- a/src/gtkext/gtkgraphdisplay.c
+++ b/src/gtkext/gtkgraphdisplay.c
@@ -93,9 +93,6 @@ static void gtk_graph_display_finalize(GtkGraphDisplay *);
 /* S'adapte à la surface concédée par le composant parent. */
 static void gtk_graph_display_size_allocate(GtkWidget *, GtkAllocation *);
 
-/* Centre si possible le contenu du panneau d'affichage. */
-static void gtk_graph_display_update_support_margins(GtkGraphDisplay *, const GtkAllocation *);
-
 /* Indique les dimensions de travail du composant d'affichage. */
 static void gtk_graph_display_compute_requested_size(GtkGraphDisplay *, gint *, gint *);
 
@@ -298,36 +295,15 @@ static void gtk_graph_display_finalize(GtkGraphDisplay *display)
 static void gtk_graph_display_size_allocate(GtkWidget *widget, GtkAllocation *allocation)
 {
     GtkGraphDisplay *display;                     /* Autre version du composant  */
-
-    GTK_WIDGET_CLASS(gtk_graph_display_parent_class)->size_allocate(widget, allocation);
-
-    display = GTK_GRAPH_DISPLAY(widget);
-
-    gtk_graph_display_update_support_margins(display, allocation);
-
-}
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : display    = panneau dont le contenu est à déplacer.         *
-*                allocation = étendue accordée à la vue.                      *
-*                                                                             *
-*  Description : Centre si possible le contenu du panneau d'affichage.        *
-*                                                                             *
-*  Retour      : -                                                            *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-static void gtk_graph_display_update_support_margins(GtkGraphDisplay *display, const GtkAllocation *allocation)
-{
     gint width;                             /* Largeur totale du support   */
     gint height;                            /* Hauteur totale du support   */
     gint start;                             /* Bordure horizontale         */
     gint top;                               /* Bordure verticale           */
 
+    GTK_WIDGET_CLASS(gtk_graph_display_parent_class)->size_allocate(widget, allocation);
+
+    display = GTK_GRAPH_DISPLAY(widget);
+
     gtk_graph_display_compute_requested_size(display, &width, &height);
 
     if (width > allocation->width)
@@ -632,7 +608,6 @@ static void gtk_graph_display_define_main_address(GtkGraphDisplay *display, cons
     GBlockList *list;                       /* Liste de blocs basiques     */
     gint right;                             /* Abscisse du coin droit      */
     gint bottom;                            /* Ordonnée du coin inférieur  */
-    GtkAllocation allocation;               /* Espace alloué au panneau    */
     GtkWidget *child;                       /* Composant sélectionné       */
 
     if (display->routine == NULL)
@@ -684,14 +659,6 @@ static void gtk_graph_display_define_main_address(GtkGraphDisplay *display, cons
         gtk_fixed_move(GTK_FIXED(display->support), display->extender, right - 1, bottom - 1);
 
         /**
-         * Si possible, on centre le contenu obtenu.
-         */
-
-        gtk_widget_get_allocation(GTK_WIDGET(display), &allocation);
-
-        gtk_graph_display_update_support_margins(display, &allocation);
-
-        /**
          * Première sélection...
          */
 
diff --git a/src/gui/menus/view.c b/src/gui/menus/view.c
index 63b6371..059a598 100644
--- a/src/gui/menus/view.c
+++ b/src/gui/menus/view.c
@@ -40,6 +40,7 @@
 #include "../core/panels.h"
 #include "../../analysis/loaded.h"
 #include "../../gtkext/easygtk.h"
+#include "../../gtkext/gtkgraphdisplay.h"
 
 
 
@@ -758,6 +759,8 @@ static void mcb_view_switch_to_prev_support(GtkRadioMenuItem *menuitem, gpointer
 
 static void handle_loaded_panel_first_allocation(GtkWidget *widget, GdkRectangle *alloc, GLineCursor *cursor)
 {
+    GtkAllocation allocation;               /* Emplacement effectif        */
+
     /* On ne réagit que la première fois */
     g_signal_handlers_disconnect_by_func(widget, G_CALLBACK(handle_loaded_panel_first_allocation), cursor);
 
@@ -765,6 +768,19 @@ static void handle_loaded_panel_first_allocation(GtkWidget *widget, GdkRectangle
 
     g_object_unref(G_OBJECT(cursor));
 
+    /**
+     * Pour les mêmes raisons que celles exposées dans change_current_view_support(),
+     * l'affichage en vue graphique n'est pas centré initialement.
+     *
+     * On profite donc de ce crochet pour corriger le tir !
+     */
+
+    if (GTK_IS_GRAPH_DISPLAY(widget))
+    {
+        gtk_widget_get_allocation(widget, &allocation);
+        gtk_widget_size_allocate(widget, &allocation);
+    }
+
 }
 
 
-- 
cgit v0.11.2-87-g4458