handle calc death and check for correct exe on stderr.
authorGustavo Sverzut Barbieri <barbieri@gmail.com>
Sat, 25 Jul 2009 23:53:05 +0000 (23:53 +0000)
committerGustavo Sverzut Barbieri <barbieri@gmail.com>
Sat, 25 Jul 2009 23:53:05 +0000 (23:53 +0000)
SVN revision: 41497

src/modules/everything/evry_plug_calc.c

index f85eb99bcbe4c929b95eb4cb611daa0cbae6f0f0..bb1b9ae0ae8cb4e9bb0b87eba15ac45c557a9e6d 100644 (file)
@@ -13,12 +13,14 @@ static void _item_add(Evry_Plugin *p, char *output, int prio);
 static void _item_icon_get(Evry_Plugin *p, Evry_Item *it, Evas *e);
 static int  _cb_data(void *data, int type, void *event);
 static int  _cb_error(void *data, int type, void *event);
+static int  _cb_del(void *data, int type, void *event);
 
 static Evry_Plugin *p;
 static Ecore_Exe *exe = NULL;
 static Eina_List *history = NULL;
 static Ecore_Event_Handler *data_handler = NULL;
 static Ecore_Event_Handler *error_handler = NULL;
+static Ecore_Event_Handler *del_handler = NULL;
 static Ecore_X_Window clipboard_win = 0;
 static int error = 0;
 
@@ -69,6 +71,7 @@ _begin(Evry_Plugin *p, Evry_Item *it __UNUSED__)
 
    data_handler = ecore_event_handler_add(ECORE_EXE_EVENT_DATA, _cb_data, p);
    error_handler = ecore_event_handler_add(ECORE_EXE_EVENT_ERROR, _cb_error, p);
+   del_handler = ecore_event_handler_add(ECORE_EXE_EVENT_DEL, _cb_del, p);
    exe = ecore_exe_pipe_run("bc -l",
                            ECORE_EXE_PIPE_READ |
                            ECORE_EXE_PIPE_READ_LINE_BUFFERED |
@@ -203,12 +206,12 @@ _item_add(Evry_Plugin *p, char *output, int prio)
 }
 
 static int
-_cb_data(void *data, int type __UNUSED__, void *event)
+_cb_data(void *data __UNUSED__, int type __UNUSED__, void *event)
 {
    Ecore_Exe_Event_Data *ev = event;
    Ecore_Exe_Event_Data_Line *l;
 
-   if (data != p) return 1;
+   if (ev->exe != exe) return 1;
    
    evry_plugin_async_update(p, EVRY_ASYNC_UPDATE_CLEAR);
 
@@ -233,11 +236,27 @@ _cb_data(void *data, int type __UNUSED__, void *event)
 }
 
 static int
-_cb_error(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
+_cb_error(void *data __UNUSED__, int type __UNUSED__, void *event)
 {
+   Ecore_Exe_Event_Data *ev = event;
+
+   if (ev->exe != exe)
+     return 1;
+
    error = 1;
-   
    /* printf("got error\n"); */
 
    return 1;
 }
+
+static int
+_cb_del(void *data __UNUSED__, int type __UNUSED__, void *event)
+{
+   Ecore_Exe_Event_Del *e = event;
+
+   if (e->exe != exe)
+     return 1;
+
+   exe = NULL;
+   return 1;
+}