Enlightenment CVS committal

Author  : raster
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_actions.c e_apps.c e_int_menus.c e_main.c e_manager.h 
        e_zone.c e_zone.h 


Log Message:


fix up exe to set DISPALY right for executed apps on other managers... this
also technically may allow us to add other properties to a window if i get
ehack back in to then put it on the desktop it was launched on.

===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_actions.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -3 -r1.10 -r1.11
--- e_actions.c 2 Jun 2005 08:25:14 -0000       1.10
+++ e_actions.c 2 Jun 2005 09:49:07 -0000       1.11
@@ -511,7 +511,8 @@
                         a = e_app_generic_find(p + 1);
                       else if (!strcmp(p2, "exe:"))
                         a = e_app_exe_find(p + 1);
-                      if (a) e_app_exec(a);
+                      if (a)
+                        e_zone_app_exec(zone, a);
                    }
                  free(p2);
               }
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_apps.c,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -3 -r1.45 -r1.46
--- e_apps.c    2 Jun 2005 08:25:14 -0000       1.45
+++ e_apps.c    2 Jun 2005 09:49:07 -0000       1.46
@@ -256,6 +256,8 @@
    E_OBJECT_CHECK_RETURN(a, 0);
    E_OBJECT_TYPE_CHECK_RETURN(a, E_APP_TYPE, 0);
    if (!a->exe) return 0;
+   /* FIXME: set up locale, encoding and input method env vars if they are in
+    * the eapp file */
    exe = ecore_exe_run(a->exe, a);
    if (!exe) return 0;
    a->instances = evas_list_append(a->instances, exe);
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_int_menus.c,v
retrieving revision 1.63
retrieving revision 1.64
diff -u -3 -r1.63 -r1.64
--- e_int_menus.c       29 May 2005 11:37:18 -0000      1.63
+++ e_int_menus.c       2 Jun 2005 09:49:07 -0000       1.64
@@ -345,7 +345,7 @@
    E_App *a;
    
    a = data;
-   e_app_exec(a);
+   e_zone_app_exec(m->zone, a);
 }
 
 static void
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_main.c,v
retrieving revision 1.88
retrieving revision 1.89
diff -u -3 -r1.88 -r1.89
--- e_main.c    2 Jun 2005 07:40:04 -0000       1.88
+++ e_main.c    2 Jun 2005 09:49:07 -0000       1.89
@@ -648,6 +648,7 @@
        E_Container *con;
        
        man = e_manager_new(roots[i]);
+       man->num = i;
        e_init_show();
        if (man) e_manager_show(man);
        else
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_manager.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -3 -r1.10 -r1.11
--- e_manager.h 30 Apr 2005 02:26:41 -0000      1.10
+++ e_manager.h 2 Jun 2005 09:49:07 -0000       1.11
@@ -16,6 +16,7 @@
    E_Object             e_obj_inherit;
    
    Ecore_X_Window       win;
+   int                  num;
    int                  x, y, w, h;
    char                 visible : 1;
    Ecore_X_Window       root;
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_zone.c,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -3 -r1.53 -r1.54
--- e_zone.c    20 May 2005 10:14:51 -0000      1.53
+++ e_zone.c    2 Jun 2005 09:49:07 -0000       1.54
@@ -294,148 +294,6 @@
      }
 }
 
