summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--otherlibs/labltk/browser/editor.ml9
-rw-r--r--otherlibs/labltk/browser/fileselect.ml31
-rw-r--r--otherlibs/labltk/browser/jg_message.ml6
-rw-r--r--otherlibs/labltk/browser/jg_message.mli3
-rw-r--r--otherlibs/labltk/browser/shell.ml6
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 =