- (self#connect#press_move
- (fun (first: Gdome.element option) (last: Gdome.element option) ->
- match first, last with
- None, _
- | _, None -> selection_changed None
- | Some first', Some last' ->
- selection_changed
- (Some (new Gdome.element_of_node (common_ancestor (first' :> Gdome.node) (last' :> Gdome.node)))))) ;
- ignore (self#connect#clicked (fun _ -> self#set_selection None))
+ (self#connect#select_begin
+ (fun (elem : Gdome.element option) _ ->
+ if not (same_element root_selected elem) then
+ begin
+ self#set_selection elem ;
+ selection_changed elem
+ end ;
+ first_selected <- elem)) ;
+
+ ignore
+ (self#connect#select_over
+ (fun (elem : Gdome.element option) _ ->
+ let new_selected =
+ match first_selected, elem with
+ Some first', Some last' ->
+ (Some (new Gdome.element_of_node (common_ancestor (first' :> Gdome.node) (last' :> Gdome.node))))
+ | _ -> None
+ in
+ if not (same_element root_selected new_selected) then
+ begin
+ self#set_selection new_selected ;
+ selection_changed new_selected
+ end)) ;
+
+ ignore
+ (self#connect#select_end
+ (fun (elem : Gdome.element option) _ -> first_selected <- None)) ;
+
+ ignore
+ (self#connect#select_abort
+ (fun () ->
+ first_selected <- None ;
+ selection_changed None)) ;
+
+ ignore (self#connect#click (fun _ _ -> self#set_selection None))