Enlightenment CVS committal

Author  : sebastid
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_apps.c 


Log Message:
Fix exe quit callback.

===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_apps.c,v
retrieving revision 1.76
retrieving revision 1.77
diff -u -3 -r1.76 -r1.77
--- e_apps.c    26 Sep 2005 15:01:40 -0000      1.76
+++ e_apps.c    26 Sep 2005 19:26:58 -0000      1.77
@@ -52,6 +52,7 @@
 static void      _e_app_save_order         (E_App *app);
 static int       _e_app_cb_event_border_add(void *data, int type, void *event);
 static int       _e_app_cb_expire_timer    (void *data);
+static E_App    *_e_app_ecore_exe_find     (Ecore_Exe *exe);
 
 /* local subsystem globals */
 static Evas_Hash   *_e_apps = NULL;
@@ -510,7 +511,8 @@
    if (!a->exe) return 0;
    /* FIXME: set up locale, encoding and input method env vars if they are in
     * the eapp file */
-   inst = calloc(1, sizeof(E_App_Instance));
+   inst = E_NEW(E_App_Instance, 1);
+   if (!inst) return 0;
    exe = ecore_exe_run(a->exe, inst);
    if (!exe)
      {
@@ -1643,56 +1645,42 @@
 _e_apps_cb_exit(void *data, int type, void *event)
 {
    Ecore_Event_Exe_Exit *ev;
+   Evas_List *l;
    E_App *a;
-   
-   /* FIXME: Check if we launched this exe, else it isn't sure that
-    * the exe data is an E_App! (see 8 lines down also)
-    */
+
    ev = event;
-   if (ev->exe)
+   if (!ev->exe) return 1;
+   a = _e_app_ecore_exe_find(ev->exe);
+   if (!a) return 1;
+
+   if (ev->exit_code == 127) /* /bin/sh uses this if cmd not found */
+     e_error_dialog_show(_("Run Error"),
+                        _("Enlightenment was unable run the program:\n"
+                          "\n"
+                          "%s\n"
+                          "\n"
+                          "The command was not found\n"),
+                        a->exe);
+   for (l = a->instances; l; l = l->next)
      {
-       E_App_Instance *ai;
-       
-       ai = ecore_exe_data_get(ev->exe);
-       if (!ai) /* related to FIXME above */
-         return 1;
+       E_App_Instance *inst;
 
-       a = ai->app;
-       if (a)
+       inst = l->data;
+       if (ev->exe == inst->exe)
          {
-            Evas_List *l;
-            
-            if (ev->exit_code == 127) /* /bin/sh uses this if cmd not found */
-              e_error_dialog_show(_("Run Error"),
-                                  _("Enlightenment was unable run the 
program:\n"
-                                    "\n"
-                                    "%s\n"
-                                    "\n"
-                                    "The command was not found\n"),
-                                  a->exe);
-            for (l = a->instances; l; l = l->next)
+            if (inst->expire_timer)
               {
-                 E_App_Instance *inst;
-                 
-                 inst = l->data;
-                 if (ev->exe == inst->exe)
-                   {
-                      if (inst->expire_timer)
-                        {
-                           ecore_timer_del(inst->expire_timer);
-                           inst->expire_timer = NULL;
-                        }
-                      inst->exe = NULL;
-                      a->instances = evas_list_remove_list(a->instances, l);
-                      free(inst);
-                      _e_apps_start_pending = 
evas_list_remove(_e_apps_start_pending, a);
-//                    e_object_unref(E_OBJECT(a));
-                      break;
-                   }
+                 ecore_timer_del(inst->expire_timer);
+                 inst->expire_timer = NULL;
               }
-            _e_app_change(a, E_APP_EXIT);
+            inst->exe = NULL;
+            a->instances = evas_list_remove_list(a->instances, l);
+            free(inst);
+            _e_apps_start_pending = evas_list_remove(_e_apps_start_pending, a);
+            break;
          }
      }
+   _e_app_change(a, E_APP_EXIT);
    return 1;
 }
 
@@ -1749,3 +1737,25 @@
    _e_app_change(a, E_APP_READY_EXPIRE);
    return 0;
 }
+
+static E_App *
+_e_app_ecore_exe_find(Ecore_Exe *exe)
+{
+   Evas_List *l, *l2;
+
+   for (l = _e_apps_start_pending; l; l = l->next)
+     {
+       E_App *a;
+
+       a = l->data;
+       for (l2 = a->instances; l2; l2 = l2->next)
+         {
+            E_App_Instance *inst;
+
+            inst = l2->data;
+            if (inst->exe == exe)
+              return a;
+         }
+     }
+   return NULL;
+}




-------------------------------------------------------
SF.Net email is sponsored by:
Tame your development challenges with Apache's Geronimo App Server. Download
it for free - -and be entered to win a 42" plasma tv or your very own
Sony(tm)PSP.  Click here to play: http://sourceforge.net/geronimo.php
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to