docs: def tree_view_keypress_callback(self, widget, event):
          """General method to adapt widget view and controller behavior according the key press/release and
          button release events
  
              Here the scrollbar motion to follow key cursor motions in editable is already in.
  
          :param Gtk.TreeView widget: The tree view the controller use
          :param Gdk.Event event: The key press event
          :return:
          """
          current_row_path, current_focused_column = self.tree_view.get_cursor()
          # print(current_row_path, current_focused_column)
          if isinstance(widget, Gtk.TreeView) and not self.active_entry_widget:  # avoid jumps for active entry widget
              pass
              # cursor motion/selection changes (e.g. also by button release event)
              # if current_row_path is not None and len(current_row_path) == 1 and isinstance(current_row_path[0], int):
              #     self.tree_view.scroll_to_cell(current_row_path[0], current_focused_column, use_align=True)
              # # else:
              # #     self._logger.debug("A ListViewController aspects a current_row_path of dimension 1 with integer but"
              # #                        " it is {0} and column is {1}".format(current_row_path, current_focused_column))
          elif isinstance(widget, Gtk.Entry) and self.view.scrollbar_widget is not None:
              # calculate the position of the scrollbar to be always centered with the entry widget cursor
              # TODO check how to get sufficient the scroll-offset in the entry widget -> some times zero when not
              # TODO the scrollbar is one step behind cursor -> so jump from pos1 to end works not perfect
              entry_widget_scroll_offset, entry_widget_cursor_position, entry_widget_text_length = \
                  widget.get_properties(*["scroll-offset", "cursor-position", "text-length"])
              cell_rect_of_entry_widget = widget.get_allocation()
  
              horizontal_scroll_bar = self.view.scrollbar_widget.get_hscrollbar()
              # entry_widget_text_length must be greater than zero otherwise DevisionByZero Exception
              if horizontal_scroll_bar is not None and float(entry_widget_text_length) > 0:
                  adjustment = horizontal_scroll_bar.get_adjustment()
                  layout_pixel_width = widget.get_layout().get_pixel_size()[0]
                  # print("rel_pos pices", cell_rect_of_entry_widget.x,)
                  #     int(layout_pixel_width*float(entry_widget_cursor_position)/float(entry_widget_text_length))
                  rel_pos = cell_rect_of_entry_widget.x - entry_widget_scroll_offset + \
                      int(layout_pixel_width*float(entry_widget_cursor_position)/float(entry_widget_text_length))
  
                  # optimize rel_pos for better user support
                  bounds = widget.get_selection_bounds()
                  if bounds and bounds[1] - bounds[0] == len(widget.get_text()):
                      # if text is fully selected stay in front as far as possible
                      rel_pos = cell_rect_of_entry_widget.x
                      if self._horizontal_scrollbar_stay_in_front_if_possible():
                          return True
                  else:
                      # try to stay long at the beginning of the columns if the columns fully fit in
                      rel_space = adjustment.get_page_size() - cell_rect_of_entry_widget.x
                      if cell_rect_of_entry_widget.x + widget.get_layout().get_pixel_size()[0] < \
                              adjustment.get_page_size():
                          rel_pos = 0.
                      elif rel_space and rel_pos <= rel_space:
                          # accelerate the showing of the first columns
                          rel_pos = rel_pos + rel_pos*3.*(rel_pos - rel_space)/adjustment.get_page_size()
                          rel_pos = 0. if rel_pos <= 0 else rel_pos
                      else:
                          # and jump to the end of the scroller space if close to the upper limit
                          rel_pos = adjustment.get_upper() if rel_pos + 2*entry_widget_scroll_offset > adjustment.get_upper() else rel_pos
                  self._put_horizontal_scrollbar_onto_rel_pos(rel_pos)