From 0b61e8d509f9d93e16eb90b6268dfc1da1ce5544 Mon Sep 17 00:00:00 2001
From: Virgile Prevosto <virgile.prevosto@m4x.org>
Date: Wed, 21 Nov 2018 19:46:19 +0100
Subject: [PATCH] [GUI] Compiles against GTK3

---
 src/plugins/gui/design.ml          |  7 ++++---
 src/plugins/gui/dgraph.ml.in       |  4 +++-
 src/plugins/gui/dgraph.mli.in      |  8 +++++++-
 src/plugins/gui/filetree.ml        |  8 +++++---
 src/plugins/gui/gtk_form.ml        | 14 ++++----------
 src/plugins/gui/gtk_helper.ml      | 14 +++++++++-----
 src/plugins/gui/menu_manager.ml    | 23 +++++++++++++++--------
 src/plugins/gui/project_manager.ml |  6 +++---
 src/plugins/gui/wfile.ml           |  5 +++--
 src/plugins/gui/widget.ml          | 11 +++++++----
 10 files changed, 60 insertions(+), 40 deletions(-)

diff --git a/src/plugins/gui/design.ml b/src/plugins/gui/design.ml
index d695a38cb3a..bd8db74a74f 100644
--- a/src/plugins/gui/design.ml
+++ b/src/plugins/gui/design.ml
@@ -657,8 +657,9 @@ struct
   let fold_category = "fold"
   let unfold_category = "unfold"
 
-  let declare_markers (source:GSourceView2.source_view) =
-    source#set_mark_category_pixbuf
+(*GTK3 does not exist anymore in gsourceview3. *)
+  let declare_markers (_source:GSourceView2.source_view) = ()
+(*    source#set_mark_category_pixbuf
       ~category:fold_category (Some Gtk_helper.Icon.(get Fold));
     source#set_mark_category_pixbuf
       ~category:unfold_category (Some Gtk_helper.Icon.(get Unfold));
@@ -682,7 +683,7 @@ struct
         F.Valid_under_hyp;
         F.Invalid_under_hyp;
         F.Inconsistent ]
-
+*)
   (* tooltip marks are recreated whenever the buffer changes *)
   let tooltip_marks : (int, string) Hashtbl.t = Hashtbl.create 8
 
diff --git a/src/plugins/gui/dgraph.ml.in b/src/plugins/gui/dgraph.ml.in
index 85cffffb27e..030f9fa5843 100644
--- a/src/plugins/gui/dgraph.ml.in
+++ b/src/plugins/gui/dgraph.ml.in
@@ -7,8 +7,10 @@ module DGraphModel = struct
 end
 
 module DGraphContainer = struct
+  type status = Global | Tree | Both
+
   module Dot = struct
-    let from_dot_with_commands ?packing:_ _ =
+    let from_dot_with_commands ?packing:_ ?status:_ _ =
       raise (DGraphModel.DotError "DGraph is unsupported in GTK3")
   end
 end
diff --git a/src/plugins/gui/dgraph.mli.in b/src/plugins/gui/dgraph.mli.in
index ce84948c30d..33751178dd2 100644
--- a/src/plugins/gui/dgraph.mli.in
+++ b/src/plugins/gui/dgraph.mli.in
@@ -7,8 +7,14 @@ module DGraphModel: sig
 end
 
 module DGraphContainer: sig
+
+  type status = Global | Tree | Both
+
   module Dot: sig
-    val from_dot_with_commands: ?packing:(GObj.widget ->unit) -> string ->
+    val from_dot_with_commands:
+      ?packing:(GObj.widget ->unit) ->
+      ?status:status ->
+      string ->
         GPack.table * <adapt_zoom: unit -> unit>
   end
 end
diff --git a/src/plugins/gui/filetree.ml b/src/plugins/gui/filetree.ml
index b835d12d195..a60026927e6 100644
--- a/src/plugins/gui/filetree.ml
+++ b/src/plugins/gui/filetree.ml
@@ -548,7 +548,8 @@ let make (tree_view:GTree.view) =
       ~label:"Hide built-ins" ~key:key_hide_builtins in
   let mhide_annotations = MenusHide.menu_item menu
       ~label:"Hide global annotations" ~key:key_hide_annotations in
