Hi Philipp The attached patch fixes it for me. It sets a path for the cookie. It gets the path either from the 'path' attribute (if root_object is a TreeObjectWrapper) or from 'getPhysicalPath'. The 'path' attribute on TreeObjectWrapper is initialised using 'getPhysicalPath' if it was not passed in. The patch changes the signature of TreeObjectWrapper.__init__, and makes assumptions about the use of the 'path' attribute. -- Jean Jordaan http://www.upfrontsystems.co.za diff -ru /usr/local/zope/Products/ZopeTree/TreeObjectWrapper.py ZopeTree/TreeObjectWrapper.py --- /usr/local/zope/Products/ZopeTree/TreeObjectWrapper.py Thu Mar 13 10:34:38 2003 +++ ZopeTree/TreeObjectWrapper.py Thu Mar 27 10:03:14 2003 @@ -29,8 +29,11 @@ __allow_access_to_unprotected_subobjects__ = 1 - def __init__(self, path, obj): - self.path = path + def __init__(self, obj, path=None): + if path: + self.path = path # njj: How is this intended to be used? + else: + self.path = '/'.join(obj.getPhysicalPath()); self.object = obj self.id = obj.getId() self.folderish = obj.isPrincipiaFolderish diff -ru /usr/local/zope/Products/ZopeTree/ZopeTree.py ZopeTree/ZopeTree.py --- /usr/local/zope/Products/ZopeTree/ZopeTree.py Thu Mar 27 09:27:54 2003 +++ ZopeTree/ZopeTree.py Thu Mar 27 10:19:41 2003 @@ -103,8 +103,11 @@ def __init__(self, root_object, id_attr='getId', children_attr='objectValues', request=None, request_variable='tree-expansion'): tree_expansion = request.get(request_variable, "") + # If root_object is a TreeObjectWrapper, it has a path attribute + path = getattr(root_object, 'path', + '/'.join(root_object.getPhysicalPath())) if tree_expansion: - request.RESPONSE.setCookie(request_variable, tree_expansion) # set a cookie right away + request.RESPONSE.setCookie(request_variable, tree_expansion, path=path) # set a cookie right away expanded_nodes = self.decodeTreeExpansion(tree_expansion) else: expanded_nodes = []