diff --git a/external/airtaudio b/external/airtaudio index bb547a72..b0eb151d 160000 --- a/external/airtaudio +++ b/external/airtaudio @@ -1 +1 @@ -Subproject commit bb547a72d99802ac5d9a99c843549f175c856826 +Subproject commit b0eb151df0802a1d63a5cb6b6812a4460ddd09a1 diff --git a/external/egami b/external/egami index bb58a8c0..34eac48f 160000 --- a/external/egami +++ b/external/egami @@ -1 +1 @@ -Subproject commit bb58a8c06e30cf141a59f8a09a544919c1f695ed +Subproject commit 34eac48f5114151bab137e9cb177513c7cf42d96 diff --git a/sources/ewol/Dimension.h b/sources/ewol/Dimension.h index cbd2999a..f078f463 100644 --- a/sources/ewol/Dimension.h +++ b/sources/ewol/Dimension.h @@ -65,7 +65,7 @@ namespace ewol { /** * @brief Destructor */ - ~Dimension(); + virtual ~Dimension(); /** * @brief string cast : diff --git a/sources/ewol/compositing/Area.h b/sources/ewol/compositing/Area.h index e5eb9308..172126bc 100644 --- a/sources/ewol/compositing/Area.h +++ b/sources/ewol/compositing/Area.h @@ -47,7 +47,7 @@ namespace ewol { /** * @brief generic destructor */ - ~Area(); + virtual ~Area(); public: /** * @brief draw All the refistered text in the current element on openGL diff --git a/sources/ewol/compositing/Drawing.h b/sources/ewol/compositing/Drawing.h index c08c9f60..d19109f5 100644 --- a/sources/ewol/compositing/Drawing.h +++ b/sources/ewol/compositing/Drawing.h @@ -43,7 +43,7 @@ namespace ewol { /** * @brief Basic destructor */ - ~Drawing(); + virtual ~Drawing(); private: /** * @brief load the openGL program and get all the ID needed diff --git a/sources/ewol/compositing/Shaper.h b/sources/ewol/compositing/Shaper.h index 000a119b..f4940364 100644 --- a/sources/ewol/compositing/Shaper.h +++ b/sources/ewol/compositing/Shaper.h @@ -101,7 +101,7 @@ namespace ewol { /** * @brief generic destructor */ - ~Shaper(); + virtual ~Shaper(); public: /** * @brief draw All the refistered text in the current element on openGL diff --git a/sources/ewol/context/ConfigFont.h b/sources/ewol/context/ConfigFont.h index 1035784c..8e583948 100644 --- a/sources/ewol/context/ConfigFont.h +++ b/sources/ewol/context/ConfigFont.h @@ -19,7 +19,7 @@ namespace ewol { * Constructor / destructor */ ConfigFont(); - ~ConfigFont(); + virtual ~ConfigFont(); private: std::string m_folder; public: diff --git a/sources/ewol/context/IOs/OpenglView.h b/sources/ewol/context/IOs/OpenglView.h index 37c8e855..da41a096 100644 --- a/sources/ewol/context/IOs/OpenglView.h +++ b/sources/ewol/context/IOs/OpenglView.h @@ -17,13 +17,12 @@ Note that setting the view non-opaque will only work if the EAGL surface has an alpha channel. */ @interface OpenglView : UIView { - @private - CAEAGLLayer* _eaglLayer; + CAEAGLLayer* _eaglLayer; EAGLContext *_context; - GLuint _colorRenderBuffer; - GLuint _depthRenderBuffer; + GLuint _colorRenderBuffer; + GLuint _depthRenderBuffer; /* OpenGL names for the renderbuffer and framebuffers used to render to this view */ GLuint viewRenderbuffer, viewFramebuffer; diff --git a/sources/ewol/object/Manager.cpp b/sources/ewol/object/Manager.cpp index 55cd0b1e..d1226899 100644 --- a/sources/ewol/object/Manager.cpp +++ b/sources/ewol/object/Manager.cpp @@ -112,6 +112,7 @@ void ewol::object::Manager::remove(const ewol::object::Shared& _ob EWOL_ERROR("Try to Auto-Remove (nullptr) Object"); return; } + int32_t count = 0; auto it(m_eObjectListActive.begin()); while (it != m_eObjectListActive.end()) { if (*it == _object) { @@ -120,13 +121,19 @@ void ewol::object::Manager::remove(const ewol::object::Shared& _ob EWOL_DEBUG("Auto-Remove Object : [" << _object->getId() << "] type='" << _object->getObjectType() << "' name=" << _object->getName()); informOneObjectIsRemoved(_object); ewol::getContext().forceRedrawAll(); - EWOL_DEBUG("Auto-Remove Object ... done (have " << _object->getRefCount() << " references)"); + EWOL_VERBOSE("Auto-Remove Object ... done (have " << _object->getRefCount() << " references)"); it = m_eObjectListActive.begin(); + count++; } else { ++it; } } - EWOL_ERROR("Try to Auto-Remove Object that is not referenced ..."); + if (count == 0) { + EWOL_ERROR("Try to Auto-Remove Object that is not referenced ..."); + } else if ( count>1 + || count<0) { + EWOL_ERROR("Remove more than one object in the system list ==> this is a real problem ..."); + } } // clean all Object that request an autoRemove ... diff --git a/sources/ewol/object/Manager.h b/sources/ewol/object/Manager.h index 2f3d7a0e..33e633c5 100644 --- a/sources/ewol/object/Manager.h +++ b/sources/ewol/object/Manager.h @@ -25,7 +25,7 @@ namespace ewol { Context& m_context; public: Manager(Context& _context); - ~Manager(); + virtual ~Manager(); /** * @brief remove all resources (un-init) out of the destructor (due to the system implementation) */ diff --git a/sources/ewol/object/MultiCast.h b/sources/ewol/object/MultiCast.h index c248f310..a5feb1d7 100644 --- a/sources/ewol/object/MultiCast.h +++ b/sources/ewol/object/MultiCast.h @@ -32,7 +32,7 @@ namespace ewol { std::vector m_messageList; //!< List of all message ... public: MultiCast(); - ~MultiCast(); + virtual ~MultiCast(); void clear(); void anonymousSend(const char* const _messageId, const std::string& _data) { send(nullptr, _messageId, _data); diff --git a/sources/ewol/object/Object.cpp b/sources/ewol/object/Object.cpp index 7bf923f7..9cda9373 100644 --- a/sources/ewol/object/Object.cpp +++ b/sources/ewol/object/Object.cpp @@ -59,18 +59,40 @@ void ewol::Object::operator delete[](void* _ptr, std::size_t _sz) { EWOL_CRITICAL("custom delete for size ==> not implemented ..." << _sz); ::operator delete(_ptr); } +#ifdef DEBUG +void ewol::Object::incOwnerCount() { + std::unique_lock lock(m_lockRefCount); + m_ownerCount++; + if (m_ownerCount>1) { + EWOL_CRITICAL("Multiple Owner on one Object ==> very bad ... " << m_ownerCount); + } +} + +void ewol::Object::decOwnerCount() { + std::unique_lock lock(m_lockRefCount); + m_ownerCount--; + if (m_ownerCount<0) { + EWOL_CRITICAL("Owner remove the owner counter under 1 ==> very bad ... " << m_ownerCount); + } +} +#endif void ewol::Object::autoDestroy() { EWOL_VERBOSE("Destroy object : [" << getId() << "] type:" << getObjectType()); + bool needRemove = false; { std::unique_lock lock(m_lockRefCount); if (m_isDestroyed == true) { EWOL_WARNING("Request remove of a removed object"); return; + } else { + m_isDestroyed = true; + needRemove = true; } - m_isDestroyed = true; } - getObjectManager().remove(this); + if (needRemove == true) { + getObjectManager().remove(this); + } } void ewol::Object::removeObject() { @@ -89,6 +111,9 @@ void ewol::Object::respownObject() { ewol::Object::Object() : m_objRefCount(1), + #ifdef DEBUG + m_ownerCount(0), + #endif m_isDestroyed(false), m_static(false), m_isResource(false) { @@ -100,6 +125,9 @@ ewol::Object::Object() : } ewol::Object::Object(const std::string& _name) : m_objRefCount(1), + #ifdef DEBUG + m_ownerCount(0), + #endif m_isDestroyed(false), m_static(false), m_name(_name), @@ -114,12 +142,6 @@ ewol::Object::Object(const std::string& _name) : ewol::Object::~Object() { EWOL_DEBUG("delete Object : [" << m_uniqueId << "] : " << getTypeDescription() << " refcount=" << m_objRefCount); getMultiCast().rm(this); - for (size_t iii=0; iiilocalEventId != _generateEventId) { - EWOL_VERBOSE(" wrong event '" << m_externEvent[iii]->localEventId << "' != '" << _generateEventId << "'"); + if (it.localEventId != _generateEventId) { + EWOL_VERBOSE(" wrong event '" << it.localEventId << "' != '" << _generateEventId << "'"); continue; } - if (m_externEvent[iii]->destObject == nullptr) { + if (it.destObject == nullptr) { EWOL_VERBOSE(" nullptr dest"); continue; } - if (m_externEvent[iii]->overloadData.size() <= 0){ - ewol::object::Message tmpMsg(this, m_externEvent[iii]->destEventId, _data); + if (it.overloadData.size() <= 0){ + ewol::object::Message tmpMsg(this, it.destEventId, _data); EWOL_VERBOSE("send message " << tmpMsg); - m_externEvent[iii]->destObject->onReceiveMessage(tmpMsg); + it.destObject->onReceiveMessage(tmpMsg); } else { // set the user requested data ... - ewol::object::Message tmpMsg(this, m_externEvent[iii]->destEventId, m_externEvent[iii]->overloadData); + ewol::object::Message tmpMsg(this, it.destEventId, it.overloadData); EWOL_VERBOSE("send message " << tmpMsg); - m_externEvent[iii]->destObject->onReceiveMessage(tmpMsg); + it.destObject->onReceiveMessage(tmpMsg); } } if (nbObject > getObjectManager().getNumberObject()) { @@ -227,19 +251,15 @@ void ewol::Object::registerOnEvent(const ewol::object::Shared& _de if ( _eventId[0] == '*' && _eventId[1] == '\0') { EWOL_VERBOSE("Register on all event ..."); - for(size_t iii=0; iiilocalEventId = m_availlableEventId[iii]; - tmpEvent->destObject = _destinationObject; - tmpEvent->overloadData = _overloadData; + for(auto &it : m_availlableEventId) { + ewol::object::EventExtGen tmpEvent; + tmpEvent.localEventId = it; + tmpEvent.destObject = _destinationObject; + tmpEvent.overloadData = _overloadData; if (nullptr != _eventIdgenerated) { - tmpEvent->destEventId = _eventIdgenerated; + tmpEvent.destEventId = _eventIdgenerated; } else { - tmpEvent->destEventId = m_availlableEventId[iii]; + tmpEvent.destEventId = it; } m_externEvent.push_back(tmpEvent); } @@ -247,18 +267,18 @@ void ewol::Object::registerOnEvent(const ewol::object::Shared& _de } // check if event existed : bool findIt = false; - for(size_t iii=0; iii '" << _eventIdgenerated << "'"); break; } @@ -268,50 +288,54 @@ void ewol::Object::registerOnEvent(const ewol::object::Shared& _de EWOL_ERROR("Can not register event on this Type=" << getObjectType() << " event=\"" << _eventId << "\" == > unknow event"); return; } - ewol::object::EventExtGen * tmpEvent = new ewol::object::EventExtGen(); - if (nullptr == tmpEvent) { - EWOL_ERROR("Allocation error in Register Event..."); - return; - } - tmpEvent->localEventId = _eventId; - tmpEvent->destObject = _destinationObject; - tmpEvent->overloadData = _overloadData; + ewol::object::EventExtGen tmpEvent; + tmpEvent.localEventId = _eventId; + tmpEvent.destObject = _destinationObject; + tmpEvent.overloadData = _overloadData; if (nullptr != _eventIdgenerated) { - tmpEvent->destEventId = _eventIdgenerated; + tmpEvent.destEventId = _eventIdgenerated; } else { - tmpEvent->destEventId = _eventId; + tmpEvent.destEventId = _eventId; } m_externEvent.push_back(tmpEvent); } void ewol::Object::unRegisterOnEvent(const ewol::object::Shared& _destinationObject, - const char * _eventId) { - if (nullptr == _destinationObject) { + const char * _eventId) { + if (_destinationObject == nullptr) { EWOL_ERROR("Input ERROR nullptr pointer Object ..."); return; } // check if event existed : - for(int64_t iii = m_externEvent.size()-1; iii >= 0; --iii) { - if (m_externEvent[iii] == nullptr) { - continue; - } - if (m_externEvent[iii]->destObject != _destinationObject) { - continue; - } - if (_eventId == nullptr) { - m_externEvent.erase(m_externEvent.begin()+iii); - } else if (m_externEvent[iii]->localEventId == _eventId) { - m_externEvent.erase(m_externEvent.begin()+iii); + auto it(m_externEvent.begin()); + while(it != m_externEvent.end()) { + if (it->destObject == nullptr) { + m_externEvent.erase(it); + it = m_externEvent.begin(); + } else if ( it->destObject == _destinationObject + && it->localEventId == _eventId) { + m_externEvent.erase(it); + it = m_externEvent.begin(); + EWOL_INFO("[" << getId() << "] Remove extern event : to object id=" << _destinationObject->getId() << " event=" << _eventId); + } else { + ++it; } } } void ewol::Object::onObjectRemove(const ewol::object::Shared& _object) { EWOL_VERBOSE("[" << getId() << "] onObjectRemove(" << _object->getId() << ")"); - for(int32_t iii=m_externEvent.size()-1; iii >= 0; iii--) { - if (m_externEvent[iii] != nullptr) { - m_externEvent.erase(m_externEvent.begin()+iii); - EWOL_VERBOSE("[" << getId() << "] Remove extern event : to object id=" << _object->getId()); + auto it(m_externEvent.begin()); + while(it != m_externEvent.end()) { + if (it->destObject == nullptr) { + m_externEvent.erase(it); + it = m_externEvent.begin(); + } else if (it->destObject == _object) { + m_externEvent.erase(it); + it = m_externEvent.begin(); + EWOL_INFO("[" << getId() << "] Remove extern event : to object id=" << _object->getId()); + } else { + ++it; } } } diff --git a/sources/ewol/object/Object.h b/sources/ewol/object/Object.h index 47da1e90..857d12a1 100644 --- a/sources/ewol/object/Object.h +++ b/sources/ewol/object/Object.h @@ -69,6 +69,12 @@ namespace ewol { static void operator delete(void* _ptr, std::size_t _sz); //! @not-in-doc static void operator delete[](void* _ptr, std::size_t _sz); + #ifdef DEBUG + public: + int32_t m_ownerCount; + void incOwnerCount(); + void decOwnerCount(); + #endif private: static size_t m_valUID; //!< stic used for the unique ID definition public: @@ -157,7 +163,7 @@ namespace ewol { return m_uniqueId; }; private: - std::vector m_externEvent; //!< Generic list of event generation for output link + std::vector m_externEvent; //!< Generic list of event generation for output link std::vector m_availlableEventId; //!< List of all event availlable for this widget protected: /** diff --git a/sources/ewol/object/Owner.h b/sources/ewol/object/Owner.h index 05e102b3..f9bc5c0f 100644 --- a/sources/ewol/object/Owner.h +++ b/sources/ewol/object/Owner.h @@ -54,6 +54,9 @@ namespace ewol { return; } m_pointer->objRefCountIncrement(); + #ifdef DEBUG + m_pointer->incOwnerCount(); + #endif } template::value>::type> @@ -65,6 +68,9 @@ namespace ewol { m_pointer = _obj.get(); if (m_pointer != nullptr) { m_pointer->objRefCountIncrement(); + #ifdef DEBUG + m_pointer->incOwnerCount(); + #endif } return *this; } @@ -75,6 +81,9 @@ namespace ewol { m_pointer = _obj.get(); if (m_pointer != nullptr) { m_pointer->objRefCountIncrement(); + #ifdef DEBUG + m_pointer->incOwnerCount(); + #endif } return *this; } @@ -95,6 +104,9 @@ namespace ewol { delete tmp; } else { tmp->objRefCountDecrement(); + #ifdef DEBUG + tmp->decOwnerCount(); + #endif } } void resetShared() { @@ -111,6 +123,9 @@ namespace ewol { delete tmp; } else { tmp->objRefCountDecrement(); + #ifdef DEBUG + tmp->decOwnerCount(); + #endif } } T* get() noexcept { diff --git a/sources/ewol/object/RemoveEvent.h b/sources/ewol/object/RemoveEvent.h index 3e2548c5..f108ca05 100644 --- a/sources/ewol/object/RemoveEvent.h +++ b/sources/ewol/object/RemoveEvent.h @@ -19,7 +19,7 @@ namespace ewol { virtual void onObjectRemove(const ewol::object::Shared& _object) = 0; public: RemoveEvent(); - ~RemoveEvent(); + virtual ~RemoveEvent(); }; } }; diff --git a/sources/ewol/resource/ColorFile.cpp b/sources/ewol/resource/ColorFile.cpp index b82905fb..2abf85b5 100644 --- a/sources/ewol/resource/ColorFile.cpp +++ b/sources/ewol/resource/ColorFile.cpp @@ -48,7 +48,7 @@ void ewol::resource::ColorFile::reload() { EWOL_ERROR("Can not get basic array : 'color'"); return; } - for (int32_t iii = 0; iii < baseArray->size(); ++iii) { + for (size_t iii = 0; iii < baseArray->size(); ++iii) { ejson::Object* tmpObj = baseArray->getObject(iii); if (tmpObj == nullptr) { EWOL_DEBUG(" can not get object in 'color' id=" << iii); diff --git a/sources/ewol/resource/ConfigFile.cpp b/sources/ewol/resource/ConfigFile.cpp index 6ddc8b4d..358a6db6 100644 --- a/sources/ewol/resource/ConfigFile.cpp +++ b/sources/ewol/resource/ConfigFile.cpp @@ -29,7 +29,7 @@ ewol::resource::ConfigFile::ConfigFile(const std::string& _filename) : ewol::resource::ConfigFile::~ConfigFile() { // remove all element - for (size_t iii=0; iiigetRefCount() > 3) { continue; } + EWOL_DEBUG("Request remove of an resource (refcount in Low : " << (*it)->getRefCount() << ")"); m_resourceList.erase(it); it = m_resourceList.begin(); return true; diff --git a/sources/ewol/resource/Manager.h b/sources/ewol/resource/Manager.h index 0a0321da..3f6c1fe6 100644 --- a/sources/ewol/resource/Manager.h +++ b/sources/ewol/resource/Manager.h @@ -32,7 +32,7 @@ namespace ewol { * @brief Uninitiamize the resource manager, free all resources previously requested * @note when not free == > generate warning, because the segfault can appear after... */ - ~Manager(); + virtual ~Manager(); /** * @brief remove all resources (un-init) out of the destructor (due to the system implementation) */ diff --git a/sources/ewol/resource/Texture.h b/sources/ewol/resource/Texture.h index fb775290..fea76c6e 100644 --- a/sources/ewol/resource/Texture.h +++ b/sources/ewol/resource/Texture.h @@ -48,7 +48,7 @@ namespace ewol { Texture(const std::string& _filename); Texture(); public: - ~Texture(); + virtual ~Texture(); public: // you must set the size here, because it will be set in multiple of pow(2) void setImageSize(ivec2 newSize); diff --git a/sources/ewol/resource/TexturedFont.h b/sources/ewol/resource/TexturedFont.h index 107ab8f7..46b07d6e 100644 --- a/sources/ewol/resource/TexturedFont.h +++ b/sources/ewol/resource/TexturedFont.h @@ -47,7 +47,7 @@ namespace ewol { protected: TexturedFont(const std::string& _fontName); public: - ~TexturedFont(); + virtual ~TexturedFont(); public: /** * @brief get the display height of this font diff --git a/sources/ewol/widget/Composer.h b/sources/ewol/widget/Composer.h index f1b233c3..0dcf64a3 100644 --- a/sources/ewol/widget/Composer.h +++ b/sources/ewol/widget/Composer.h @@ -40,7 +40,7 @@ namespace ewol { /** * @brief Destructor */ - ~Composer(); + virtual ~Composer(); /** * @brief load a composition with a file * @param[in] _fileName Name of the file diff --git a/sources/ewol/widget/Container.h b/sources/ewol/widget/Container.h index 6bd672f8..feb9caf0 100644 --- a/sources/ewol/widget/Container.h +++ b/sources/ewol/widget/Container.h @@ -30,7 +30,7 @@ namespace ewol { /** * @brief Destructor */ - ~Container(); + virtual ~Container(); public: /** * @brief get the main node widget diff --git a/sources/ewol/widget/Container2.h b/sources/ewol/widget/Container2.h index bbf39536..540cec3a 100644 --- a/sources/ewol/widget/Container2.h +++ b/sources/ewol/widget/Container2.h @@ -34,7 +34,7 @@ namespace ewol { /** * @brief Destructor */ - ~Container2(); + virtual ~Container2(); private: /** * @brief Specify the current widget diff --git a/sources/ewol/widget/ContainerN.h b/sources/ewol/widget/ContainerN.h index d723e6fc..1ec1be6a 100644 --- a/sources/ewol/widget/ContainerN.h +++ b/sources/ewol/widget/ContainerN.h @@ -31,7 +31,7 @@ namespace ewol { /** * @brief Destructor */ - ~ContainerN(); + virtual ~ContainerN(); protected: bvec2 m_lockExpand; //!< Lock the expend of the sub widget to this one == > this permit to limit bigger subWidget bvec2 m_subExpend; //!< reference of the sub element expention requested. diff --git a/sources/ewol/widget/ListFileSystem.h b/sources/ewol/widget/ListFileSystem.h index ab3c303d..109a4170 100644 --- a/sources/ewol/widget/ListFileSystem.h +++ b/sources/ewol/widget/ListFileSystem.h @@ -37,7 +37,7 @@ namespace ewol { // TODO : Add a standalone configuration .. public: ListFileSystem(); - ~ListFileSystem(); + virtual ~ListFileSystem(); protected: ewol::object::Shared m_colorProperty; //!< theme color property. int32_t m_colorIdText; //!< Color of the text. diff --git a/sources/ewol/widget/Manager.h b/sources/ewol/widget/Manager.h index 12b6b796..4319cbe0 100644 --- a/sources/ewol/widget/Manager.h +++ b/sources/ewol/widget/Manager.h @@ -33,7 +33,7 @@ namespace ewol { int64_t m_lastPeriodicCallTime; //!< last call time ... public: Manager(); - ~Manager(); + virtual ~Manager(); void focusKeep(const ewol::object::Shared& _newWidget); // set the focus at the specific widget void focusSetDefault(const ewol::object::Shared& _newWidget); // select the default focus getter diff --git a/sources/ewol/widget/Widget.h b/sources/ewol/widget/Widget.h index 27632c1b..4b1de028 100644 --- a/sources/ewol/widget/Widget.h +++ b/sources/ewol/widget/Widget.h @@ -106,7 +106,7 @@ namespace ewol { unicodeValue = 0; keyboardMoveValue = ewol::key::keyboardUnknow; }; - ~EventShortCut() { }; + virtual ~EventShortCut() { }; }; /** * @brief Widget class is the main widget interface, it hase some generic properties: diff --git a/sources/ewol/widget/meta/ColorChooser.h b/sources/ewol/widget/meta/ColorChooser.h index fd6b41fa..9d5f6359 100644 --- a/sources/ewol/widget/meta/ColorChooser.h +++ b/sources/ewol/widget/meta/ColorChooser.h @@ -30,7 +30,7 @@ namespace ewol { static const char * const eventChange; public: ColorChooser(); - ~ColorChooser(); + virtual ~ColorChooser(); public: // Derived function virtual void onReceiveMessage(const ewol::object::Message& _msg); virtual void onObjectRemove(const ewol::object::Shared& _removeObject); diff --git a/sources/ewol/widget/meta/Parameter.h b/sources/ewol/widget/meta/Parameter.h index 403b42ba..a85bf2c9 100644 --- a/sources/ewol/widget/meta/Parameter.h +++ b/sources/ewol/widget/meta/Parameter.h @@ -32,7 +32,7 @@ namespace ewol { static const char * const eventClose; public: Parameter(); - ~Parameter(); + virtual ~Parameter(); public: // Derived function virtual void onReceiveMessage(const ewol::object::Message& _msg); virtual void onObjectRemove(const ewol::object::Shared& _removeObject); diff --git a/sources/ewol/widget/meta/ParameterList.h b/sources/ewol/widget/meta/ParameterList.h index 4ac1b44a..fcad3cff 100644 --- a/sources/ewol/widget/meta/ParameterList.h +++ b/sources/ewol/widget/meta/ParameterList.h @@ -30,7 +30,7 @@ namespace ewol { m_image(_image) { }; - ~elementPL() {}; + virtual ~elementPL() {}; }; /** diff --git a/sources/ewol/widget/meta/StdPopUp.h b/sources/ewol/widget/meta/StdPopUp.h index 8ca0e075..384881fd 100644 --- a/sources/ewol/widget/meta/StdPopUp.h +++ b/sources/ewol/widget/meta/StdPopUp.h @@ -48,7 +48,7 @@ namespace ewol { /** * @brief std-pop-up destructor. */ - ~StdPopUp(); + virtual ~StdPopUp(); protected: ewol::object::Shared m_title; //!< Title Label widget public: diff --git a/sources/lutin_ewol.py b/sources/lutin_ewol.py index ba14e7b4..cf0158b8 100755 --- a/sources/lutin_ewol.py +++ b/sources/lutin_ewol.py @@ -17,7 +17,7 @@ def create(target): myModule = module.Module(__file__, 'ewol', 'LIBRARY') # add extra compilation flags : - #myModule.add_extra_compile_flags() + myModule.add_extra_compile_flags() # add the file to compile: myModule.add_src_file([ 'ewol/ewol.cpp',