method private connect_events =
      (* connect the press on button 3 for contextual menu *)
      ignore (view#event#connect#button_press ~callback:
                (
                 fun ev ->
                   match GdkEvent.get_type ev with
                     `BUTTON_PRESS when GdkEvent.Button.button ev = 3 ->
                       (
                        GToolbox.popup_menu
                          ~button: 3
                          ~time: (Int32.zero)
                          ~entries: self#menu;
                        true
                       )
                   | `TWO_BUTTON_PRESS ->
                       (
                        let x = int_of_float (GdkEvent.Button.x ev) in
                        let y = int_of_float (GdkEvent.Button.y ev) in
                        match view#get_path_at_pos ~x ~y with
                          None -> true
                        | Some (path,_,_,_) ->
                           let d =
                             let it = store#get_iter path in
                             store#get ~row: it ~column: col_data
                           in
                           self#on_double_click d;
                           true
                       )
                   | `BUTTON_PRESS
                   | `BUTTON_RELEASE
                   | `THREE_BUTTON_PRESS -> false
                )
             );
      ignore
        (view#selection#connect#changed
           (fun () ->
             let sel = view#selection in
             match sel#get_selected_rows with
               [] ->
                 selection <- [];
                 List.iter self#on_deselect selection

             | l ->
                 let l = List.map
                     (fun path ->
                       let it = store#get_iter path in
                       store#get ~row: it ~column: col_data
                     )
                     l
                 in
                 let newly_selected =
                   List.filter (fun e -> not (List.mem e selection)) l
                 in
                 let no_more_selected =
                   List.filter (fun e -> not (List.mem e l)) selection
                 in
                 selection <- l;
                 List.iter self#on_deselect no_more_selected;
                 List.iter self#on_select newly_selected;
           )
        );
(*
      let f_select_table ~row ~column ~event =
        try
          let d = List.nth data row in
          selection <- d ::
            (List.filter (fun d2 -> d <> d2) selection);
          self#on_select d;
        with Failure _ -> ()
      in
      let f_unselect_table ~row ~column ~event =
          let d = List.nth data row in
          selection <-
            (List.filter (fun d2 -> d <> d2) selection);
          self#on_deselect d;
          check_double_click event d
      in
      ignore (wlist#connect#select_row f_select_table);
      ignore (wlist#connect#unselect_row f_unselect_table);
      ignore (wlist#connect#click_column
                (fun c ->
                  let n = c + 1 in
                  if current_sort = n or (- current_sort) = n then
                    current_sort <- (- current_sort)
                  else
                    current_sort <- n;
                  self#update
                )
             );
*)

      ()