docs: def _on_shortcut_changed(self, renderer, path, new_shortcuts):
          """Callback handling a change of a shortcut
  
          :param Gtk.CellRenderer renderer: Cell renderer showing the shortcut
          :param path: Path of shortcuts within the list store
          :param str new_shortcuts: New shortcuts
          """
          action = self.shortcut_list_store[int(path)][self.KEY_STORAGE_ID]
          old_shortcuts = self.gui_config_model.get_current_config_value("SHORTCUTS", use_preliminary=True)[action]
  
          from ast import literal_eval
          try:
              new_shortcuts = literal_eval(new_shortcuts)
              if not isinstance(new_shortcuts, list) and \
                 not all([isinstance(shortcut, string_types) for shortcut in new_shortcuts]):
                  raise ValueError()
          except (ValueError, SyntaxError):
              logger.warning("Shortcuts must be a list of strings")
              new_shortcuts = old_shortcuts
  
          shortcuts = self.gui_config_model.get_current_config_value("SHORTCUTS", use_preliminary=True,  default={})
          shortcuts[action] = new_shortcuts
          self.gui_config_model.set_preliminary_config_value("SHORTCUTS", shortcuts)
          self._select_row_by_column_value(self.view['shortcut_tree_view'], self.shortcut_list_store,
                                           self.KEY_STORAGE_ID, action)