Author: matt
Date: 2011-01-10 08:56:37 -0800 (Mon, 10 Jan 2011)
New Revision: 8243
Log:
Added destructor code for Wrapper<->Object dependency.

Modified:
   branches/branch-3.0-2011/fltk3/Object.h
   branches/branch-3.0-2011/fltk3/Wrapper.h
   branches/branch-3.0-2011/src/Fl_Widget.cxx

Modified: branches/branch-3.0-2011/fltk3/Object.h
===================================================================
--- branches/branch-3.0-2011/fltk3/Object.h     2011-01-10 16:27:25 UTC (rev 
8242)
+++ branches/branch-3.0-2011/fltk3/Object.h     2011-01-10 16:56:37 UTC (rev 
8243)
@@ -44,7 +44,7 @@
   public:
     Object() 
     : pWrapper(0L) { }
-    virtual ~Object() { }
+    virtual ~Object();
     Wrapper *wrapper() { return this?pWrapper:0L; }
     void wrapper(Wrapper *w) { pWrapper = w; }
   };

Modified: branches/branch-3.0-2011/fltk3/Wrapper.h
===================================================================
--- branches/branch-3.0-2011/fltk3/Wrapper.h    2011-01-10 16:27:25 UTC (rev 
8242)
+++ branches/branch-3.0-2011/fltk3/Wrapper.h    2011-01-10 16:56:37 UTC (rev 
8243)
@@ -79,8 +79,6 @@
 
 namespace fltk3 {
   
-  class Object; 
-
 /**
  * \brief a base class for any kind of langage wrapper around FLTK3.
  */
@@ -90,14 +88,15 @@
   public:
     Wrapper() 
     : _p(0L), pVCalls(0) { }
-    virtual ~Wrapper() { }
+    virtual ~Wrapper();
     
     unsigned int pVCalls;
-    static const unsigned int pVCallWidgetDraw   = 1<<0;
-    static const unsigned int pVCallWidgetHandle = 1<<1;
-    static const unsigned int pVCallWidgetResize = 1<<2;
-    static const unsigned int pVCallWidgetShow   = 1<<3;
-    static const unsigned int pVCallWidgetHide   = 1<<4;
+    static const unsigned int pVCallDtor          = 1<<0;
+    static const unsigned int pVCallWidgetDraw    = 1<<1;
+    static const unsigned int pVCallWidgetHandle  = 1<<2;
+    static const unsigned int pVCallWidgetResize  = 1<<3;
+    static const unsigned int pVCallWidgetShow    = 1<<4;
+    static const unsigned int pVCallWidgetHide    = 1<<5;
 
     virtual void draw() { /* call _p->draw() with a flag set */ }
   };

Modified: branches/branch-3.0-2011/src/Fl_Widget.cxx
===================================================================
--- branches/branch-3.0-2011/src/Fl_Widget.cxx  2011-01-10 16:27:25 UTC (rev 
8242)
+++ branches/branch-3.0-2011/src/Fl_Widget.cxx  2011-01-10 16:56:37 UTC (rev 
8243)
@@ -359,6 +359,23 @@
 }
 
 
+
+fltk3::Object::~Object() {
+  if ( pWrapper && !(pWrapper->pVCalls&Wrapper::pVCallDtor) ) {
+    pWrapper->pVCalls |= Wrapper::pVCallDtor;
+    delete pWrapper;
+  }
+}
+
+fltk3::Wrapper::~Wrapper() {
+  if ( !(pVCalls&pVCallDtor) ) {
+    pVCalls |= pVCallDtor;
+    delete _p;
+  }
+}
+
+
+
 //
 // End of "$Id$".
 //

_______________________________________________
fltk-commit mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-commit

Reply via email to