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