diff options
author | David Thompson <dthompson@vistahigherlearning.com> | 2019-07-15 07:45:47 -0400 |
---|---|---|
committer | David Thompson <dthompson@vistahigherlearning.com> | 2019-07-15 07:45:47 -0400 |
commit | a8a03957c563fc87272e51de3b69d11d57828aae (patch) | |
tree | b52f6a18ef5cb3a6c78f5301b64e0143ea5ae59e | |
parent | 4a9357d489352102570a6a2d7afb3bf096105195 (diff) |
node: Noop when detaching a node without a parent.
In practice, throwing an error was real annoying.
-rw-r--r-- | starling/node.scm | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/starling/node.scm b/starling/node.scm index 920a9bd..a0141c1 100644 --- a/starling/node.scm +++ b/starling/node.scm @@ -247,15 +247,14 @@ represented as a ratio in the range [0, 1]." (define-method (detach (node <node>)) "Detach NODE from its parent." (let ((p (parent node))) - (unless p - (error "node has no parent" node)) - (set! (children p) (delq node (children p))) - (hashq-remove! (children-map p) (name node)) - ;; Detaching deactives the node and all of its children. - (when (active? node) - (deactivate node)) - (set! (parent node) #f) - (on-detach p node))) + (when p + (set! (children p) (delq node (children p))) + (hashq-remove! (children-map p) (name node)) + ;; Detaching deactives the node and all of its children. + (when (active? node) + (deactivate node)) + (set! (parent node) #f) + (on-detach p node)))) (define-method (detach . nodes) "Detach all NODES from their respective parents." |