From: Enlightenment C. <no...@cv...> - 2007-10-03 22:49:33
|
Enlightenment CVS committal Author : cmarcelo Project : e17 Module : libs/etk Dir : e17/libs/etk/src/lib Modified Files: etk_signal.c etk_signal.h Log Message: Minor changes in signals. - export lookup_by_code and lookup_by_name (mainly for bindings' sake) - fix disconnect_all_by_code name - when emitting, get the next in the list first, so a signal can disconnect itself without break the chain of emission =================================================================== RCS file: /cvs/e/e17/libs/etk/src/lib/etk_signal.c,v retrieving revision 1.38 retrieving revision 1.39 diff -u -3 -r1.38 -r1.39 --- etk_signal.c 2 Oct 2007 21:37:09 -0000 1.38 +++ etk_signal.c 3 Oct 2007 22:49:28 -0000 1.39 @@ -138,7 +138,7 @@ * * assumes @a signal_name and @a type to be valid. */ -Etk_Signal *etk_signal_lookup(const char *signal_name, Etk_Type *type) +Etk_Signal *etk_signal_lookup_by_name(const char *signal_name, Etk_Type *type) { unsigned i; @@ -152,6 +152,28 @@ return NULL; } +/** + * @brief Gets the signal corresponding to the code and the object type. + * + * assumes @a signal_name and @a type to be valid. + */ +Etk_Signal *etk_signal_lookup_by_code(int signal_code, Etk_Type *type) +{ + if (!type) + return NULL; + + if (signal_code < 0 || signal_code >= type->signals_count) + { + ETK_WARNING("Invalid signal lookup: the type \"%s\" doesn't " + "have a signal with code \"%d\"", type->name, + signal_code); + return NULL; + } + + return type->signals[signal_code]; +} + + /** * @brief Gets the signal code corresponding to the name and the object type. @@ -162,7 +184,7 @@ { Etk_Signal *signal; - signal = etk_signal_lookup(signal_name, type); + signal = etk_signal_lookup_by_name(signal_name, type); if (signal) return signal->code; else @@ -446,7 +468,7 @@ * @param signal_code the code of the signal for which all callbacks will be disconnected * @param object the object for which all callbacks will be disconnected */ -void etk_signal_disconnect_all_code(int signal_code, Etk_Object *object) +void etk_signal_disconnect_all_by_code(int signal_code, Etk_Object *object) { Evas_List *c; Etk_Signal_Callback *signal_callback; @@ -487,7 +509,7 @@ signal_code = etk_signal_lookup_code(signal_name, etk_object_object_type_get(object)); - etk_signal_disconnect_all_code(signal_code, object); + etk_signal_disconnect_all_by_code(signal_code, object); } /** @@ -802,7 +824,7 @@ if (!object || !signal_name) return ETK_FALSE; - signal = etk_signal_lookup(signal_name, etk_object_object_type_get(object)); + signal = etk_signal_lookup_by_name(signal_name, etk_object_object_type_get(object)); if (!signal) { ETK_WARNING("Invalid signal emission: the object type doesn't have " @@ -869,12 +891,13 @@ etk_object_signal_callbacks_get(object, signal->code, &callbacks); while (keep_emission && callbacks && object_ptr) { - va_copy(args2, args); callback = callbacks->data; + callbacks = callbacks->next; + + va_copy(args2, args); etk_signal_callback_call_valist(signal, callback, object, &keep_emission, args2); va_end(args2); - callbacks = callbacks->next; } } =================================================================== RCS file: /cvs/e/e17/libs/etk/src/lib/etk_signal.h,v retrieving revision 1.24 retrieving revision 1.25 diff -u -3 -r1.24 -r1.25 --- etk_signal.h 2 Oct 2007 21:37:09 -0000 1.24 +++ etk_signal.h 3 Oct 2007 22:49:28 -0000 1.25 @@ -142,7 +142,8 @@ Evas_List * etk_signal_get_all(); const Etk_Type * etk_signal_object_type_get(Etk_Signal *signal); -Etk_Signal *etk_signal_lookup(const char *signal_name, Etk_Type *type); +Etk_Signal *etk_signal_lookup_by_code(int signal_code, Etk_Type *type); +Etk_Signal *etk_signal_lookup_by_name(const char *signal_name, Etk_Type *type); /** @} */ |