# matplotlib__matplotlib-25442
# Loki Mode Multi-Agent Patch
# Attempts: 1

Based on the bug report and architect's analysis, I have sufficient information to generate the patch. The traceback shows:

1. Line 1560: `_check_still_parented()` calls `self.disconnect()` when the artist's figure is `None`
2. Line 1568: `disconnect()` tries to access `self.canvas.mpl_disconnect(cid)`
3. Line 1517: `canvas` property is `lambda self: self.ref_artist.figure.canvas`

When `ref_artist.figure` is `None`, accessing `.canvas` fails. The fix should guard against this in the `disconnect()` method.

--- a/lib/matplotlib/offsetbox.py
+++ b/lib/matplotlib/offsetbox.py
@@ -1563,6 +1563,8 @@ class DraggableBase:
             self.cids.clear()
 
     def disconnect(self):
-        """Disconnect the callbacks."""
-        for cid in self.cids:
-            self.canvas.mpl_disconnect(cid)
-        self.cids.clear()
+        """Disconnect the callbacks."""
+        if self.ref_artist.figure is not None:
+            for cid in self.cids:
+                self.canvas.mpl_disconnect(cid)
+        self.cids.clear()