Code changes to support over-riding of callbacks registering in Template Core Objects...
authorSuresh Kumar N <suresh.n@samsung.com>
Wed, 12 Dec 2012 07:20:54 +0000 (12:50 +0530)
committerwootak.jung <wootak.jung@samsung.com>
Sun, 24 Mar 2013 09:03:05 +0000 (18:03 +0900)
include/core_object.h
packaging/libtcore.spec
src/core_object.c

index 5fc0080513043746c22350076c00f3f9eb3e71ba..991da721c094b8af601188270804421d4cc2a557 100644 (file)
@@ -51,39 +51,40 @@ typedef void (*CoreObjectCloneHook)(CoreObject *src, CoreObject *dest);
 typedef gboolean (*CoreObjectCallback)(CoreObject *co, const void *event_info, void *user_data);
 typedef TReturn (*CoreObjectDispatcher)(CoreObject *co, UserRequest *ur);
 
-CoreObject*      tcore_object_new(TcorePlugin *plugin, const char *name, TcoreHal *hal);
-void             tcore_object_free(CoreObject *co);
+CoreObject *tcore_object_new(TcorePlugin *plugin, const char *name, TcoreHal *hal);
+void tcore_object_free(CoreObject *co);
 
-TReturn          tcore_object_set_free_hook(CoreObject *co, CoreObjectFreeHook free_hook);
-TReturn          tcore_object_set_clone_hook(CoreObject *co, CoreObjectCloneHook clone_hook);
+TReturn tcore_object_set_free_hook(CoreObject *co, CoreObjectFreeHook free_hook);
+TReturn tcore_object_set_clone_hook(CoreObject *co, CoreObjectCloneHook clone_hook);
 
-CoreObject*      tcore_object_clone(CoreObject *src, TcorePlugin *new_parent, const char *new_name);
+CoreObject *tcore_object_clone(CoreObject *src, TcorePlugin *new_parent, const char *new_name);
 CoreObject *tcore_object_clone_template_object(TcorePlugin *p, const char *co_name, unsigned int co_type);
 
-TReturn          tcore_object_set_name(CoreObject *co, const char *name);
-const char*      tcore_object_ref_name(CoreObject *co);
+TReturn tcore_object_set_name(CoreObject *co, const char *name);
+const char *tcore_object_ref_name(CoreObject *co);
 
-TReturn          tcore_object_set_plugin(CoreObject *co, TcorePlugin *plugin);
-TcorePlugin*     tcore_object_ref_plugin(CoreObject *co);
+TReturn tcore_object_set_plugin(CoreObject *co, TcorePlugin *plugin);
+TcorePlugin *tcore_object_ref_plugin(CoreObject *co);
 
-TReturn          tcore_object_link_object(CoreObject *co, void *object);
-void*            tcore_object_ref_object(CoreObject *co);
+TReturn tcore_object_link_object(CoreObject *co, void *object);
+void *tcore_object_ref_object(CoreObject *co);
 
-TReturn          tcore_object_set_type(CoreObject *co, unsigned int type);
-unsigned int     tcore_object_get_type(CoreObject *co);
+TReturn tcore_object_set_type(CoreObject *co, unsigned int type);
+unsigned int tcore_object_get_type(CoreObject *co);
 
-TReturn          tcore_object_set_hal(CoreObject *co, TcoreHal *hal);
-TcoreHal*        tcore_object_get_hal(CoreObject *co);
+TReturn tcore_object_set_hal(CoreObject *co, TcoreHal *hal);
+TcoreHal *tcore_object_get_hal(CoreObject *co);
 
-TReturn          tcore_object_link_user_data(CoreObject *co, void *user_data);
-void*            tcore_object_ref_user_data(CoreObject *co);
+TReturn tcore_object_link_user_data(CoreObject *co, void *user_data);
+void *tcore_object_ref_user_data(CoreObject *co);
 
-TReturn          tcore_object_set_dispatcher(CoreObject *co, CoreObjectDispatcher func);
-TReturn          tcore_object_dispatch_request(CoreObject *co, UserRequest *ur);
+TReturn tcore_object_set_dispatcher(CoreObject *co, CoreObjectDispatcher func);
+TReturn tcore_object_dispatch_request(CoreObject *co, UserRequest *ur);
 
-TReturn          tcore_object_add_callback(CoreObject *co, const char *event, CoreObjectCallback callback, void *user_data);
-TReturn          tcore_object_del_callback(CoreObject *co, const char *event, CoreObjectCallback callback);
-TReturn          tcore_object_emit_callback(CoreObject *co, const char *event, const void *event_info);
+TReturn tcore_object_add_callback(CoreObject *co, const char *event, CoreObjectCallback callback, void *user_data);
+TReturn tcore_object_del_callback(CoreObject *co, const char *event, CoreObjectCallback callback);
+TReturn tcore_object_override_callback(CoreObject *co, const char *event, CoreObjectCallback callback, void *user_data);
+TReturn tcore_object_emit_callback(CoreObject *co, const char *event, const void *event_info);
 
 __END_DECLS
 
index 017c1c608564f4a30732871579f057f023acfda3..22c627d30468c69317ffcd9bf4d20ef12f0584c5 100644 (file)
@@ -1,6 +1,6 @@
 Name: libtcore
 Summary: Telephony-core library
-Version: 0.1.212
+Version: 0.1.83
 Release:    1
 Group:      System/Libraries
 License:    Apache
index a756d998ed57fef07bf2700bacb856caa64a6ec2..be2e4ca522e38ae9c928997ab362dc5e2d8d6cc7 100644 (file)
@@ -398,9 +398,45 @@ TReturn tcore_object_set_dispatcher(CoreObject *co,
        return TCORE_RETURN_SUCCESS;
 }
 
+TReturn tcore_object_override_callback(CoreObject *co,
+               const char *event, CoreObjectCallback callback, void *user_data)
+{
+       struct callback_type *cb = NULL;
+       GSList *l = NULL;
+       TcoreAT *at = NULL;
+
+       if (!co || !event || !callback)
+               return TCORE_RETURN_EINVAL;
+
+       if (strlen(event) < 1)
+               return TCORE_RETURN_EINVAL;
+
+       if (co->hal) {
+               if (tcore_hal_get_mode(co->hal) == TCORE_HAL_MODE_AT)
+                       at = tcore_hal_get_at(co->hal);
+       }
+
+       for (l = co->callbacks; l; l = l->next) {
+               cb = l->data;
+               if (!cb)
+                       continue;
+
+               if (g_strcmp0(cb->event, event) != 0)
+                       continue;
+
+               if (at)
+                       _remove_at_callback(at, cb);
+
+               free(cb->event);
+               co->callbacks = g_slist_remove(co->callbacks, cb);
+               free(cb);
+       }
+
+       return tcore_object_add_callback(co, event, callback, user_data);
+}
+
 TReturn tcore_object_add_callback(CoreObject *co,
-               const char *event,
-               CoreObjectCallback callback, void *user_data)
+               const char *event, CoreObjectCallback callback, void *user_data)
 {
        struct callback_type *cb = NULL;
        TcoreAT *at = NULL;