netstar pushed a commit to branch master.

http://git.enlightenment.org/tools/edi.git/commit/?id=b19befd089cefc35d853b9fa7aef1d87cef8e136

commit b19befd089cefc35d853b9fa7aef1d87cef8e136
Author: Al Poole <nets...@gmail.com>
Date:   Fri Sep 8 00:16:10 2017 +0100

    edi_exe: modify method to allow additional data parameter.
    
    This adds an additional pointer for abritrary data. Have utilised
    this to make the notidy on build more verbose without code
    duplication.
---
 src/bin/edi_main.c            | 21 +++++++++++++--------
 src/bin/screens/edi_screens.c |  2 +-
 src/lib/edi_exe.c             | 24 +++++++++++++++++++-----
 src/lib/edi_exe.h             |  3 ++-
 4 files changed, 35 insertions(+), 15 deletions(-)

diff --git a/src/bin/edi_main.c b/src/bin/edi_main.c
index 7e9e3f6..63ead1e 100644
--- a/src/bin/edi_main.c
+++ b/src/bin/edi_main.c
@@ -701,26 +701,31 @@ _edi_launcher_run(Edi_Project_Config_Launch *launch)
 }
 
 static void
-_edi_build_display_status_cb(int status)
+_edi_build_display_status_cb(int status, void *data)
 {
-   Eina_Strbuf *message;
+   Eina_Strbuf *title, *message;
+   const char *name = data;
 
+   title = eina_strbuf_new();
    message = eina_strbuf_new();
 
    if (status != 0)
-     eina_strbuf_append_printf(message, "Build of project <b>%s</b> in %s 
failed with status code %d.", edi_project_name_get(), edi_project_get(), 
status);
+     eina_strbuf_append_printf(message, "%s of project <b>%s</b> in %s failed 
with status code %d.\n", name, edi_project_name_get(), edi_project_get(), 
status);
    else
-     eina_strbuf_append_printf(message, "Build of project <b>%s</b> in %s was 
successful.", edi_project_name_get(), edi_project_get());
+     eina_strbuf_append_printf(message, "%s of project <b>%s</b> in %s was 
successful.\n", name, edi_project_name_get(), edi_project_get());
 
-   edi_screens_desktop_notify("EDI :: Build Status", 
eina_strbuf_string_get(message));
+   eina_strbuf_append_printf(title, "EDI :: %s Status", name);
 
+   edi_screens_desktop_notify(eina_strbuf_string_get(title), 
eina_strbuf_string_get(message));
+
+   eina_strbuf_free(title);
    eina_strbuf_free(message);
 }
 
 static void
 _edi_build_project(void)
 {
-   if (edi_exe_notify_handle("edi_build", _edi_build_display_status_cb))
+   if (edi_exe_notify_handle("edi_build", _edi_build_display_status_cb, 
"Build"))
      {
         edi_consolepanel_show();
         edi_builder_build();
@@ -730,7 +735,7 @@ _edi_build_project(void)
 static void
 _edi_build_clean_project(void)
 {
-   if (edi_exe_notify_handle("edi_build", _edi_build_display_status_cb))
+   if (edi_exe_notify_handle("edi_build", _edi_build_display_status_cb, 
"Clean"))
      {
         edi_consolepanel_show();
         edi_builder_clean();
@@ -740,7 +745,7 @@ _edi_build_clean_project(void)
 static void
 _edi_build_test_project(void)
 {
-   if (edi_exe_notify_handle("edi_build", _edi_build_display_status_cb))
+   if (edi_exe_notify_handle("edi_build", _edi_build_display_status_cb, 
"Test"))
      {
         edi_consolepanel_show();
         edi_builder_test();
diff --git a/src/bin/screens/edi_screens.c b/src/bin/screens/edi_screens.c
index b86ebfa..7e625f4 100644
--- a/src/bin/screens/edi_screens.c
+++ b/src/bin/screens/edi_screens.c
@@ -129,7 +129,7 @@ void edi_screens_desktop_notify(const char *title, const 
char *message)
 
    command = eina_strbuf_new();
 
-   eina_strbuf_append_printf(command, "notify-send -t 7000 -i edi '%s' '%s'", 
title, message);
+   eina_strbuf_append_printf(command, "notify-send -t 10000 -i edi '%s' '%s'", 
title, message);
 
    ecore_exe_run(eina_strbuf_string_get(command), NULL);
 
diff --git a/src/lib/edi_exe.c b/src/lib/edi_exe.c
index c16cedb..0fa16eb 100644
--- a/src/lib/edi_exe.c
+++ b/src/lib/edi_exe.c
@@ -13,33 +13,47 @@
 static Ecore_Event_Handler *_edi_exe_handler = NULL;
 static Ecore_Event_Handler *_edi_exe_notify_handler = NULL;
 
+typedef struct _Edi_Exe_Args {
+   void ((*func)(int, void *));
+   void *data;
+} Edi_Exe_Args;
+
 static Eina_Bool
 _edi_exe_notify_data_cb(void *data, int type EINA_UNUSED, void *event 
EINA_UNUSED)
 {
    int *status;
-   void *(*func)(int value);
+   Edi_Exe_Args *args;
    Ecore_Con_Event_Client_Data *ev = event;
 
    status = ev->data;
-   func = data;
 
-   func(*status);
+   args = data;
+
+   args->func(*status, args->data);
 
    ecore_event_handler_del(_edi_exe_notify_handler);
    _edi_exe_notify_handler = NULL;
 
+   free(args);
+
    return EINA_FALSE;
 }
 
 EAPI Eina_Bool
-edi_exe_notify_handle(const char *name, void ((*func)(int)))
+edi_exe_notify_handle(const char *name, void ((*func)(int, void *)), void 
*data)
 {
+   Edi_Exe_Args *args;
+
    if (_edi_exe_notify_handler) return EINA_FALSE;
 
   /* These are UNIX domain sockets, no need to clean up */
    ecore_con_server_add(ECORE_CON_LOCAL_USER, name, 0, NULL);
 
-   _edi_exe_notify_handler = 
ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_DATA, (Ecore_Event_Handler_Cb) 
_edi_exe_notify_data_cb, func);
+   args = malloc(sizeof(Edi_Exe_Args));
+   args->func = func;
+   args->data = data;
+
+   _edi_exe_notify_handler = 
ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_DATA, (Ecore_Event_Handler_Cb) 
_edi_exe_notify_data_cb, args);
 
    return EINA_TRUE;
 }
diff --git a/src/lib/edi_exe.h b/src/lib/edi_exe.h
index 1165c8e..2dec603 100644
--- a/src/lib/edi_exe.h
+++ b/src/lib/edi_exe.h
@@ -56,10 +56,11 @@ EAPI void edi_exe_notify(const char *name, const char 
*command);
  *
  * @param name The name of the resource used to identify the notification.
  * @param func Function that will execute upon receiving exit code of exe.
+ * @param data Additional data to pass to the callback.
  *
  * @ingroup Exe
  */
-EAPI Eina_Bool edi_exe_notify_handle(const char *name, void ((*func)(int)));
+EAPI Eina_Bool edi_exe_notify_handle(const char *name, void ((*func)(int, void 
*)), void *data);
 
 /**
  * @}

-- 


Reply via email to