Enlightenment CVS committal Author : raster Project : e17 Module : libs/ecore
Dir : e17/libs/ecore/src/lib/ecore_evas Modified Files: Tag: SPLIT Ecore_Evas.h ecore_evas.c ecore_evas_private.h Log Message: more work on ecore_x and ecore_evas... coming along nicely. handles override mode (switching to and form) managed) and full screen mode happily. =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_evas/Attic/Ecore_Evas.h,v retrieving revision 1.1.2.5 retrieving revision 1.1.2.6 diff -u -3 -r1.1.2.5 -r1.1.2.6 --- Ecore_Evas.h 8 Feb 2003 02:15:21 -0000 1.1.2.5 +++ Ecore_Evas.h 8 Feb 2003 05:05:03 -0000 1.1.2.6 @@ -20,19 +20,30 @@ Ecore_Evas *ecore_evas_software_x11_new(const char *disp_name, Window parent, int x, int y, int w, int h); void ecore_evas_free(Ecore_Evas *ee); + void ecore_evas_callback_resize_set(Ecore_Evas *ee, void (*func) +(Ecore_Evas *ee)); + void ecore_evas_callback_move_set(Ecore_Evas *ee, void (*func) (Ecore_Evas +*ee)); + void ecore_evas_callback_show_set(Ecore_Evas *ee, void (*func) (Ecore_Evas +*ee)); + void ecore_evas_callback_hide_set(Ecore_Evas *ee, void (*func) (Ecore_Evas +*ee)); + void ecore_evas_callback_delete_request_set(Ecore_Evas *ee, void (*func) +(Ecore_Evas *ee)); + void ecore_evas_callback_destroy_set(Ecore_Evas *ee, void (*func) +(Ecore_Evas *ee)); + void ecore_evas_callback_focus_in_set(Ecore_Evas *ee, void (*func) +(Ecore_Evas *ee)); + void ecore_evas_callback_focus_out_set(Ecore_Evas *ee, void (*func) +(Ecore_Evas *ee)); + void ecore_evas_callback_mouse_in_set(Ecore_Evas *ee, void (*func) +(Ecore_Evas *ee)); + void ecore_evas_callback_mouse_out_set(Ecore_Evas *ee, void (*func) +(Ecore_Evas *ee)); Evas *ecore_evas_get(Ecore_Evas *ee); void ecore_evas_move(Ecore_Evas *ee, int x, int y); void ecore_evas_resize(Ecore_Evas *ee, int w, int h); void ecore_evas_move_resize(Ecore_Evas *ee, int x, int y, int w, int h); void ecore_evas_geometry_get(Ecore_Evas *ee, int *x, int *y, int *w, int *h); - void ecore_evas_rotation_set(Ecore_Evas *ee, int rot); int ecore_evas_rotation_get(Ecore_Evas *ee); void ecore_evas_shaped_set(Ecore_Evas *ee, int shaped); int ecore_evas_shaped_get(Ecore_Evas *ee); void ecore_evas_show(Ecore_Evas *ee); - void ecore_evas_hide(Ecore_Evas *ee); + void ecore_evas_hide(Ecore_Evas *ee); int ecore_evas_visibility_get(Ecore_Evas *ee); + void ecore_evas_raise(Ecore_Evas *ee); + void ecore_evas_lower(Ecore_Evas *ee); void ecore_evas_title_set(Ecore_Evas *ee, const char *t); const char *ecore_evas_title_get(Ecore_Evas *ee); void ecore_evas_name_class_set(Ecore_Evas *ee, const char *n, const char *c); @@ -49,18 +60,18 @@ void ecore_evas_cursor_get(Ecore_Evas *ee, char **file, int *layer, int *hot_x, int *hot_y); void ecore_evas_layer_set(Ecore_Evas *ee, int layer); int ecore_evas_layer_get(Ecore_Evas *ee); - void ecore_evas_focus_set(Ecore_Evas *ee, int on); - int ecore_evas_focus_get(Ecore_Evas *ee); + void ecore_evas_focus_set(Ecore_Evas *ee, int on); + int ecore_evas_focus_get(Ecore_Evas *ee); void ecore_evas_iconified_set(Ecore_Evas *ee, int on); int ecore_evas_iconified_get(Ecore_Evas *ee); void ecore_evas_borderless_set(Ecore_Evas *ee, int on); int ecore_evas_borderless_get(Ecore_Evas *ee); - void ecore_evas_override_set(Ecore_Evas *ee, int on); - int ecore_evas_override_get(Ecore_Evas *ee); + void ecore_evas_override_set(Ecore_Evas *ee, int on); + int ecore_evas_override_get(Ecore_Evas *ee); void ecore_evas_maximized_set(Ecore_Evas *ee, int on); int ecore_evas_maximized_get(Ecore_Evas *ee); - void ecore_evas_fullscreen_set(Ecore_Evas *ee, int on); - int ecore_evas_fullscreen_get(Ecore_Evas *ee); + void ecore_evas_fullscreen_set(Ecore_Evas *ee, int on); + int ecore_evas_fullscreen_get(Ecore_Evas *ee); void ecore_evas_avoid_damage_set(Ecore_Evas *ee, int on); int ecore_evas_avoid_damage_get(Ecore_Evas *ee); =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_evas/Attic/ecore_evas.c,v retrieving revision 1.1.2.5 retrieving revision 1.1.2.6 diff -u -3 -r1.1.2.5 -r1.1.2.6 --- ecore_evas.c 8 Feb 2003 02:15:21 -0000 1.1.2.5 +++ ecore_evas.c 8 Feb 2003 05:05:04 -0000 1.1.2.6 @@ -4,8 +4,10 @@ #include "Ecore_Evas.h" #include "Ecore_X.h" +static int _ecore_evas_init_count = 0; + static Ecore_Evas *ecore_evases = NULL; -static Ecore_Event_Handler *ecore_evas_event_handlers[13]; +static Ecore_Event_Handler *ecore_evas_event_handlers[15]; static Ecore_Idle_Enterer *ecore_evas_idle_enterer = NULL; static Ecore_Evas * @@ -134,6 +136,13 @@ e = event; ee = _ecore_evas_software_x11_match(e->win); if (!ee) return 1; /* pass on event */ + if (ee->prop.cursor.object) + { + evas_object_show(ee->prop.cursor.object); + evas_object_move(ee->prop.cursor.object, + e->x - ee->prop.cursor.hot.x, + e->y - ee->prop.cursor.hot.y); + } _ecore_evas_modifer_locks_update(ee, e->modifiers); evas_event_feed_mouse_move(ee->evas, e->x, e->y); return 0; /* dont pass it on */ @@ -148,10 +157,17 @@ e = event; ee = _ecore_evas_software_x11_match(e->win); if (!ee) return 1; /* pass on event */ - _ecore_evas_modifer_locks_update(ee, e->modifiers); + if (ee->prop.cursor.object) + { + evas_object_show(ee->prop.cursor.object); + evas_object_move(ee->prop.cursor.object, + e->x - ee->prop.cursor.hot.x, + e->y - ee->prop.cursor.hot.y); + } + if (ee->func.fn_mouse_in) ee->func.fn_mouse_in(ee); + _ecore_evas_modifer_locks_update(ee, e->modifiers); evas_event_feed_mouse_in(ee->evas); evas_event_feed_mouse_move(ee->evas, e->x, e->y); - if (ee->prop.cursor.object) evas_object_show(ee->prop.cursor.object); return 0; /* dont pass it on */ } @@ -167,6 +183,7 @@ _ecore_evas_modifer_locks_update(ee, e->modifiers); evas_event_feed_mouse_move(ee->evas, e->x, e->y); evas_event_feed_mouse_out(ee->evas); + if (ee->func.fn_mouse_out) ee->func.fn_mouse_out(ee); if (ee->prop.cursor.object) evas_object_hide(ee->prop.cursor.object); return 0; /* dont pass it on */ } @@ -181,6 +198,7 @@ ee = _ecore_evas_software_x11_match(e->win); if (!ee) return 1; /* pass on event */ ee->prop.focused = 1; + if (ee->func.fn_focus_in) ee->func.fn_focus_in(ee); return 0; /* dont pass it on */ } @@ -194,6 +212,7 @@ ee = _ecore_evas_software_x11_match(e->win); if (!ee) return 1; /* pass on event */ ee->prop.focused = 0; + if (ee->func.fn_focus_out) ee->func.fn_focus_out(ee); return 0; /* dont pass it on */ } @@ -219,6 +238,8 @@ e = event; ee = _ecore_evas_software_x11_match(e->win); if (!ee) return 1; /* pass on event */ + if (ee->func.fn_destroy) ee->func.fn_destroy(ee); + ecore_evas_free(ee); return 0; /* dont pass it on */ } @@ -231,15 +252,25 @@ e = event; ee = _ecore_evas_software_x11_match(e->win); if (!ee) return 1; /* pass on event */ - ee->x = e->x; - ee->y = e->y; + if ((ee->prop.fullscreen) && (e->win == ee->x11.win_container)) return 0; + if ((e->from_wm) || (ee->prop.fullscreen) || (ee->prop.override)) + { + if ((ee->x != e->x) || (ee->y != e->y)) + { + ee->x = e->x; + ee->y = e->y; + if (ee->func.fn_move) ee->func.fn_move(ee); + } + } if ((ee->w != e->w) || (ee->h != e->h)) { ee->w = e->w; ee->h = e->h; - ecore_x_window_resize(ee->x11.win, ee->w, ee->h); + if (e->win == ee->x11.win_container) + ecore_x_window_resize(ee->x11.win, ee->w, ee->h); evas_output_size_set(ee->evas, ee->w, ee->h); evas_output_viewport_set(ee->evas, 0, 0, ee->w, ee->h); + if (ee->func.fn_resize) ee->func.fn_resize(ee); } return 0; /* dont pass it on */ } @@ -253,6 +284,37 @@ e = event; ee = _ecore_evas_software_x11_match(e->win); if (!ee) return 1; /* pass on event */ + if (ee->func.fn_delete_request) ee->func.fn_delete_request(ee); + return 0; /* dont pass it on */ +} + +static int +_ecore_evas_event_window_show(int type, void *event, void *data) +{ + Ecore_Evas *ee; + Ecore_X_Event_Window_Show *e; + + e = event; + ee = _ecore_evas_software_x11_match(e->win); + if (!ee) return 1; /* pass on event */ + if (ee->x11.win_container != e->win) return 0; + ee->visible = 1; + if (ee->func.fn_show) ee->func.fn_show(ee); + return 0; /* dont pass it on */ +} + +static int +_ecore_evas_event_window_hide(int type, void *event, void *data) +{ + Ecore_Evas *ee; + Ecore_X_Event_Window_Hide *e; + + e = event; + ee = _ecore_evas_software_x11_match(e->win); + if (!ee) return 1; /* pass on event */ + if (ee->x11.win_container != e->win) return 0; + ee->visible = 0; + if (ee->func.fn_hide) ee->func.fn_hide(ee); return 0; /* dont pass it on */ } @@ -291,6 +353,8 @@ int ecore_evas_init(void) { + _ecore_evas_init_count++; + if (_ecore_evas_init_count > 1) return _ecore_evas_init_count; ecore_evas_idle_enterer = ecore_idle_enterer_add(_ecore_evas_idle_enter, NULL); ecore_evas_event_handlers[0] = ecore_event_handler_add(ECORE_X_EVENT_KEY_DOWN, _ecore_evas_event_key_down, NULL); ecore_evas_event_handlers[1] = ecore_event_handler_add(ECORE_X_EVENT_KEY_UP, _ecore_evas_event_key_up, NULL); @@ -305,7 +369,9 @@ ecore_evas_event_handlers[10] = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_DESTROY, _ecore_evas_event_window_destroy, NULL); ecore_evas_event_handlers[11] = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_CONFIGURE, _ecore_evas_event_window_configure, NULL); ecore_evas_event_handlers[12] = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_DELETE_REQUEST, _ecore_evas_event_window_delete_request, NULL); - return 1; + ecore_evas_event_handlers[13] = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_SHOW, +_ecore_evas_event_window_show, NULL); + ecore_evas_event_handlers[14] = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_HIDE, +_ecore_evas_event_window_hide, NULL); + return _ecore_evas_init_count; } /** @@ -318,12 +384,17 @@ { int i; - for (i = 0; - i < (sizeof(ecore_evas_event_handlers) / - sizeof(Ecore_Event_Handler *)); - i++) - ecore_event_handler_del(ecore_evas_event_handlers[i]); - return 0; + _ecore_evas_init_count--; + if (_ecore_evas_init_count == 0) + { + for (i = 0; + i < (sizeof(ecore_evas_event_handlers) / + sizeof(Ecore_Event_Handler *)); + i++) + ecore_event_handler_del(ecore_evas_event_handlers[i]); + } + if (_ecore_evas_init_count < 0) _ecore_evas_init_count = 0; + return _ecore_evas_init_count; } Ecore_Evas * @@ -340,7 +411,7 @@ ee = calloc(1, sizeof(Ecore_Evas)); if (!ee) return NULL; - ee->func.func_free = _ecore_evas_software_x11_free; + ee->func.fn_free = _ecore_evas_software_x11_free; ee->driver = strdup("software_x11"); if (disp_name) ee->name = strdup(disp_name); @@ -350,14 +421,9 @@ evas_output_method_set(ee->evas, rmethod); evas_output_size_set(ee->evas, w, h); evas_output_viewport_set(ee->evas, 0, 0, w, h); -/* - evas_image_cache_set(ee->evas, 0 * 1024); - evas_font_cache_set(ee->evas, 0 * 1024); - evas_font_path_append(ee->evas, "./"); -*/ ee->x11.win_container = ecore_x_window_new(parent, x, y, w, h); - ee->x11.win = ecore_x_window_new(ee->x11.win_container, 0, 0, w, h); + ee->x11.win = ecore_x_window_override_new(ee->x11.win_container, 0, 0, w, h); einfo = (Evas_Engine_Info_Software_X11 *)evas_engine_info_get(ee->evas); if (einfo) @@ -397,11 +463,72 @@ if (ee->prop.clas) free(ee->prop.clas); if (ee->prop.cursor.file) free(ee->prop.cursor.file); if (ee->prop.cursor.object) evas_object_del(ee->prop.cursor.object); - if (ee->func.func_free) ee->func.func_free(ee); + if (ee->func.fn_free) ee->func.fn_free(ee); if (ee->evas); evas_free(ee->evas); ecore_evases = _ecore_list_remove(ecore_evases, ee); free(ee); } +void +ecore_evas_callback_resize_set(Ecore_Evas *ee, void (*func) (Ecore_Evas *ee)) +{ + ee->func.fn_resize = func; +} + +void +ecore_evas_callback_move_set(Ecore_Evas *ee, void (*func) (Ecore_Evas *ee)) +{ + ee->func.fn_move = func; +} + +void +ecore_evas_callback_show_set(Ecore_Evas *ee, void (*func) (Ecore_Evas *ee)) +{ + ee->func.fn_show = func; +} + +void +ecore_evas_callback_hide_set(Ecore_Evas *ee, void (*func) (Ecore_Evas *ee)) +{ + ee->func.fn_hide = func; +} + +void +ecore_evas_callback_delete_request_set(Ecore_Evas *ee, void (*func) (Ecore_Evas *ee)) +{ + if (func) ecore_x_window_prop_delete_request_set(ee->x11.win_container, 1); + else ecore_x_window_prop_delete_request_set(ee->x11.win_container, 0); + ee->func.fn_delete_request = func; +} + +void +ecore_evas_callback_destroy_set(Ecore_Evas *ee, void (*func) (Ecore_Evas *ee)) +{ + ee->func.fn_destroy = func; +} + +void +ecore_evas_callback_focus_in_set(Ecore_Evas *ee, void (*func) (Ecore_Evas *ee)) +{ + ee->func.fn_focus_in = func; +} + +void +ecore_evas_callback_focus_out_set(Ecore_Evas *ee, void (*func) (Ecore_Evas *ee)) +{ + ee->func.fn_focus_out = func; +} + +void +ecore_evas_callback_mouse_in_set(Ecore_Evas *ee, void (*func) (Ecore_Evas *ee)) +{ + ee->func.fn_mouse_in = func; +} + +void +ecore_evas_callback_mouse_out_set(Ecore_Evas *ee, void (*func) (Ecore_Evas *ee)) +{ + ee->func.fn_mouse_out = func; +} Evas * ecore_evas_get(Ecore_Evas *ee) @@ -475,6 +602,18 @@ } void +ecore_evas_raise(Ecore_Evas *ee) +{ + ecore_x_window_raise(ee->x11.win_container); +} + +void +ecore_evas_lower(Ecore_Evas *ee) +{ + ecore_x_window_lower(ee->x11.win_container); +} + +void ecore_evas_title_set(Ecore_Evas *ee, const char *t) { if (ee->prop.title) free(ee->prop.title); @@ -571,11 +710,13 @@ void ecore_evas_focus_set(Ecore_Evas *ee, int on) { + ecore_x_window_focus(ee->x11.win_container); } int ecore_evas_focus_get(Ecore_Evas *ee) { + return ee->prop.focused; } void @@ -601,31 +742,79 @@ void ecore_evas_override_set(Ecore_Evas *ee, int on) { + if (((ee->prop.override) && (on)) || + ((!ee->prop.override) && (!on))) return; + ecore_x_window_hide(ee->x11.win); + ecore_x_window_reparent(ee->x11.win, 0, 0, 0); + ecore_x_window_del(ee->x11.win_container); + if (on) + ee->x11.win_container = ecore_x_window_override_new(0, ee->x, ee->y, ee->w, +ee->h); + else + { + ee->x11.win_container = ecore_x_window_new(0, ee->x, ee->y, ee->w, ee->h); + ecore_x_window_prop_title_set(ee->x11.win_container, ee->prop.title); + ecore_x_window_prop_name_class_set(ee->x11.win_container, ee->prop.name, +ee->prop.clas); + if (ee->func.fn_delete_request) + ecore_x_window_prop_delete_request_set(ee->x11.win_container, 1); + } + ecore_x_window_reparent(ee->x11.win, ee->x11.win_container, 0, 0); + ecore_x_window_show(ee->x11.win); + if (ee->visible) ecore_x_window_show(ee->x11.win_container); + if (ee->prop.focused) ecore_x_window_focus(ee->x11.win_container); + ee->prop.override = on; } int ecore_evas_override_get(Ecore_Evas *ee) { + return ee->prop.override; } void ecore_evas_maximized_set(Ecore_Evas *ee, int on) { + printf("ecore_evas_maximized_set() does not do anything yet.\n"); } int ecore_evas_maximized_get(Ecore_Evas *ee) { + return 0; } void ecore_evas_fullscreen_set(Ecore_Evas *ee, int on) { + if (((ee->prop.fullscreen) && (on)) || + ((!ee->prop.fullscreen) && (!on))) return; + if (on) + { + int rw, rh; + + ecore_x_window_size_get(0, &rw, &rh); + ecore_x_window_resize(ee->x11.win, rw, rh); + ecore_x_window_reparent(ee->x11.win, 0, 0, 0); + ecore_x_window_raise(ee->x11.win); + ecore_x_window_show(ee->x11.win); + ecore_x_window_focus(ee->x11.win); + ee->x = 0; + ee->y = 0; + } + else + { + int pw, ph; + + ecore_x_window_size_get(ee->x11.win_container, &pw, &ph); + ecore_x_window_reparent(ee->x11.win, ee->x11.win_container, 0, 0); + ecore_x_window_resize(ee->x11.win, pw, ph); + } + ee->prop.fullscreen = on; } int ecore_evas_fullscreen_get(Ecore_Evas *ee) { + return ee->prop.fullscreen; } void =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_evas/Attic/ecore_evas_private.h,v retrieving revision 1.1.2.4 retrieving revision 1.1.2.5 diff -u -3 -r1.1.2.4 -r1.1.2.5 --- ecore_evas_private.h 8 Feb 2003 01:30:57 -0000 1.1.2.4 +++ ecore_evas_private.h 8 Feb 2003 05:05:04 -0000 1.1.2.5 @@ -51,7 +51,17 @@ } prop; struct { - void (*func_free) (Ecore_Evas *ee); + void (*fn_free) (Ecore_Evas *ee); + void (*fn_resize) (Ecore_Evas *ee); + void (*fn_move) (Ecore_Evas *ee); + void (*fn_show) (Ecore_Evas *ee); + void (*fn_hide) (Ecore_Evas *ee); + void (*fn_delete_request) (Ecore_Evas *ee); + void (*fn_destroy) (Ecore_Evas *ee); + void (*fn_focus_in) (Ecore_Evas *ee); + void (*fn_focus_out) (Ecore_Evas *ee); + void (*fn_mouse_in) (Ecore_Evas *ee); + void (*fn_mouse_out) (Ecore_Evas *ee); } func; #ifdef BUILD_EVAS_X ------------------------------------------------------- This SF.NET email is sponsored by: SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See! http://www.vasoftware.com _______________________________________________ enlightenment-cvs mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs