derekf pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=e12498f4d4e5dfb63052ac81ea4bc39056b8baa0

commit e12498f4d4e5dfb63052ac81ea4bc39056b8baa0
Author: Derek Foreman <der...@osg.samsung.com>
Date:   Tue May 8 12:26:02 2018 -0500

    edje: Add seat data to extra data struct
    
    Summary:
    Since the extra data struct is already nicely refcounted, it's easy to
    add the seat data to it instead of making a new struct with almost
    identical code.
    Depends on D6112
    
    Reviewers: zmike, cedric
    
    Reviewed By: zmike
    
    Tags: #efl
    
    Differential Revision: https://phab.enlightenment.org/D6113
---
 src/lib/edje/edje_private.h |  2 ++
 src/lib/edje/edje_program.c | 12 +++++++++---
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/lib/edje/edje_private.h b/src/lib/edje/edje_private.h
index d723dac578..6ebfaee95f 100644
--- a/src/lib/edje/edje_private.h
+++ b/src/lib/edje/edje_private.h
@@ -2201,6 +2201,8 @@ struct _Edje_Message_Signal_Data
    int ref;
    void *data;
    void (*free_func)(void *);
+   void *seat_data;
+   void (*seat_free_func)(void *);
 };
 
 struct _Edje_Message_Signal
diff --git a/src/lib/edje/edje_program.c b/src/lib/edje/edje_program.c
index 6d21e6f146..06f28afb06 100644
--- a/src/lib/edje/edje_program.c
+++ b/src/lib/edje/edje_program.c
@@ -129,11 +129,11 @@ _edje_emit_child(Edje *ed, Edje_Real_Part *rp, const char 
*part, const char *sig
 }
 
 static Edje_Message_Signal_Data *
-_edje_signal_data_setup(void *data, Ecore_Cb free_func)
+_edje_signal_data_setup(void *data, Ecore_Cb free_func, void *seat_data, 
Ecore_Cb seat_free_func)
 {
    Edje_Message_Signal_Data *out = NULL;
 
-   if (data)
+   if (data || seat_data)
      {
         out = calloc(1, sizeof(*out));
         if (!out) return NULL;
@@ -141,6 +141,8 @@ _edje_signal_data_setup(void *data, Ecore_Cb free_func)
         out->ref = 1;
         out->data = data;
         out->free_func = free_func;
+        out->seat_data = seat_data;
+        out->seat_free_func = seat_free_func;
      }
    return out;
 }
@@ -155,6 +157,10 @@ _edje_signal_data_free(Edje_Message_Signal_Data *mdata)
      {
         mdata->free_func(mdata->data);
      }
+   if (mdata->seat_free_func)
+     {
+        mdata->seat_free_func(mdata->seat_data);
+     }
    free(mdata);
 }
 
@@ -1296,7 +1302,7 @@ _edje_emit_full(Edje *ed, const char *sig, const char 
*src, void *data, void (*f
    else
      broadcast = ed->collection->broadcast_signal;
 
-   mdata = _edje_signal_data_setup(data, free_func);
+   mdata = _edje_signal_data_setup(data, free_func, NULL, NULL);
    _edje_emit_send(ed, broadcast, sig, src, mdata);
 }
 

-- 


Reply via email to