I have a list of objects that need the same events. Each object contains multiple CEGUI::Window's and those windows also have some duplicate events. As these items are being created i am passing a SubscriberSlot to my object ctor and then subscribing the events as I create the windows. Maybe an example will make it clearer.
Code: Select all
Row::Row(SubscriberSlot click_event) {
name = CreateTextWindow();
name->subscribeEvent(Window::EventMouseClick, click_event);
pic = CreateImageWindow();
pic->subscribeEvent(Window::EventMouseClick, click_event);
base = CreateEmptyWindow();
base->subscribeEvent(WIndow::EventMouseClick, click_event);
base->addChild(name);
base->addChild(pic);
}
With just two windows (sibling windows) it was working. As I add more I begin to have problems. If I have a parent and a child window with the same event the problem shows up every time. Here is where in the code the debugger shows me the issue is happening.
Code: Select all
void SubscriberSlot::cleanup()
{
CEGUI_DELETE_AO d_functor_impl; // <== this line here
d_functor_impl = 0;
}
I'm guessing that it is trying to delete the functor that has already been deleted. But I have no idea why. I am using the same pattern I was using in 0.7 and had no issues there.
Anyway, the obvious work-around was to not pass SubscriberSlots and instead use something like std::function.
Code: Select all
01/09/2013 15:37:08 (Std) ---- Version: 0.8.2 (Build: Sep 1 2013 Debug GNU/Linux g++ 4.7.2 64 bit) ----
01/09/2013 15:37:08 (Std) ---- Renderer module is: CEGUI::OpenGLRenderer - Official OpenGL based 2nd generation renderer module. TextureTarget support enabled via FBO extension. ----
01/09/2013 15:37:08 (Std) ---- XML Parser module is: CEGUI::RapidXMLParser - Official RapidXML based parser module for CEGUI ----
01/09/2013 15:37:08 (Std) ---- Image Codec module is: SILLYImageCodec - Official SILLY based image codec ----
01/09/2013 15:37:08 (Std) ---- Scripting module is: None ----