<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def on_preliminary_config_changed(self, config_m, prop_name, info):
 """Callback when a preliminary config value has been changed Mainly collects information, delegates handling further to _handle_config_update :param ConfigModel config_m: The config model that has been changed :param str prop_name: Should always be 'preliminary_config' :param dict info: Information e.g. about the changed config key """

        self.check_for_preliminary_config()

        method_name = info['method_name']  # __setitem__, __delitem__, clear, ...

        if method_name in ['__setitem__', '__delitem__']:
            config_key = info['args'][0]
            self._handle_config_update(config_m, config_key)
        # Probably the preliminary config has been cleared, update corresponding list stores
        elif config_m is self.core_config_model:
            self.update_core_config_list_store()
            self.update_libraries_list_store()
        else:
            self.update_gui_config_list_store()
            self.update_shortcut_settings()