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

Reply via email to