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)