-  let () = menu#add (GMenu.separator_item () :> GMenu.menu_item) in
+  (*GTK3: no GMenu.separator_item*)
+  (*let () = menu#add (GMenu.separator_item () :> GMenu.menu_item) in*)
   let mflat_mode =
     MenusHide.menu_item menu ~label:"Flat mode" ~key:key_flat_mode in
 
@@ -630,7 +631,7 @@ let make (tree_view:GTree.view) =
       let column = GTree.view_column ~renderer:(renderer,[]) () in
       ignore (tree_view#append_column column);
       let label = GMisc.label ~text:title () in
-      (GData.tooltips ())#set_tip ~text:tooltip label#coerce;
+      Gtk_helper.do_tooltip ~tooltip label;
       column#set_widget (Some label#coerce);
       column#set_alignment 0.5;
       column#set_reorderable true;
@@ -1012,7 +1013,8 @@ let make (tree_view:GTree.view) =
                 mhide_annotations key_hide_annotations self#reset_internal);
       ignore (MenusHide.mi_set_callback
                 mflat_mode key_flat_mode self#reset_internal);
-      menu#add (GMenu.separator_item () :> GMenu.menu_item);
+      (*GTK3: no GMenu.separator_item*)
+      (*menu#add (GMenu.separator_item () :> GMenu.menu_item);*)
 
       tree_view#set_model (Some (init_model:>GTree.model));
       self#enable_select_functions ();
diff --git a/src/plugins/gui/gtk_form.ml b/src/plugins/gui/gtk_form.ml
index 2054b86d0f5..0d55967df72 100644
--- a/src/plugins/gui/gtk_form.ml
+++ b/src/plugins/gui/gtk_form.ml
@@ -40,12 +40,6 @@ type 'a field =
   ?tooltip:string -> packing:(GObj.widget -> unit) ->
   (unit -> 'a) -> ('a -> unit) -> demon -> unit
 
-let mk_tooltip ?tooltip obj = match tooltip with
-  | None -> ()
-  | Some text ->
-      let tooltip = GData.tooltips () in
-      tooltip#set_tip ~text obj#coerce
-
 (* ------------------------------------------------------------------------ *)
 (* --- Check Button                                                     --- *)
 (* ------------------------------------------------------------------------ *)
@@ -54,7 +48,7 @@ let check ?label ?tooltip ~packing get set demon =
   let button =
     GButton.check_button ?label ~packing ~active:(get ()) ()
   in
-  mk_tooltip ?tooltip button ;
+  Gtk_helper.do_tooltip ?tooltip button ;
   ignore (button#connect#toggled ~callback:(fun () -> set button#active));
   register demon (fun () -> button#set_active (get()))
 
@@ -88,7 +82,7 @@ let menu entries ?width ?tooltip ~packing get set demon =
     with Not_found -> ()
   in
   ignore (combo_box#connect#changed callback) ;
-  mk_tooltip ?tooltip combo_box ;
+  Gtk_helper.do_tooltip ?tooltip combo_box ;
   register demon update
 
 (* ------------------------------------------------------------------------ *)
@@ -105,7 +99,7 @@ let spinner ?(lower=0) ?(upper=max_int) ?width ?tooltip ~packing get set demon =
     if a<>b then set a in
   let update () = spin#adjustment#set_value (float (get ())) in
   ignore (spin#connect#value_changed ~callback) ;
-  mk_tooltip ?tooltip spin ;
+  Gtk_helper.do_tooltip ?tooltip spin ;
   register demon update
 
 (* ------------------------------------------------------------------------ *)
@@ -137,5 +131,5 @@ let label ~text ~packing () =
 
 let button ~label ?tooltip ~callback ~packing () =
   let b = GButton.button ~label ~packing () in
-  mk_tooltip ?tooltip b ;
+  Gtk_helper.do_tooltip ?tooltip b ;
   ignore (b#connect#clicked ~callback)
diff --git a/src/plugins/gui/gtk_helper.ml b/src/plugins/gui/gtk_helper.ml
index 0846a320802..761b616153a 100644
--- a/src/plugins/gui/gtk_helper.ml
+++ b/src/plugins/gui/gtk_helper.ml
@@ -357,11 +357,12 @@ type 'a chooser =
 (* --- Bundle of fields                                                 --- *)
 (* ------------------------------------------------------------------------ *)
 
-let do_tooltip ?tooltip obj = match tooltip with
+let do_tooltip ?tooltip _obj = match tooltip with
   | None -> ()
-  | Some text ->
-      let tooltip = GData.tooltips () in
-      tooltip#set_tip ~text obj#coerce
+  | Some _text -> ()
+      (*GTK3: no GData.tooltips*)
+      (* let tooltip = GData.tooltips () in
+      tooltip#set_tip ~text obj#coerce *)
 
 let on_bool ?tooltip ?use_markup (container:GPack.box) label get set =
   let result = ref (get ()) in
@@ -550,10 +551,13 @@ let trace_event (w:GObj.event_ops) =
     | `DROP_FINISHED -> "drop-finish"
     | `CLIENT_EVENT -> "client-event"
     | `VISIBILITY_NOTIFY -> "visibility-notify"
-    | `NO_EXPOSE-> "no-expose"
+    (*GTK3 Event does not exist anymore *)
+    (*    | `NO_EXPOSE-> "no-expose" *)
     | `SCROLL -> "scroll"
     | `WINDOW_STATE -> "window-state"
     | `SETTING -> "setting"
+    (*GTK3: leave room for more events. *)
+    | _ -> "unknown-gtk3-event"
   in
   ignore (w#connect#any
             ~callback:(fun e ->
diff --git a/src/plugins/gui/menu_manager.ml b/src/plugins/gui/menu_manager.ml
index 0388411e620..13df82394f8 100644
--- a/src/plugins/gui/menu_manager.ml
+++ b/src/plugins/gui/menu_manager.ml
@@ -165,7 +165,7 @@ class menu_manager ?packing ~host:(_:Gtk_helper.host) =
            By default, add all the others just before this very first group. *)
         ref (match pos, first_tool_separator with
             | None, None -> 0
-            | None, Some sep -> max 0 (toolbar#get_item_index sep)
+            | None, Some sep -> max 0 (toolbar#get_item_index sep#as_tool_item)
             | Some p, _ -> p)
       in
       let toolbar_packing w =
@@ -213,7 +213,10 @@ class menu_manager ?packing ~host:(_:Gtk_helper.host) =
                 (fun () -> b#set_active (active ())) :: set_active_states;
               BToggle b
         in
-        (bt_type_as_skel b)#set_tooltip (GData.tooltips ()) tooltip "";
+        (*GTK3: set_tooltip does not exist anymore. *)
+        (*(bt_type_as_skel b)#set_tooltip (GData.tooltips ()) tooltip "";*)
+        (bt_type_as_skel b)#misc#set_tooltip_text tooltip;
+        (*/GTK3*)
         toolbar_buttons <- (b, sensitive) :: toolbar_buttons;
         b
       in
@@ -238,9 +241,10 @@ class menu_manager ?packing ~host:(_:Gtk_helper.host) =
         lazy (fst !!aux), lazy (snd !!aux)
       in
       let add_menu_separator =
-        fun () ->
-          if !menu_pos > 0 || (!menu_pos = -1 && container#children <> []) then
-            ignore (GMenu.separator_item ~packing:container_packing ())
+        fun () -> ()
+         (*GTK3: no GMenu.separator_item *)
+         (*if !menu_pos > 0 || (!menu_pos = -1 && container#children <> []) then
+            ignore (GMenu.separator_item ~packing:container_packing ()) *)
       in
       let add_item_menu stock_opt label callback sensitive =
         let item = match stock_opt, callback with
@@ -249,11 +253,14 @@ class menu_manager ?packing ~host:(_:Gtk_helper.host) =
               ignore (mi#connect#activate callback);
               MStandard mi
           | Some stock, Unit_callback callback ->
-              let image = GMisc.image ~stock () in
+              let _image = GMisc.image ~stock () in
               let mi =
-                (GMenu.image_menu_item
+                (*GTK3: no image_menu_item *)
+                (*(GMenu.image_menu_item
                    ~image ~packing:!!menubar_packing ~label ()
-                 :> GMenu.menu_item)
+                 :> GMenu.menu_item) *)
+                GMenu.menu_item ~label ()
+                (*/GTK3*)
               in
               ignore (mi#connect#activate callback);
               MStandard mi
diff --git a/src/plugins/gui/project_manager.ml b/src/plugins/gui/project_manager.ml
index abea1ed4844..fcb2357a891 100644
--- a/src/plugins/gui/project_manager.ml
+++ b/src/plugins/gui/project_manager.ml
@@ -218,10 +218,9 @@ and mk_project_entry window menu ?group p =
   let box = GPack.hbox ~packing:p_item#add () in
   ignore (GMisc.label ~text:pname ~packing:box#pack ());
   let buttons_box = GPack.hbox ~packing:(box#pack ~from:`END) () in
-  let tooltips = GData.tooltips () in
   let add_action stock text callback =
     let item = GButton.button ~packing:buttons_box#pack () in
-    tooltips#set_tip item#coerce ~text;
+    Gtk_helper.do_tooltip ~tooltip:text item;
     item#set_relief `NONE;
     let image = GMisc.image ~stock () in
     item#set_image image#coerce;
@@ -274,7 +273,8 @@ let () =
        let new_item = constant_items.(0) in
        new_item#add_accelerator `CONTROL 'n';
        constant_items.(3)#add_accelerator `CONTROL 'd';
-       ignore (GMenu.separator_item ~packing:menu#append ());
+       (*GTK3: no GMenu.separator_item *)
+       (* ignore (GMenu.separator_item ~packing:menu#append ());*)
        let callback () =
          let is_reset = reset menu in
          if is_reset then make_project_entries window menu
diff --git a/src/plugins/gui/wfile.ml b/src/plugins/gui/wfile.ml
index b32f0aa3063..9bcb0d74c44 100644
--- a/src/plugins/gui/wfile.ml
+++ b/src/plugins/gui/wfile.ml
@@ -76,8 +76,9 @@ class button ?kind ?title ?select ?tooltip ?parent () =
   let box = GPack.hbox ~homogeneous:false ~spacing:0 ~border_width:0 () in
   let fld = GMisc.label ~text:"(none)" ~xalign:0.0
       ~packing:(box#pack ~expand:true) () in
-  let _ = GMisc.separator `VERTICAL
-      ~packing:(box#pack ~expand:false ~padding:2) ~show:true () in
+  (*GTK3: no GMisc.separator anymore. *)
+  (*let _ = GMisc.separator `VERTICAL
+      ~packing:(box#pack ~expand:false ~padding:2) ~show:true () in *)
   let _ = GMisc.image  ~packing:(box#pack ~expand:false) ~stock:`OPEN () in
   let button = GButton.button () in
   let dialog = new dialog ?kind ?title ?select ?parent () in
diff --git a/src/plugins/gui/widget.ml b/src/plugins/gui/widget.ml
index bc9c1f649ce..0f63fd00ff6 100644
--- a/src/plugins/gui/widget.ml
+++ b/src/plugins/gui/widget.ml
@@ -73,7 +73,8 @@ class label ?(style=`Label) ?(align=`Left) ?width ?text () =
       | Some c0 , `NORMAL ->
           w#misc#modify_fg [ `NORMAL , `COLOR c0 ]
       | None , (#GDraw.color as c) ->
-          fg <- Some (w#misc#style#fg `NORMAL) ;
+          (*GTK3: misc#style does not exist anymore *)
+          (* fg <- Some (w#misc#style#fg `NORMAL) ; *)
           w#misc#modify_fg [ `NORMAL , c ]
       | Some _ , (#GDraw.color as c) ->
           w#misc#modify_fg [ `NORMAL , c ]
@@ -84,7 +85,8 @@ class label ?(style=`Label) ?(align=`Left) ?width ?text () =
       | Some c0 , `NORMAL ->
           w#misc#modify_bg [ `NORMAL , `COLOR c0 ]
       | None , (#GDraw.color as c) ->
-          bg <- Some (w#misc#style#bg `NORMAL) ;
+          (*GTK3: misc#style does not exist anymore *)
+          (* bg <- Some (w#misc#style#bg `NORMAL) ; *)
           w#misc#modify_bg [ `NORMAL , c ]
       | Some _ , (#GDraw.color as c) ->
           w#misc#modify_bg [ `NORMAL , c ]
@@ -427,8 +429,9 @@ class popup () =
     method add_separator = separator <- true
 
     method add_item ~label ~callback =
-      if not empty && separator then
-        ignore (GMenu.separator_item ~packing:menu#append ()) ;
+      (*GTK3: no separator_item anymore. *)
+      (* if not empty && separator then
+        ignore (GMenu.separator_item ~packing:menu#append ()) ; *)
       let item = GMenu.menu_item ~label ~packing:menu#append () in
       ignore (item#connect#activate ~callback) ;
       empty <- false ; separator <- false
-- 
GitLab