Enlightenment CVS committal Author : moom Project : e17 Module : proto
Dir : e17/proto/etk/src/lib Modified Files: etk_signal.c etk_widget.c Log Message: * Stop calling the signal callbacks when the object is destroyed by a previous callback =================================================================== RCS file: /cvs/e/e17/proto/etk/src/lib/etk_signal.c,v retrieving revision 1.13 retrieving revision 1.14 diff -u -3 -r1.13 -r1.14 --- etk_signal.c 26 Jul 2006 14:57:18 -0000 1.13 +++ etk_signal.c 8 Aug 2006 00:18:40 -0000 1.14 @@ -354,27 +354,30 @@ va_copy(args2, args); /* We call the callbacks to call before the default handler */ - callbacks = NULL; - etk_object_signal_callbacks_get(object, signal, &callbacks, ETK_FALSE); - while (!emitted_signal->stop_emission && callbacks && object_ptr) + if (object_ptr) { - callback = callbacks->data; - if (!return_value_set || !signal->accumulator) + callbacks = NULL; + etk_object_signal_callbacks_get(object, signal, &callbacks, ETK_FALSE); + while (!emitted_signal->stop_emission && callbacks && object_ptr) { - etk_signal_callback_call_valist(callback, object, return_value, args2); - return_value_set = ETK_TRUE; - } - else - { - etk_signal_callback_call_valist(callback, object, result, args2); - signal->accumulator(return_value, result, signal->accum_data); + callback = callbacks->data; + if (!return_value_set || !signal->accumulator) + { + etk_signal_callback_call_valist(callback, object, return_value, args2); + return_value_set = ETK_TRUE; + } + else + { + etk_signal_callback_call_valist(callback, object, result, args2); + signal->accumulator(return_value, result, signal->accum_data); + } + callbacks = evas_list_remove_list(callbacks, callbacks); } - callbacks = evas_list_remove_list(callbacks, callbacks); + callbacks = evas_list_free(callbacks); } - callbacks = evas_list_free(callbacks); /* Calls the default handler */ - if (!emitted_signal->stop_emission && object_ptr && signal->default_handler_offset >= 0 && signal->marshaller) + if (object_ptr && !emitted_signal->stop_emission && signal->default_handler_offset >= 0 && signal->marshaller) { Etk_Signal_Callback_Function *default_handler; @@ -393,26 +396,29 @@ } } } - + /* We call the callbacks to call after the default handler */ - callbacks = NULL; - etk_object_signal_callbacks_get(object, signal, &callbacks, ETK_TRUE); - while (!emitted_signal->stop_emission && callbacks && object_ptr) + if (object_ptr) { - callback = callbacks->data; - if (!return_value_set || !signal->accumulator) + callbacks = NULL; + etk_object_signal_callbacks_get(object, signal, &callbacks, ETK_TRUE); + while (!emitted_signal->stop_emission && callbacks && object_ptr) { - etk_signal_callback_call_valist(callback, object, return_value, args2); - return_value_set = ETK_TRUE; - } - else - { - etk_signal_callback_call_valist(callback, object, result, args2); - signal->accumulator(return_value, result, signal->accum_data); + callback = callbacks->data; + if (!return_value_set || !signal->accumulator) + { + etk_signal_callback_call_valist(callback, object, return_value, args2); + return_value_set = ETK_TRUE; + } + else + { + etk_signal_callback_call_valist(callback, object, result, args2); + signal->accumulator(return_value, result, signal->accum_data); + } + callbacks = evas_list_remove_list(callbacks, callbacks); } - callbacks = evas_list_remove_list(callbacks, callbacks); + callbacks = evas_list_free(callbacks); } - callbacks = evas_list_free(callbacks); if (object_ptr) etk_object_weak_pointer_remove(object, &object_ptr); =================================================================== RCS file: /cvs/e/e17/proto/etk/src/lib/etk_widget.c,v retrieving revision 1.62 retrieving revision 1.63 diff -u -3 -r1.62 -r1.63 --- etk_widget.c 4 Aug 2006 20:05:55 -0000 1.62 +++ etk_widget.c 8 Aug 2006 00:18:40 -0000 1.63 @@ -2333,6 +2333,7 @@ evas_event->canvas.y >= widget->geometry.y && evas_event->canvas.y <= widget->geometry.y + widget->geometry.h) etk_signal_emit(_etk_widget_signals[ETK_WIDGET_MOUSE_CLICK_SIGNAL], ETK_OBJECT(widget), NULL, &event); + /* TODO: what if the widget is destroyed by one of the callbacks (recurrent problem!!!) ?? */ if (widget->repeat_mouse_events && widget->parent) _etk_widget_mouse_up_cb(widget->parent, evas, NULL, event_info); } ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs