summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
6f22bfb)
the end of the sequent was based on listening to signals. These signals:
1) were raised multiple times for each insertion (LOT of times!) making
the scrolling extremely slow.
2) the callback was registered multiple times every time the user switched
goal. This made the system slower and slower.
let win goal_switch =
let w =
GBin.scrolled_window ~hpolicy:`AUTOMATIC ~vpolicy:`ALWAYS
let win goal_switch =
let w =
GBin.scrolled_window ~hpolicy:`AUTOMATIC ~vpolicy:`ALWAYS
- ~shadow_type:`IN ~show:true ()
- in
+ ~shadow_type:`IN ~show:true () in
let reparent () =
scrolledWin <- Some w;
(match cicMathView#misc#parent with
let reparent () =
scrolledWin <- Some w;
(match cicMathView#misc#parent with
| Some p -> GContainer.cast_container p
in
parent#remove cicMathView#coerce);
| Some p -> GContainer.cast_container p
in
parent#remove cicMathView#coerce);
- w#add cicMathView#coerce;
- ignore (w#vadjustment#set_value
- (w#vadjustment#upper -. w#vadjustment#page_size));
- ignore (w#vadjustment#connect#changed (fun _ ->
- w#vadjustment#set_value
- (w#vadjustment#upper -. w#vadjustment#page_size)))
+ w#add cicMathView#coerce
in
goal2win <- (goal_switch, reparent) :: goal2win;
w#coerce
in
goal2win <- (goal_switch, reparent) :: goal2win;
w#coerce
cicMathView#load_root ~root);
(try
cicMathView#set_selection None;
cicMathView#load_root ~root);
(try
cicMathView#set_selection None;
- List.assoc goal_switch goal2win ()
+ List.assoc goal_switch goal2win ();
+ (match cicMathView#misc#parent with
+ None -> assert false
+ | Some p ->
+ (* The text widget dinamycally inserts the text in a separate
+ thread. We need to wait for it to terminate before we can
+ move the scrollbar to the end *)
+ while Glib.Main.pending()do ignore(Glib.Main.iteration false); done;
+ let w =
+ new GBin.scrolled_window
+ (Gobject.try_cast p#as_widget "GtkScrolledWindow") in
+ w#hadjustment#set_value 0.0;
+ w#vadjustment#set_value
+ (w#vadjustment#upper -. w#vadjustment#page_size));
with Not_found -> assert false)
method goto_sequent: 'status. #ApplyTransformation.status as 'status -> int -> unit
with Not_found -> assert false)
method goto_sequent: 'status. #ApplyTransformation.status as 'status -> int -> unit
in
notebook#goto_page page;
self#render_page status ~page ~goal_switch
in
notebook#goto_page page;
self#render_page status ~page ~goal_switch
end
let blank_uri = BuildTimeConf.blank_uri
end
let blank_uri = BuildTimeConf.blank_uri