let display_string_list_list ?(modal=false)
    ?(width=500) ?(height=500) title titles lists =
  let window = GWindow.window
      ~title: title
      ~width: width
      ~height: height
      ~modal: modal
      ()
  in
  let _ =
    if modal then
      let _ = window #connect#destroy ~callback: (GMain.Main.quit) in ()
  in
  let vbox = GPack.vbox ~packing: window#add () in

  (* the wlist *)
  let wscroll = GBin.scrolled_window
      ~vpolicy: `AUTOMATIC
      ~hpolicy: `AUTOMATIC
      ~packing: (vbox#pack ~expand: true)
      ()
  in
  let wlist = GList.clist
      ~titles: titles
      ~titles_show: true
      ~packing: wscroll#add
      ()
  in

  let hbox_boutons = GPack.hbox ~packing: (vbox#pack ~expand: false) () in
  let wb_ok = GButton.button
      ~label: Ocvs_messages.mOk
      ~packing: (hbox_boutons#pack ~expand: true ~padding: 3) ()
  in
  let _ = wb_ok#connect#clicked window#destroy in

  let _ = window#event#connect#key_press
      ~callback:(fun ev -> if (GdkEvent.Key.keyval ev = GdkKeysyms._Return) then window#destroy (); true)
  in

  List.iter
    (fun l -> let _ = wlist#append l in ())
    lists;
  GToolbox.autosize_clist wlist ;

  window#show ();

  if modal then GMain.Main.main () else ()