aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar letouzey <letouzey@85f007b7-540e-0410-9357-904b9bb8a0f7>2012-12-07 15:19:01 +0000
committerGravatar letouzey <letouzey@85f007b7-540e-0410-9357-904b9bb8a0f7>2012-12-07 15:19:01 +0000
commitea75876a2f1ba5c87d2fe08750576a1cc731b1eb (patch)
treed42932bea6e7a0fe1025f2616d68e2efc7b5dd40
parent31e7383b0461b8fddd5cec0debf760bd6a31a736 (diff)
Coqide: nicer creation of timers
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@16033 85f007b7-540e-0410-9357-904b9bb8a0f7
-rw-r--r--ide/coqide.ml42
-rw-r--r--ide/ideutils.ml22
-rw-r--r--ide/ideutils.mli9
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