method add_tab pos c =
      let label = label_of_contents c in
      let wlabel = GMisc.label ~text: label() in
      tabs <-
        (match pos with
          None -> tabs @ [wlabel,c]
        | Some pos -> insert_in_pos (wlabel,c) pos tabs
        );
      let w = match c with
        `View gv ->
          gv#set_on_label_change (self#set_tab_label c);
          gv#set_on_destroy (self#on_view_destroy gv);
          gv#box
      | `Notebook gn ->
          gn#set_on_label_change (self#set_tab_label c);
          gn#set_on_destroy (self#on_tab_destroy c);
          gn#notebook#coerce
      | `Paned gp ->
          gp#set_on_label_change (self#set_tab_label c);
          gp#set_on_destroy (self#on_tab_destroy c);
          gp#paned#coerce
      in
      let n =
        match pos with
          None ->
            ignore(nb#append_page ~tab_label: wlabel#coerce w);
            List.length tabs - 1
        | Some pos ->
            ignore(nb#insert_page ~pos ~tab_label: wlabel#coerce w);
            pos
      in
      self#goto_page n;
      contents_grab_focus c