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