From ea75876a2f1ba5c87d2fe08750576a1cc731b1eb Mon Sep 17 00:00:00 2001 From: letouzey Date: Fri, 7 Dec 2012 15:19:01 +0000 Subject: Coqide: nicer creation of timers git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@16033 85f007b7-540e-0410-9357-904b9bb8a0f7 --- ide/coqide.ml | 42 ++++++++++++++++++++++-------------------- ide/ideutils.ml | 22 +++++++++++++--------- ide/ideutils.mli | 9 +++++---- 3 files changed, 40 insertions(+), 33 deletions(-) diff --git a/ide/coqide.ml b/ide/coqide.ml index 3c2b2553e..044cdc4ab 100644 --- a/ide/coqide.ml +++ b/ide/coqide.ml @@ -20,6 +20,9 @@ type ide_info = { flags : flag list; } +let revert_timer = Ideutils.mktimer () +let autosave_timer = Ideutils.mktimer () + class type _analyzed_view = object @@ -450,7 +453,7 @@ object(self) | _ -> Minilib.log "Auto revert set to false"; current.global_auto_revert <- false; - disconnect_revert_timer () + revert_timer.kill () method save f = if try_export f (input_buffer#get_text ()) then begin @@ -1353,6 +1356,22 @@ let highlight _ = end +(** Timers *) + +let reset_revert_timer () = + revert_timer.kill (); + if current.global_auto_revert then + revert_timer.run + ~ms:current.global_auto_revert_delay + ~callback:(fun () -> File.revert_all (); true) + +let reset_autosave_timer () = + let autosave p = try p.analyzed_view#auto_save with _ -> () in + let autosave_all () = List.iter autosave session_notebook#pages; true in + autosave_timer.kill (); + if current.auto_save then + autosave_timer.run ~ms:current.auto_save_delay ~callback:autosave_all + (** For MacOSX : *) let forbid_quit_to_save () = @@ -1784,25 +1803,6 @@ let build_ui () = with _ -> () in - (* begin Preferences *) - let reset_revert_timer () = - disconnect_revert_timer (); - if current.global_auto_revert then - revert_timer := Some - (GMain.Timeout.add ~ms:current.global_auto_revert_delay - ~callback:(fun () -> File.revert_all (); true)) - in reset_revert_timer (); (* to enable statup preferences timer *) - - let reset_auto_save_timer () = - let autosave p = try p.analyzed_view#auto_save with _ -> () in - let autosave_all () = List.iter autosave session_notebook#pages; true in - disconnect_auto_save_timer (); - if current.auto_save then - auto_save_timer := Some - (GMain.Timeout.add ~ms:current.auto_save_delay ~callback:autosave_all) - in reset_auto_save_timer (); (* to enable statup preferences timer *) - (* end Preferences *) - let file_menu = GAction.action_group ~name:"File" () in let edit_menu = GAction.action_group ~name:"Edit" () in let view_menu = GAction.action_group ~name:"View" () in @@ -2121,6 +2121,8 @@ let build_ui () = let main files = build_ui (); + reset_revert_timer (); + reset_autosave_timer (); let do_file f = if Sys.file_exists f then FileAux.do_load f else diff --git a/ide/ideutils.ml b/ide/ideutils.ml index 3630de319..56a139232 100644 --- a/ide/ideutils.ml +++ b/ide/ideutils.ml @@ -107,15 +107,19 @@ let try_export file_name s = let my_stat f = try Some (Unix.stat f) with _ -> None -let revert_timer = ref None -let disconnect_revert_timer () = match !revert_timer with - | None -> () - | Some id -> GMain.Timeout.remove id; revert_timer := None - -let auto_save_timer = ref None -let disconnect_auto_save_timer () = match !auto_save_timer with - | None -> () - | Some id -> GMain.Timeout.remove id; auto_save_timer := None + +type timer = { run : ms:int -> callback:(unit->bool) -> unit; + kill : unit -> unit } + +let mktimer () = + let timer = ref None in + { run = + (fun ~ms ~callback -> + timer := Some (GMain.Timeout.add ~ms ~callback)); + kill = + (fun () -> match !timer with + | None -> () + | Some id -> GMain.Timeout.remove id; timer := None) } let last_dir = ref "" diff --git a/ide/ideutils.mli b/ide/ideutils.mli index af45fa21b..740a830e1 100644 --- a/ide/ideutils.mli +++ b/ide/ideutils.mli @@ -16,8 +16,11 @@ val doc_url : unit -> string val browse : (string -> unit) -> string -> unit val browse_keyword : (string -> unit) -> string -> unit val byte_offset_to_char_offset : string -> int -> int -val disconnect_revert_timer : unit -> unit -val disconnect_auto_save_timer : unit -> unit + +type timer = { run : ms:int -> callback:(unit->bool) -> unit; + kill : unit -> unit } +val mktimer : unit -> timer + val do_convert : string -> string val find_tag_limits : GText.tag -> GText.iter -> GText.iter * GText.iter val find_tag_start : GText.tag -> GText.iter -> GText.iter @@ -28,8 +31,6 @@ val my_stat : string -> Unix.stats option val print_id : 'a -> unit -val revert_timer : GMain.Timeout.id option ref -val auto_save_timer : GMain.Timeout.id option ref val select_file_for_open : title:string -> unit -> string option val select_file_for_save : title:string -> ?filename:string -> unit -> string option -- cgit v1.2.3