-static void
-_e_zone_free(E_Zone *zone)
-{
-   E_Container *con;
-   Evas_List *l;
-   int x, y;
-
-   /* remove handlers */
-   for (l = zone->handlers; l; l = l->next)
-     {
-       Ecore_Event_Handler *h;
-
-       h = l->data;
-       ecore_event_handler_del(h);
-     }
-   evas_list_free(zone->handlers);
-   zone->handlers = NULL;
-
-   con = zone->container;
-   if (zone->name) free(zone->name);
-   con->zones = evas_list_remove(con->zones, zone);
-   evas_object_del(zone->bg_event_object);
-   evas_object_del(zone->bg_clip_object);
-   evas_object_del(zone->bg_object);
-   /* free desks */
-   for (x = 0; x < zone->desk_x_count; x++)
-     for(y = 0; y < zone->desk_y_count; y++)
-       e_object_del(E_OBJECT(zone->desks[x + (y * zone->desk_x_count)]));
-   free(zone->desks);
-
-   free(zone);
-}
-
-static void
-_e_zone_cb_menu_end(void *data, E_Menu *m)
-{
-   e_object_del(E_OBJECT(m));
-}
-
-static void
-_e_zone_cb_bg_mouse_down(void *data, Evas *evas, Evas_Object *obj, void 
*event_info)
-{
-   E_Zone *zone;
-   Evas_Event_Mouse_Down *ev;
-   
-   ev = (Evas_Event_Mouse_Down *)event_info;
-   zone = data;
-   if (e_menu_grab_window_get()) return;
-
-   if (!zone->cur_mouse_action)
-     {
-       if (ecore_event_current_type_get() == ECORE_X_EVENT_MOUSE_BUTTON_DOWN)
-         {
-            Ecore_X_Event_Mouse_Button_Down *ev2;
-            
-            ev2 = ecore_event_current_event_get();
-            zone->cur_mouse_action =
-              e_bindings_mouse_down_event_handle(E_BINDING_CONTEXT_ZONE,
-                                                 E_OBJECT(zone), ev2);
-         }
-     }
-#if 0  /* FIXME: nuke this later once the new configurable bindings settle */
-   if (ev->button == 1)
-     {
-       E_Menu *m;
-
-       m = e_int_menus_main_new();
-       e_menu_post_deactivate_callback_set(m, _e_zone_cb_menu_end, NULL);
-       e_menu_activate_mouse(m, zone, ev->output.x, ev->output.y, 1, 1,
-                             E_MENU_POP_DIRECTION_DOWN);
-       e_util_container_fake_mouse_up_all_later(zone->container);
-     }
-   else if (ev->button == 2)
-     {
-       E_Menu *m;
-
-       m = e_int_menus_clients_new();
-       /* FIXME: this is a bit of a hack... setting m->con - bad hack */
-       m->zone = zone;
-       e_menu_post_deactivate_callback_set(m, _e_zone_cb_menu_end, NULL);
-       e_menu_activate_mouse(m, zone, ev->output.x, ev->output.y, 1, 1,
-                             E_MENU_POP_DIRECTION_DOWN);
-       e_util_container_fake_mouse_up_all_later(zone->container);
-     }
-   else if (ev->button == 3)
-     {
-       E_Menu *m;
-
-       m = e_int_menus_favorite_apps_new();
-       e_menu_post_deactivate_callback_set(m, _e_zone_cb_menu_end, NULL);
-       e_menu_activate_mouse(m, zone, ev->output.x, ev->output.y, 1, 1,
-                             E_MENU_POP_DIRECTION_DOWN);
-       e_util_container_fake_mouse_up_all_later(zone->container);
-     }
-#endif   
-}
-
-static void
-_e_zone_cb_bg_mouse_up(void *data, Evas *evas, Evas_Object *obj, void 
*event_info)
-{
-   E_Zone *zone;
-   Evas_Event_Mouse_Up *ev;
-   
-   ev = (Evas_Event_Mouse_Up *)event_info;      
-   zone = data;
-   if (zone->cur_mouse_action)
-     {
-       if (ecore_event_current_type_get() == ECORE_X_EVENT_MOUSE_BUTTON_UP)
-         {
-            Ecore_X_Event_Mouse_Button_Up *ev2;
-            
-            ev2 = ecore_event_current_event_get();
-            if (zone->cur_mouse_action->func.end_mouse)
-              zone->cur_mouse_action->func.end_mouse(E_OBJECT(zone), "", ev2);
-            else if (zone->cur_mouse_action->func.end)
-              zone->cur_mouse_action->func.end(E_OBJECT(zone), "");
-         }
-       zone->cur_mouse_action = NULL;
-     }
-   else
-     {
-       if (ecore_event_current_type_get() == ECORE_X_EVENT_MOUSE_BUTTON_UP)
-         {
-            Ecore_X_Event_Mouse_Button_Up *ev2;
-            
-            ev2 = ecore_event_current_event_get();
-            e_bindings_mouse_up_event_handle(E_BINDING_CONTEXT_ZONE,
-                                             E_OBJECT(zone), ev2);
-         }
-     }
-}
-
-static void
-_e_zone_cb_bg_mouse_move(void *data, Evas *evas, Evas_Object *obj, void 
*event_info)
-{
-   E_Zone *zone;
-   Evas_Event_Mouse_Move *ev;
-   
-   ev = (Evas_Event_Mouse_Move *)event_info;   
-   zone = data;
-}
-
 void
 e_zone_desk_count_set(E_Zone *zone, int x_count, int y_count)
 {
@@ -598,6 +456,169 @@
    e_zone_desk_flip_to(zone, x, y);
 }
 
