]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - contrib/bobtoolz/DTreePlanter.h
ported bobtoolz
[xonotic/netradiant.git] / contrib / bobtoolz / DTreePlanter.h
index 61bc1e8950e50130b2a4a79250aa1954ce0e21d7..7fceba3aa665d19c1f71e2cfc6c896ea187ef6ee 100644 (file)
@@ -39,9 +39,16 @@ typedef struct treeModel_s {
 
 class DTreePlanter {
   MouseEventHandlerId m_mouseDown;
 
 class DTreePlanter {
   MouseEventHandlerId m_mouseDown;
+  SignalHandlerId m_destroyed;
 public:
        SignalHandlerResult mouseDown(const WindowVector& position, ButtonIdentifier button, ModifierFlags modifiers);
   typedef Member3<DTreePlanter, const WindowVector&, ButtonIdentifier, ModifierFlags, SignalHandlerResult, &DTreePlanter::mouseDown> MouseDownCaller;
 public:
        SignalHandlerResult mouseDown(const WindowVector& position, ButtonIdentifier button, ModifierFlags modifiers);
   typedef Member3<DTreePlanter, const WindowVector&, ButtonIdentifier, ModifierFlags, SignalHandlerResult, &DTreePlanter::mouseDown> MouseDownCaller;
+       void destroyed()
+  {
+    m_mouseDown = MouseEventHandlerId();
+    m_destroyed = SignalHandlerId();
+  }
+  typedef Member<DTreePlanter, void, &DTreePlanter::destroyed> DestroyedCaller;
 
   DTreePlanter() {
                m_numModels =   0;
 
   DTreePlanter() {
                m_numModels =   0;
@@ -83,11 +90,19 @@ public:
                }
 
     m_mouseDown = GlobalRadiant().XYWindowMouseDown_connect(makeSignalHandler3(MouseDownCaller(), *this));
                }
 
     m_mouseDown = GlobalRadiant().XYWindowMouseDown_connect(makeSignalHandler3(MouseDownCaller(), *this));
+    m_destroyed = GlobalRadiant().XYWindowDestroyed_connect(makeSignalHandler(DestroyedCaller(), *this));
        }
 
   virtual ~DTreePlanter()
   {
        }
 
   virtual ~DTreePlanter()
   {
-    GlobalRadiant().XYWindowMouseDown_disconnect(m_mouseDown);
+    if(!m_mouseDown.isNull())
+    {
+      GlobalRadiant().XYWindowMouseDown_disconnect(m_mouseDown);
+    }
+    if(!m_destroyed.isNull())
+    {
+      GlobalRadiant().XYWindowDestroyed_disconnect(m_destroyed);
+    }
   }
 
 #define MT(t)  string_equal_nocase( pToken, t )
   }
 
 #define MT(t)  string_equal_nocase( pToken, t )