diff options
-rw-r--r-- | otherlibs/labltk/browser/editor.ml | 9 | ||||
-rw-r--r-- | otherlibs/labltk/browser/fileselect.ml | 31 | ||||
-rw-r--r-- | otherlibs/labltk/browser/jg_message.ml | 6 | ||||
-rw-r--r-- | otherlibs/labltk/browser/jg_message.mli | 3 | ||||
-rw-r--r-- | otherlibs/labltk/browser/shell.ml | 6 |
5 files changed, 31 insertions, 24 deletions
diff --git a/otherlibs/labltk/browser/editor.ml b/otherlibs/labltk/browser/editor.ml index ea2ad967e..d754cec70 100644 --- a/otherlibs/labltk/browser/editor.ml +++ b/otherlibs/labltk/browser/editor.ml @@ -409,7 +409,9 @@ class editor ~top ~menus = object (self) end else begin match Jg_message.ask ~master:top ~title:"Save" ("File `" ^ name ^ "' exists. Overwrite it?") - with `Yes -> Sys.remove name | `No | `Cancel -> raise Exit + with `Yes -> Sys.remove name + | `No -> raise (Sys_error "") + | `Cancel -> raise Exit end; let file = open_out name in let text = Text.get txt.tw ~start:tstart ~stop:(tposend 1) in @@ -419,7 +421,10 @@ class editor ~top ~menus = object (self) Checkbutton.deselect label; txt.name <- name with - Sys_error _ | Exit -> () + Sys_error _ -> + Jg_message.info ~master:top ~title:"Error" + ("Could not save `" ^ name ^ "'.") + | Exit -> () method load_text l = if l = [] then () else diff --git a/otherlibs/labltk/browser/fileselect.ml b/otherlibs/labltk/browser/fileselect.ml index dd4ff44df..51d782b71 100644 --- a/otherlibs/labltk/browser/fileselect.ml +++ b/otherlibs/labltk/browser/fileselect.ml @@ -56,6 +56,12 @@ let parse_filter s = dirs, ptrn else "", s +let concat dir name = + let len = String.length dir in + if len = 0 then name else + if dir.[len-1] = '/' then dir ^ name + else dir ^ "/" ^ name + let rec fixpoint ~f v = let v' = f v in if v = v' then v else fixpoint ~f v' @@ -90,6 +96,9 @@ let f ~title ~action:proc ?(dir = Unix.getcwd ()) let current_pattern = ref "" and current_dir = ref (caml_dir dir) in + + let may_prefix name = + if Filename.is_relative name then concat !current_dir name else name in let tl = Jg_toplevel.titled title in Focus.set tl; @@ -113,11 +122,7 @@ let f ~title ~action:proc ?(dir = Unix.getcwd ()) let cfrm = Frame.create tl ~borderwidth:1 ~relief:`Raised in let configure ~filter = - let filter = - if Filename.is_relative filter - then !current_dir ^ "/" ^ filter - else filter - in + let filter = may_prefix filter in let dir, pattern = parse_filter filter in let dir = if !load_in_path && usepath then "" else (current_dir := Filename.dirname dir; dir) @@ -165,18 +170,11 @@ let f ~title ~action:proc ?(dir = Unix.getcwd ()) List.fold_right l ~init:[] ~f: begin fun name acc -> if not (Filename.is_implicit name) then - if Filename.is_relative name - then (!current_dir ^ "/" ^ name) :: acc - else name :: acc + may_prefix name :: acc else try search_in_path ~name :: acc with Not_found -> acc end else - List.map l ~f: - begin fun x -> - if Filename.is_relative x - then !current_dir ^ "/" ^ x - else x - end + List.map l ~f:may_prefix in if sync then begin @@ -241,13 +239,12 @@ let f ~title ~action:proc ?(dir = Unix.getcwd ()) if !load_in_path && usepath then try Textvariable.set selection_var (search_in_path ~name) with Not_found -> () - else Textvariable.set selection_var (!current_dir ^ "/" ^ name)); + else Textvariable.set selection_var (may_prefix name)); Jg_box.add_completion directory_listbox ~action: begin fun index -> let filter = - !current_dir ^ "/" ^ - (Listbox.get directory_listbox ~index) ^ + may_prefix (Listbox.get directory_listbox ~index) ^ "/" ^ !current_pattern in configure ~filter end; diff --git a/otherlibs/labltk/browser/jg_message.ml b/otherlibs/labltk/browser/jg_message.ml index 59a784f6a..811c52b15 100644 --- a/otherlibs/labltk/browser/jg_message.ml +++ b/otherlibs/labltk/browser/jg_message.ml @@ -88,7 +88,8 @@ let ask ~title ?master ?(no=true) ?(cancel=true) text = and fw = Frame.create tl and sync = Textvariable.create ~on:tl () and r = ref (`Cancel : [`Yes|`No|`Cancel]) in - let accept = Button.create fw ~text:(if no then "Yes" else "Dismiss") + let accept = Button.create fw + ~text:(if no || cancel then "Yes" else "Dismiss") ~command:(fun () -> r := `Yes; destroy tl) and refuse = Button.create fw ~text:"No" ~command:(fun () -> r := `No; destroy tl) @@ -105,3 +106,6 @@ let ask ~title ?master ?(no=true) ?(cancel=true) text = Grab.set tl; Tkwait.variable sync; !r + +let info ~title ?master text = + ignore (ask ~title ?master ~no:false ~cancel:false text) diff --git a/otherlibs/labltk/browser/jg_message.mli b/otherlibs/labltk/browser/jg_message.mli index f582bc9c8..0a83a594f 100644 --- a/otherlibs/labltk/browser/jg_message.mli +++ b/otherlibs/labltk/browser/jg_message.mli @@ -28,3 +28,6 @@ val formatted : val ask : title:string -> ?master:toplevel widget -> ?no:bool -> ?cancel:bool -> string -> [`Cancel|`No|`Yes] + +val info : + title:string -> ?master:toplevel widget -> string -> unit diff --git a/otherlibs/labltk/browser/shell.ml b/otherlibs/labltk/browser/shell.ml index e1de45134..13be2c3f9 100644 --- a/otherlibs/labltk/browser/shell.ml +++ b/otherlibs/labltk/browser/shell.ml @@ -257,10 +257,8 @@ let path_sep = if is_win32 then ";" else ":" let warnings = ref "Al" let program_not_found prog = - ignore begin - Jg_message.ask ~cancel:false ~no:false ~title:"Error" - ("Program \"" ^ String.escaped prog ^ "\"\nwas not found in path") - end + Jg_message.info ~title:"Error" + ("Program \"" ^ prog ^ "\"\nwas not found in path") let f ~prog ~title = let progargs = |