- if not (jump element) then
- match mathview#get_action with
- Some n ->
- mathview#action_toggle ;
- print_string ("current action selection: " ^
- string_of_int mathview#action_get_selected ^ "\n") ;
- flush stdout ;
- | None ->
- print_string ("mouse is on: " ^
- (match (mathview#get_element : Gdome.element option) with
- Some e -> e#get_tagName#to_string
- | None -> "NO ELEMENT!\n"
- ) ^ "\n") ;
- print_endline ("clicked: " ^ element#get_tagName#to_string) ;
- flush stdout
+ if element#get_tagName#to_string = "m:maction" then
+ let selection =
+ if element#hasAttribute ~name:(G.domString "selection") then
+ int_of_string (element#getAttribute ~name:(G.domString "selection"))#to_string
+ else
+ 1
+ in
+ mathview#freeze ;
+ (* the widget will cast the index back into a reasonable range *)
+ element#setAttribute ~name:(G.domString "selection") ~value:(G.domString (string_of_int (selection + 1))) ;
+ mathview#thaw ;
+ true
+ else
+ match element#get_parentNode with
+ Some p ->
+ begin
+ try
+ action mathview (new Gdome.element_of_node p)
+ with
+ GdomeInit.DOMCastException _ ->
+ print_string "action: NO MACTION FOUND\n" ;
+ flush stdout ;
+ false
+ end
+ | None -> assert false (* every element has a parent *)
+
+let click mathview (element : Gdome.element option) _ =
+ let module G = Gdome in
+ match element with
+ None -> print_string "CLICKED ON NOTHING\n" ; flush stdout
+ | Some element ->
+ if not (jump element) then
+ if not (mathview#action_toggle element) then
+ ()