From e17bba7b9c8da60e2e8cd90b04803f7367b2c540 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Loi=CC=88c=20Correnson?= <loic.correnson@cea.fr>
Date: Tue, 6 Oct 2020 15:36:31 +0200
Subject: [PATCH] [gui] use global hook

---
 src/kernel_internals/runtime/messages.ml  |  9 +++++++--
 src/kernel_internals/runtime/messages.mli |  4 ++--
 src/plugins/gui/design.ml                 | 12 ++++++------
 3 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/src/kernel_internals/runtime/messages.ml b/src/kernel_internals/runtime/messages.ml
index 6d90a920321..1cc0e9342ec 100644
--- a/src/kernel_internals/runtime/messages.ml
+++ b/src/kernel_internals/runtime/messages.ml
@@ -48,7 +48,12 @@ module Messages =
     end)
 let () = Ast.add_monotonic_state Messages.self
 
-let add_message m = Messages.set (m :: Messages.get ())
+let demons = ref []
+let add_message m =
+  begin
+    Messages.set (m :: Messages.get ()) ;
+    List.iter (fun fn -> fn()) !demons ;
+  end
 
 let nb_errors () =
   Messages.fold_left
@@ -95,7 +100,7 @@ let () = Log.check_not_yet := check_not_yet
 
 let reset_once_flag () = OnceTable.clear ()
 
-let add_update_hook fn = Messages.add_hook_on_update (fun _ -> fn ())
+let add_global_hook fn = demons := !demons @ [fn]
 
 (*
 Local Variables:
diff --git a/src/kernel_internals/runtime/messages.mli b/src/kernel_internals/runtime/messages.mli
index 8843af988fa..11f26cc5bf1 100644
--- a/src/kernel_internals/runtime/messages.mli
+++ b/src/kernel_internals/runtime/messages.mli
@@ -44,8 +44,8 @@ val nb_messages: unit -> int
 (** Number of stored warning messages, error messages, or all
     messages.*)
 
-val add_update_hook: (unit -> unit) -> unit
-(** Register a hook on message addition *)
+val add_global_hook: (unit -> unit) -> unit
+(** Register a global hook (not projectified) on message addition. *)
 
 (*
 Local Variables:
diff --git a/src/plugins/gui/design.ml b/src/plugins/gui/design.ml
index 786c738ee9e..03048c9f2ac 100644
--- a/src/plugins/gui/design.ml
+++ b/src/plugins/gui/design.ml
@@ -1718,12 +1718,12 @@ class main_window () : main_window_extension_points =
         GtkMisc.Label.set_text label text
       in
       register_reset_extension (fun _ -> display_warnings ());
-      Messages.add_update_hook (fun () ->
-        if not !outdated_warnings then
-          begin
-            outdated_warnings := true ;
-            Wutil.later display_warnings
-          end
+      Messages.add_global_hook (fun () ->
+          if not !outdated_warnings then
+            begin
+              outdated_warnings := true ;
+              Wutil.later display_warnings
+            end
         );
       Messages.reset_once_flag ();
       display_warnings ();
-- 
GitLab