+int
+e_zone_app_exec(E_Zone *zone, E_App *a)
+{
+   int ret;
+   char *penv_display, *p1, *p2;
+   char buf[4096], buf2[32];
+   
+   /* save previous env vars we need to save */
+   penv_display = getenv("DISPLAY");
+   if (penv_display) penv_display = strdup(penv_display);
+   
+   /* set env vars */
+   p1 = strrchr(penv_display, ':');
+   p2 = strrchr(penv_display, '.');
+   if ((p1) && (p2) && (p2 > p1)) /* "blah:x.y" */
+     {
+       /* yes it could overflow... but who will voerflow DISPLAY eh? why? to
+        * "exploit" your own applications running as you?
+        */
+       strcpy(buf, penv_display);
+       buf[p2 - penv_display + 1] = 0;
+       snprintf(buf2, sizeof(buf2), "%i", zone->container->manager->num);
+       strcat(buf, buf2);
+     }
+   else if (p1) /* "blah:x */
+     {
+       strcpy(buf, penv_display);
+       snprintf(buf2, sizeof(buf2), ".%i", zone->container->manager->num);
+       strcat(buf, buf2);
+     }
+   else
+     strcpy(buf, penv_display);
+   e_util_env_set("DISPLAY", buf);
+   snprintf(buf, sizeof(buf), "%i %i", zone->desk_x_current, 
zone->desk_y_current);
+   e_util_env_set("_E_DESK", buf);
+   snprintf(buf, sizeof(buf), "%i", zone->num);
+   e_util_env_set("_E_ZONE", buf);
+   snprintf(buf, sizeof(buf), "%i", zone->container->num);
+   e_util_env_set("_E_CONTAINER", buf);
+   snprintf(buf, sizeof(buf), "%i", zone->container->manager->num);
+   e_util_env_set("_E_MANAGER", buf);
+   
+   /* execute */
+   ret = e_app_exec(a);
+   
+   /* reset env vars */
+   if (penv_display)
+     {
+       e_util_env_set("DISPLAY", penv_display);
+       free(penv_display);
+     }
+   return ret;
+}
+
+/* local subsystem functions */
+static void
+_e_zone_free(E_Zone *zone)
+{
+   E_Container *con;
+   Evas_List *l;
+   int x, y;
+
+   /* remove handlers */
+   for (l = zone->handlers; l; l = l->next)
+     {
+       Ecore_Event_Handler *h;
+
+       h = l->data;
+       ecore_event_handler_del(h);
+     }
+   evas_list_free(zone->handlers);
+   zone->handlers = NULL;
+
+   con = zone->container;
+   if (zone->name) free(zone->name);
+   con->zones = evas_list_remove(con->zones, zone);
+   evas_object_del(zone->bg_event_object);
+   evas_object_del(zone->bg_clip_object);
+   evas_object_del(zone->bg_object);
+   /* free desks */
+   for (x = 0; x < zone->desk_x_count; x++)
+     for(y = 0; y < zone->desk_y_count; y++)
+       e_object_del(E_OBJECT(zone->desks[x + (y * zone->desk_x_count)]));
+   free(zone->desks);
+
+   free(zone);
+}
+
+static void
+_e_zone_cb_menu_end(void *data, E_Menu *m)
+{
+   e_object_del(E_OBJECT(m));
+}
+
+static void
+_e_zone_cb_bg_mouse_down(void *data, Evas *evas, Evas_Object *obj, void 
*event_info)
+{
+   E_Zone *zone;
+   Evas_Event_Mouse_Down *ev;
+   
+   ev = (Evas_Event_Mouse_Down *)event_info;
+   zone = data;
+   if (e_menu_grab_window_get()) return;
+
+   if (!zone->cur_mouse_action)
+     {
+       if (ecore_event_current_type_get() == ECORE_X_EVENT_MOUSE_BUTTON_DOWN)
+         {
+            Ecore_X_Event_Mouse_Button_Down *ev2;
+            
+            ev2 = ecore_event_current_event_get();
+            zone->cur_mouse_action =
+              e_bindings_mouse_down_event_handle(E_BINDING_CONTEXT_ZONE,
+                                                 E_OBJECT(zone), ev2);
+         }
+     }
+}
+
+static void
+_e_zone_cb_bg_mouse_up(void *data, Evas *evas, Evas_Object *obj, void 
*event_info)
+{
+   E_Zone *zone;
+   Evas_Event_Mouse_Up *ev;
+   
+   ev = (Evas_Event_Mouse_Up *)event_info;      
+   zone = data;
+   if (zone->cur_mouse_action)
+     {
+       if (ecore_event_current_type_get() == ECORE_X_EVENT_MOUSE_BUTTON_UP)
+         {
+            Ecore_X_Event_Mouse_Button_Up *ev2;
+            
+            ev2 = ecore_event_current_event_get();
+            if (zone->cur_mouse_action->func.end_mouse)
+              zone->cur_mouse_action->func.end_mouse(E_OBJECT(zone), "", ev2);
+            else if (zone->cur_mouse_action->func.end)
+              zone->cur_mouse_action->func.end(E_OBJECT(zone), "");
+         }
+       zone->cur_mouse_action = NULL;
+     }
+   else
+     {
+       if (ecore_event_current_type_get() == ECORE_X_EVENT_MOUSE_BUTTON_UP)
+         {
+            Ecore_X_Event_Mouse_Button_Up *ev2;
+            
+            ev2 = ecore_event_current_event_get();
+            e_bindings_mouse_up_event_handle(E_BINDING_CONTEXT_ZONE,
+                                             E_OBJECT(zone), ev2);
+         }
+     }
+}
+
+static void
+_e_zone_cb_bg_mouse_move(void *data, Evas *evas, Evas_Object *obj, void 
*event_info)
+{
+   E_Zone *zone;
+   Evas_Event_Mouse_Move *ev;
+   
+   ev = (Evas_Event_Mouse_Move *)event_info;   
+   zone = data;
+}
+
 static void
 _e_zone_event_zone_desk_count_set_free(void *data, void *ev)
 {
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_zone.h,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -3 -r1.24 -r1.25
--- e_zone.h    12 May 2005 13:13:53 -0000      1.24
+++ e_zone.h    2 Jun 2005 09:49:07 -0000       1.25
@@ -65,6 +65,8 @@
 EAPI void       e_zone_desk_flip_to(E_Zone *zone, int x, int y);
 EAPI void       e_zone_desk_linear_flip_by(E_Zone *zone, int dx);
 EAPI void       e_zone_desk_linear_flip_to(E_Zone *zone, int x);
+
+EAPI int        e_zone_app_exec(E_Zone *zone, E_App *a);
     
 extern EAPI int E_EVENT_ZONE_DESK_COUNT_SET;
 




-------------------------------------------------------
This SF.Net email is sponsored by Yahoo.
Introducing Yahoo! Search Developer Network - Create apps using Yahoo!
Search APIs Find out how you can build Yahoo! directly into your own
Applications - visit http://developer.yahoo.net/?fr=offad-ysdn-ostg-q22005
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to