From a161253bfaa615e6dd60ff86844251f77b604bbd Mon Sep 17 00:00:00 2001
From: Virgile Prevosto <virgile.prevosto@m4x.org>
Date: Tue, 4 Jun 2019 16:37:10 +0200
Subject: [PATCH] [gui] don't auto-select current project when unfolding
 submenu

---
 src/plugins/gui/project_manager.ml | 21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

diff --git a/src/plugins/gui/project_manager.ml b/src/plugins/gui/project_manager.ml
index da967b38ef9..9ee9502a373 100644
--- a/src/plugins/gui/project_manager.ml
+++ b/src/plugins/gui/project_manager.ml
@@ -38,8 +38,8 @@ let projects_list ?(filter=fun _ -> true) () =
 module PrjRadiosSet =
   FCSet.Make
     (struct
-      type t = (Project.t * string) * GMenu.radio_menu_item
-      let compare (p1, _) (p2, _) = compare_prj p1 p2
+      type t = (Project.t * string) * GMenu.radio_menu_item * GMenu.menu_item
+      let compare (p1, _, _) (p2, _, _) = compare_prj p1 p2
     end)
 
 let project_radios : PrjRadiosSet.t ref = ref PrjRadiosSet.empty
@@ -147,7 +147,7 @@ let reset ?filter (menu: GMenu.menu) =
     try
       let rest =
         PrjRadiosSet.fold
-          (fun (p1, _) acc ->
+          (fun (p1, _, _) acc ->
              match acc with
              | [] -> raise Exit
              | p2 :: acc ->
@@ -162,13 +162,11 @@ let reset ?filter (menu: GMenu.menu) =
   if same_projects then begin
     (* update the item status according to the current project anyway *)
     PrjRadiosSet.iter
-      (fun ((p, _), r) -> r#set_active (Project.is_current p))
+      (fun ((p, _), r, _) -> r#set_active (Project.is_current p))
       !project_radios;
     false
   end else begin
-    PrjRadiosSet.iter
-      (fun (_, r) -> menu#remove (r :> GMenu.menu_item))
-      !project_radios;
+    PrjRadiosSet.iter (fun (_, _, i) -> menu#remove i) !project_radios;
     project_radios := PrjRadiosSet.empty;
     true
   end
@@ -199,17 +197,18 @@ let rec rename_project
 
 and mk_project_entry window menu ?group p =
   let pname = Project.get_unique_name p in
+  let item = GMenu.menu_item ~label:pname ~packing:menu#append () in
+  let submenu = GMenu.menu ~packing:item#set_submenu () in
   let p_item = GMenu.radio_menu_item
       ?group
       ~active:(Project.is_current p)
-      ~packing:menu#append
-      ~label:pname
+      ~packing:submenu#append
+      ~label:"current"
       ()
   in
   let callback () = if p_item#active then Project.set_current p in
   ignore (p_item#connect#toggled ~callback);
-  project_radios := PrjRadiosSet.add ((p, pname), p_item) !project_radios;
-  let submenu = GMenu.menu ~packing:p_item#set_submenu () in
+  project_radios := PrjRadiosSet.add ((p, pname), p_item, item) !project_radios;
   let add_action stock text callback =
     let image = GMisc.image ~stock () in
     let image = image#coerce in
-- 
GitLab