This patch is surely a little crappy...
I just tried to notify the evas widget when its window is resized.
We might prefer to split the resize/reposition events.

Signed-off-by: Lionel Landwerlin <llandwer...@gmail.com>
---
 src/lib/ecore_directfb/Ecore_DirectFB.h  |   24 +++--
 src/lib/ecore_directfb/ecore_directfb.c  |  159 +++++++++++++++++-------------
 src/lib/ecore_evas/ecore_evas_directfb.c |   68 ++++++++++---
 3 files changed, 159 insertions(+), 92 deletions(-)

diff --git a/src/lib/ecore_directfb/Ecore_DirectFB.h 
b/src/lib/ecore_directfb/Ecore_DirectFB.h
index d9b40d1..9087387 100644
--- a/src/lib/ecore_directfb/Ecore_DirectFB.h
+++ b/src/lib/ecore_directfb/Ecore_DirectFB.h
@@ -30,8 +30,9 @@
 extern "C" {
 #endif
 
-EAPI extern int ECORE_DIRECTFB_EVENT_POSITION;
-EAPI extern int ECORE_DIRECTFB_EVENT_SIZE;
+/* EAPI extern int ECORE_DIRECTFB_EVENT_POSITION; */
+/* EAPI extern int ECORE_DIRECTFB_EVENT_SIZE; */
+EAPI extern int ECORE_DIRECTFB_EVENT_CONFIGURE;
 EAPI extern int ECORE_DIRECTFB_EVENT_CLOSE;
 EAPI extern int ECORE_DIRECTFB_EVENT_DESTROYED;
 EAPI extern int ECORE_DIRECTFB_EVENT_GOT_FOCUS;
@@ -45,14 +46,14 @@ EAPI extern int ECORE_DIRECTFB_EVENT_ENTER;
 EAPI extern int ECORE_DIRECTFB_EVENT_LEAVE;
 EAPI extern int ECORE_DIRECTFB_EVENT_WHEEL;
 
-       
+
 
 #ifndef _ECORE_DIRECTFB_WINDOW_PREDEF
 typedef struct _Ecore_DirectFB_Window                  Ecore_DirectFB_Window;
 #endif
 typedef struct _Ecore_DirectFB_Cursor                  Ecore_DirectFB_Cursor;
 
-typedef struct _Ecore_DirectFB_Event_Key_Down          
Ecore_DirectFB_Event_Key_Down; 
+typedef struct _Ecore_DirectFB_Event_Key_Down          
Ecore_DirectFB_Event_Key_Down;
 typedef struct _Ecore_DirectFB_Event_Key_Up            
Ecore_DirectFB_Event_Key_Up;
 typedef struct _Ecore_DirectFB_Event_Button_Down       
Ecore_DirectFB_Event_Button_Down;
 typedef struct _Ecore_DirectFB_Event_Button_Up         
Ecore_DirectFB_Event_Button_Up;
@@ -62,11 +63,11 @@ typedef struct _Ecore_DirectFB_Event_Leave          
Ecore_DirectFB_Event_Leave;
 typedef struct _Ecore_DirectFB_Event_Wheel             
Ecore_DirectFB_Event_Wheel;
 typedef struct _Ecore_DirectFB_Event_Got_Focus         
Ecore_DirectFB_Event_Got_Focus;
 typedef struct _Ecore_DirectFB_Event_Lost_Focus                
Ecore_DirectFB_Event_Lost_Focus;
-
+typedef struct _Ecore_DirectFB_Event_Configure          
Ecore_DirectFB_Event_Configure;
 
 /* this struct is to keep windows data (id, window itself and surface) in 
memory as every call
  * to DirectFB for this values (e.g window->GetSurface(window,&surface)) will 
increment the
- * reference count, then we will have to release N times the data, so better 
we just ask for 
+ * reference count, then we will have to release N times the data, so better 
we just ask for
  them once */
 struct _Ecore_DirectFB_Window
 {
@@ -74,7 +75,7 @@ struct _Ecore_DirectFB_Window
        IDirectFBWindow         *window;
        IDirectFBSurface        *surface;
        Ecore_DirectFB_Cursor   *cursor;
-       
+
 };
 
 struct _Ecore_DirectFB_Cursor
@@ -93,7 +94,7 @@ struct _Ecore_DirectFB_Event_Key_Down /** DirectFB Key Down 
event */
        unsigned int time;
        DFBWindowID win;
 };
-   
+
 struct _Ecore_DirectFB_Event_Key_Up /** DirectFB Key Up event */
 {
        char   *name; /**< The name of the key that was released */
@@ -166,6 +167,13 @@ struct _Ecore_DirectFB_Event_Lost_Focus
        DFBWindowID win;
 };
 
+struct _Ecore_DirectFB_Event_Configure
+{
+        unsigned int time;
+        int x, y, w, h;
+        DFBWindowID win;
+};
+
 /* main functions */
 EAPI int ecore_directfb_init(const char *name);
 EAPI int ecore_directfb_shutdown(void);
diff --git a/src/lib/ecore_directfb/ecore_directfb.c 
b/src/lib/ecore_directfb/ecore_directfb.c
index 191be53..fd35c70 100644
--- a/src/lib/ecore_directfb/ecore_directfb.c
+++ b/src/lib/ecore_directfb/ecore_directfb.c
@@ -21,7 +21,7 @@
 /* with this you can create windows of directfb and handle events through ecore
  * TODO:
  * - handle all event types
- * - 
+ * -
  * */
 
 static int _ecore_directfb_init_count = 0;
@@ -33,8 +33,9 @@ static int _ecore_directfb_fullscreen_window_id = 0;
 static int _cursor_x = 0;
 static int _cursor_y = 0;
 
-EAPI int ECORE_DIRECTFB_EVENT_POSITION = 0;
-EAPI int ECORE_DIRECTFB_EVENT_SIZE = 0;
+/* EAPI int ECORE_DIRECTFB_EVENT_POSITION = 0; */
+/* EAPI int ECORE_DIRECTFB_EVENT_SIZE = 0; */
+EAPI int ECORE_DIRECTFB_EVENT_CONFIGURE = 0;
 EAPI int ECORE_DIRECTFB_EVENT_CLOSE = 0;
 EAPI int ECORE_DIRECTFB_EVENT_DESTROYED = 0;
 EAPI int ECORE_DIRECTFB_EVENT_GOT_FOCUS = 0;
@@ -70,11 +71,11 @@ static DFBResult _err;                              // 
usefull for DFBCHECK
 /* free ecore directfb events functions */
 /****************************************/
 
-static void 
+static void
 _ecore_directfb_event_free_key_down(void *data __UNUSED__, void *ev)
 {
    Ecore_DirectFB_Event_Key_Up *e;
-   
+
    e = ev;
    if(e->name) free(e->name);
    if (e->string) free(e->string);
@@ -86,7 +87,7 @@ static void
 _ecore_directfb_event_free_key_up(void *data __UNUSED__, void *ev)
 {
    Ecore_DirectFB_Event_Key_Up *e;
-   
+
    e = ev;
    if(e->name) free(e->name);
    if (e->string) free(e->string);
@@ -128,7 +129,7 @@ _ecore_directfb_event_handle_motion(DFBEvent *evt)
                        e->win = _ecore_directfb_fullscreen_window_id;
                        e->time = 0;
                        break;
-             
+
                case DFEC_WINDOW:
                        e->modifiers = 0;
                        e->x = evt->window.x;
@@ -148,16 +149,16 @@ _ecore_directfb_event_handle_key_down(DFBEvent *evt)
        Ecore_DirectFB_Event_Key_Down *e;
        unsigned int key_symbol;
        struct keymap *k;
-       
+
        e = calloc(1, sizeof(Ecore_DirectFB_Event_Key_Down));
-       
+
        switch(evt->clazz)
        {
                case DFEC_INPUT:
                        key_symbol = evt->input.key_symbol;
                        k = eina_hash_find(_ecore_directfb_key_symbols_hash, 
&key_symbol);
 
-                       if(!k) 
+                       if(!k)
                        {
                                printf("error en el numero, %0X\n", 
evt->input.key_symbol);
                                return;
@@ -168,12 +169,12 @@ _ecore_directfb_event_handle_key_down(DFBEvent *evt)
                        e->win = _ecore_directfb_fullscreen_window_id;
                        e->time = 0;
                        break;
-             
+
                case DFEC_WINDOW:
                        key_symbol = evt->window.key_symbol;
                        k = eina_hash_find(_ecore_directfb_key_symbols_hash, 
&key_symbol);
 
-                       if(!k) 
+                       if(!k)
                        {
                                printf("error en el numero, %0X\n", 
evt->window.key_symbol);
                                return;
@@ -187,7 +188,7 @@ _ecore_directfb_event_handle_key_down(DFBEvent *evt)
                default:
                        break;
        }
-                               
+
        ecore_event_add(ECORE_DIRECTFB_EVENT_KEY_DOWN, e, 
_ecore_directfb_event_free_key_down, NULL);
 }
 static void
@@ -196,17 +197,17 @@ _ecore_directfb_event_handle_key_up(DFBEvent *evt)
        Ecore_DirectFB_Event_Key_Up *e;
        unsigned int key_symbol;
        struct keymap *k;
-       
+
        e = calloc(1, sizeof(Ecore_DirectFB_Event_Key_Up));
-       
+
        switch(evt->clazz)
        {
                case DFEC_INPUT:
                        key_symbol = evt->input.key_symbol;
                        k = eina_hash_find(_ecore_directfb_key_symbols_hash, 
&key_symbol);
 
-                       
-                       if(!k) 
+
+                       if(!k)
                        {
                                printf("error en el numero, %0X\n", 
evt->input.key_symbol);
                                return;
@@ -217,12 +218,12 @@ _ecore_directfb_event_handle_key_up(DFBEvent *evt)
                        e->win = _ecore_directfb_fullscreen_window_id;
                        e->time = 0;
                        break;
-             
+
                case DFEC_WINDOW:
                        key_symbol = evt->window.key_symbol;
                        k = eina_hash_find(_ecore_directfb_key_symbols_hash, 
&key_symbol);
 
-                       if(!k) 
+                       if(!k)
                        {
                                printf("error en el numero, %0X\n", 
evt->window.key_symbol);
                                return;
@@ -256,9 +257,9 @@ _ecore_directfb_event_handle_button_down(DFBEvent *evt)
                        e->y = _cursor_y;
                        e->win = _ecore_directfb_fullscreen_window_id;
                        e->time = 0;
-                       
+
                        break;
-             
+
                case DFEC_WINDOW:
                        e->button = evt->window.button + 1;
                        e->modifiers = 0;
@@ -270,7 +271,7 @@ _ecore_directfb_event_handle_button_down(DFBEvent *evt)
                default:
                        break;
        }
-                       
+
        ecore_event_add(ECORE_DIRECTFB_EVENT_BUTTON_DOWN, e, NULL, NULL);
 
 }
@@ -287,12 +288,12 @@ _ecore_directfb_event_handle_button_up(DFBEvent *evt)
                        e->button = evt->input.button + 1;
                        e->modifiers = 0;
                        e->x = _cursor_x;
-                       e->y = _cursor_y; 
+                       e->y = _cursor_y;
                        e->win = _ecore_directfb_fullscreen_window_id;
                        e->time = 0;
-                       
+
                        break;
-             
+
                case DFEC_WINDOW:
                        e->button = evt->window.button + 1;
                        e->modifiers = 0;
@@ -309,17 +310,34 @@ _ecore_directfb_event_handle_button_up(DFBEvent *evt)
 }
 
 static void
+_ecore_directfb_event_handle_configure(DFBWindowEvent *evt)
+{
+        Ecore_DirectFB_Event_Configure *e;
+        IDirectFBWindow *win;
+        e = calloc(1, sizeof(Ecore_DirectFB_Event_Configure));
+
+        e->time = 0;
+        e->win = evt->window_id;
+
+        DFBCHECK(_layer->GetWindow(_layer, evt->window_id, &win));
+        DFBCHECK(win->GetPosition(win, &e->x, &e->y));
+        DFBCHECK(win->GetSize(win, &e->w, &e->h));
+        ecore_event_add(ECORE_DIRECTFB_EVENT_CONFIGURE, e, NULL, NULL);
+
+}
+
+static void
 _ecore_directfb_event_handle_enter(DFBWindowEvent *evt)
 {
        Ecore_DirectFB_Event_Enter *e;
-       e = calloc(1, sizeof(Ecore_DirectFB_Event_Enter));
+        e = calloc(1, sizeof(Ecore_DirectFB_Event_Enter));
 
        e->modifiers = 0;
        e->x = evt->x;
        e->y = evt->y;
        e->win = evt->window_id;
        e->time = 0;
-                       
+
        ecore_event_add(ECORE_DIRECTFB_EVENT_ENTER, e, NULL, NULL);
 
 }
@@ -335,7 +353,7 @@ _ecore_directfb_event_handle_leave(DFBWindowEvent *evt)
        e->y = evt->y;
        e->win = evt->window_id;
        e->time = 0;
-                       
+
        ecore_event_add(ECORE_DIRECTFB_EVENT_LEAVE, e, NULL, NULL);
 
 }
@@ -352,7 +370,7 @@ _ecore_directfb_event_handle_wheel(DFBWindowEvent *evt)
        e->modifiers = 0;
        e->win = evt->window_id;
        e->time = 0;
-                       
+
        ecore_event_add(ECORE_DIRECTFB_EVENT_WHEEL, e, NULL, NULL);
 
 }
@@ -365,7 +383,7 @@ _ecore_directfb_event_handle_got_focus(DFBWindowEvent *evt)
 
        e->win = evt->window_id;
        e->time = 0;
-                       
+
        ecore_event_add(ECORE_DIRECTFB_EVENT_GOT_FOCUS, e, NULL, NULL);
 
 }
@@ -378,7 +396,7 @@ _ecore_directfb_event_handle_lost_focus(DFBWindowEvent *evt)
 
        e->win = evt->window_id;
        e->time = 0;
-                       
+
        ecore_event_add(ECORE_DIRECTFB_EVENT_LOST_FOCUS, e, NULL, NULL);
 
 }
@@ -396,11 +414,11 @@ _ecore_directfb_input_event_fd_handler(void *data 
__UNUSED__,Ecore_Fd_Handler *f
 {
        DFBEvent evt;
        int v = 0;
-               
+
        v = read(_input_event_fd, &evt, sizeof(DFBEvent));
        if (v < 0) return 1;
        if (v < 1) return 1;
-       
+
        /* we are getting duplicate events, only parse if we are in fullscreen 
*/
        //if(_ecore_directfb_fullscreen_window_id == 0) break;
        if(evt.input.type == DIET_KEYPRESS)
@@ -416,21 +434,21 @@ _ecore_directfb_input_event_fd_handler(void *data 
__UNUSED__,Ecore_Fd_Handler *f
 
        return 1;
 }
-       
+
 static int
 _ecore_directfb_window_event_fd_handler(void *data __UNUSED__,Ecore_Fd_Handler 
*fd_handler __UNUSED__)
 {
        DFBEvent evt;
        int v = 0;
-               
+
        v = read(_window_event_fd, &evt, sizeof(DFBEvent));
        if (v < 0) return 1;
        if (v < 1) return 1;
-                       
+
        if(evt.window.type & DWET_POSITION)
-               printf("position\n");
+                _ecore_directfb_event_handle_configure(&evt.window);
        if(evt.window.type & DWET_SIZE)
-               printf("size\n");
+               _ecore_directfb_event_handle_configure(&evt.window);
        if(evt.window.type & DWET_CLOSE)
                printf("close\n");
        if(evt.window.type & DWET_DESTROYED)
@@ -457,7 +475,7 @@ _ecore_directfb_window_event_fd_handler(void *data 
__UNUSED__,Ecore_Fd_Handler *
                _ecore_directfb_event_handle_wheel(&evt.window);
        return 1;
 }
-       
+
 /* api functions */
 /*****************/
 
@@ -478,7 +496,7 @@ ecore_directfb_window_new(int x, int y, int w, int h)
        IDirectFBSurface *dfb_surface = NULL;
        DFBWindowDescription desc;
        DFBWindowID id;
-       
+
        memset(&desc, 0, sizeof(DFBWindowDescription));
        desc.flags = (DWDESC_POSX | DWDESC_POSY | DWDESC_WIDTH | DWDESC_HEIGHT 
| DWDESC_CAPS);
        desc.posx = x;
@@ -486,17 +504,17 @@ ecore_directfb_window_new(int x, int y, int w, int h)
        desc.width = w;
        desc.height = h;
        desc.caps = DWCAPS_ALPHACHANNEL;
-       
+
        DFBCHECK(_layer->CreateWindow(_layer, &desc, &dfb_window));
-       
+
        dfb_window->AttachEventBuffer(dfb_window, _window_event);
        dfb_window->SetOptions(dfb_window,DWOP_NONE);
        dfb_window->SetOpacity(dfb_window, 0xFF);
-       
+
        DFBCHECK(dfb_window->GetID(dfb_window, &id));
        DFBCHECK(dfb_window->GetSurface(dfb_window,&dfb_surface));
-       
-       window = malloc(sizeof(Ecore_DirectFB_Window)); 
+
+       window = malloc(sizeof(Ecore_DirectFB_Window));
        window->id = id;
        window->window = dfb_window;
        window->surface = dfb_surface;
@@ -526,13 +544,13 @@ ecore_directfb_window_resize(Ecore_DirectFB_Window 
*ecore_window, int w, int h)
        DFBCHECK(ecore_window->window->Resize(ecore_window->window, w, h));
 }
 
-EAPI void 
+EAPI void
 ecore_directfb_window_focus(Ecore_DirectFB_Window *ecore_window)
-{      
-       DFBCHECK(ecore_window->window->RequestFocus(ecore_window->window));     
+{
+       DFBCHECK(ecore_window->window->RequestFocus(ecore_window->window));
 }
 
-EAPI void 
+EAPI void
 ecore_directfb_window_hide(Ecore_DirectFB_Window *ecore_window)
 {
        DFBCHECK(ecore_window->window->SetOpacity(ecore_window->window,0));
@@ -549,7 +567,7 @@ EAPI void
 ecore_directfb_window_shaped_set(Ecore_DirectFB_Window *ecore_window, int set)
 {
        DFBWindowOptions opts;
-       
+
        DFBCHECK(ecore_window->window->GetOptions(ecore_window->window, &opts));
        if(set)
        {
@@ -573,13 +591,13 @@ ecore_directfb_window_cursor_show(Ecore_DirectFB_Window 
*ecore_window, int show)
                /* create an empty cursor and set it */
                IDirectFBSurface *cursor;
                DFBSurfaceDescription desc;
-                       
+
                memset(&desc, 0, sizeof(DFBSurfaceDescription));
                desc.flags = (DSDESC_HEIGHT | DSDESC_WIDTH | 
DSDESC_PIXELFORMAT);
                desc.width = 1;
                desc.height = 1;
                desc.pixelformat = DSPF_A1;
-                       
+
                DFBCHECK(_dfb->CreateSurface(_dfb,&desc,&cursor));
                DFBCHECK(cursor->Clear(cursor,0,0,0,0));
                
DFBCHECK(ecore_window->window->SetCursorShape(ecore_window->window, cursor, 0, 
0));
@@ -596,7 +614,7 @@ ecore_directfb_window_cursor_show(Ecore_DirectFB_Window 
*ecore_window, int show)
                {
                        
DFBCHECK(ecore_window->window->SetCursorShape(ecore_window->window, NULL, 0, 
0));
                }
-                       
+
        }
 }
 
@@ -609,16 +627,16 @@ ecore_directfb_window_cursor_set(Ecore_DirectFB_Window 
*ecore_window, Ecore_Dire
                
DFBCHECK(ecore_window->window->SetCursorShape(ecore_window->window, NULL, 0, 
0));
                return;
        }
-       if(cursor)      
+       if(cursor)
        {
                ecore_window->cursor = cursor;
                
DFBCHECK(ecore_window->window->SetCursorShape(ecore_window->window, 
cursor->surface, cursor->hot_x, cursor->hot_y));
-               
+
        }
 
 }
 
-EAPI void 
+EAPI void
 ecore_directfb_window_fullscreen_set(Ecore_DirectFB_Window *ecore_window, int 
on)
 {
        // always release the surface (we are going to get a new one in both 
cases)
@@ -631,19 +649,19 @@ 
ecore_directfb_window_fullscreen_set(Ecore_DirectFB_Window *ecore_window, int on
                
DFBCHECK(_input_event->CreateFileDescriptor(_input_event,&_input_event_fd));
                /* the event of axismove sends one axis at a time, so we must 
store both */
                
DFBCHECK(_layer->GetCursorPosition(_layer,&_cursor_x,&_cursor_y));
-               
+
                _input_event_fd_handler_handle = 
ecore_main_fd_handler_add(_input_event_fd,ECORE_FD_READ,_ecore_directfb_input_event_fd_handler,
 NULL,NULL,NULL);
                _ecore_directfb_fullscreen_window_id = ecore_window->id;
        }
        else
        {
-               DFBCHECK(_input_event->Release(_input_event));  
+               DFBCHECK(_input_event->Release(_input_event));
                DFBCHECK(_layer->SetCooperativeLevel(_layer,DLSCL_SHARED));
                DFBCHECK(ecore_window->window->GetSurface(ecore_window->window, 
&ecore_window->surface));
                ecore_main_fd_handler_del(_input_event_fd_handler_handle);
                _ecore_directfb_fullscreen_window_id = 0;
        }
-               
+
 }
 
 EAPI void
@@ -657,24 +675,25 @@ EAPI int
 ecore_directfb_init(const char *name __UNUSED__)
 {
        int i = 0;
-       
+
        if (++_ecore_directfb_init_count != 1) return 
_ecore_directfb_init_count;
-       
+
        DFBCHECK(DirectFBInit(NULL,NULL));
        DFBCHECK(DirectFBCreate(&_dfb));
-       
+
        DFBCHECK(_dfb->GetDisplayLayer(_dfb, DLID_PRIMARY, &_layer));
        DFBCHECK(_layer->SetCooperativeLevel(_layer, DLSCL_SHARED));
-       
-       
+
+
        /* window events and fd */
        DFBCHECK(_dfb->CreateEventBuffer(_dfb, &_window_event));
        
DFBCHECK(_window_event->CreateFileDescriptor(_window_event,&_window_event_fd));
        _window_event_fd_handler_handle = 
ecore_main_fd_handler_add(_window_event_fd,ECORE_FD_READ,_ecore_directfb_window_event_fd_handler,
 NULL,NULL,NULL);
-       
+
        /* register ecore directfb events */
-       ECORE_DIRECTFB_EVENT_POSITION   = ecore_event_type_new();
-       ECORE_DIRECTFB_EVENT_SIZE = ecore_event_type_new();;
+       /* ECORE_DIRECTFB_EVENT_POSITION        = ecore_event_type_new(); */
+       /* ECORE_DIRECTFB_EVENT_SIZE = ecore_event_type_new();; */
+       ECORE_DIRECTFB_EVENT_CONFIGURE = ecore_event_type_new();;
        ECORE_DIRECTFB_EVENT_CLOSE = ecore_event_type_new();;
        ECORE_DIRECTFB_EVENT_DESTROYED = ecore_event_type_new();;
        ECORE_DIRECTFB_EVENT_GOT_FOCUS = ecore_event_type_new();;
@@ -712,12 +731,12 @@ ecore_directfb_shutdown(void)
 
        if(_ecore_directfb_fullscreen_window_id)
        {
-               DFBCHECK(_input_event->Release(_input_event));  
+               DFBCHECK(_input_event->Release(_input_event));
                ecore_main_fd_handler_del(_input_event_fd_handler_handle);
        }
-       DFBCHECK(_window_event->Release(_window_event));        
+       DFBCHECK(_window_event->Release(_window_event));
        DFBCHECK(_layer->Release(_layer));
        DFBCHECK(_dfb->Release(_dfb));
-       
+
        return _ecore_directfb_init_count;
 }
diff --git a/src/lib/ecore_evas/ecore_evas_directfb.c 
b/src/lib/ecore_evas/ecore_evas_directfb.c
index 02e59fc..ff6c4da 100644
--- a/src/lib/ecore_evas/ecore_evas_directfb.c
+++ b/src/lib/ecore_evas/ecore_evas_directfb.c
@@ -89,6 +89,7 @@ _ecore_evas_directfb_winid_str_get(Ecore_X_Window win)
    id[6] = vals[(val >>  4) & 0xf];
    id[7] = vals[(val      ) & 0xf];
    id[8] = 0;
+
    return id;
 }
 
@@ -96,7 +97,7 @@ static Ecore_Evas *
 _ecore_evas_directfb_match(DFBWindowID win)
 {
    Ecore_Evas *ee;
-   
+
    ee = eina_hash_find(ecore_evases_hash, 
_ecore_evas_directfb_winid_str_get(win));
    return ee;
 }
@@ -250,6 +251,44 @@ _ecore_evas_directfb_event_lost_focus(void *data 
__UNUSED__, int type __UNUSED__
    return 1;
 }
 
+static int
+_ecore_evas_direct_event_configure(void *data, int type, void *event)
+{
+   Ecore_Evas *ee;
+   Ecore_DirectFB_Event_Configure *e;
+   int ow, oh;
+   Evas_Coord vw, vh;
+
+   e = event;
+   ee = _ecore_evas_directfb_match(e->win);
+
+   if (!ee) return 1; /* pass on event */
+
+   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;
+         if ((ee->rotation == 90) || (ee->rotation == 270))
+            {
+               evas_output_size_set(ee->evas, ee->h, ee->w);
+               evas_output_viewport_set(ee->evas, 0, 0, ee->h, ee->w);
+            }
+         else
+            {
+               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 1;
+}
+
 int
 _ecore_evas_directfb_shutdown(void)
 {
@@ -292,7 +331,7 @@ _ecore_evas_directfb_init(void)
    ecore_evas_event_handlers[7]  = 
ecore_event_handler_add(ECORE_DIRECTFB_EVENT_WHEEL, 
_ecore_evas_directfb_event_wheel, NULL);
    ecore_evas_event_handlers[8]  = 
ecore_event_handler_add(ECORE_DIRECTFB_EVENT_GOT_FOCUS, 
_ecore_evas_directfb_event_got_focus, NULL);
    ecore_evas_event_handlers[9]  = 
ecore_event_handler_add(ECORE_DIRECTFB_EVENT_LOST_FOCUS, 
_ecore_evas_directfb_event_lost_focus, NULL);
-   ecore_evas_event_handlers[10]  = NULL;
+   ecore_evas_event_handlers[10]  = 
ecore_event_handler_add(ECORE_DIRECTFB_EVENT_CONFIGURE, 
_ecore_evas_direct_event_configure, NULL);
    ecore_evas_event_handlers[11]  = NULL;
    ecore_evas_event_handlers[12]  = NULL;
 
@@ -305,6 +344,7 @@ _ecore_evas_directfb_init(void)
 static void
 _ecore_evas_directfb_free(Ecore_Evas *ee)
 {
+   printf ("delete window %i from list\n", ee->engine.directfb.window->id);
    eina_hash_del(ecore_evases_hash, 
_ecore_evas_directfb_winid_str_get(ee->engine.directfb.window->id), ee);
    ecore_directfb_window_free(ee->engine.directfb.window);
    ecore_evases = (Ecore_Evas *) 
eina_inlist_remove(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
@@ -323,18 +363,18 @@ _ecore_evas_directfb_resize(Ecore_Evas *ee, int w, int h)
 {
    if ((w == ee->w) && (h == ee->h)) return;
    ecore_directfb_window_resize(ee->engine.directfb.window, w, h);
-   ee->w = w;
-   ee->h = h;
-   if ((ee->rotation == 90) || (ee->rotation == 270))
-     {
-       evas_output_size_set(ee->evas, ee->h, ee->w);
-       evas_output_viewport_set(ee->evas, 0, 0, ee->h, ee->w);
-     }
-   else
-     {
-       evas_output_size_set(ee->evas, ee->w, ee->h);
-       evas_output_viewport_set(ee->evas, 0, 0, ee->w, ee->h);
-     }
+   /* ee->w = w; */
+   /* ee->h = h; */
+   /* if ((ee->rotation == 90) || (ee->rotation == 270)) */
+   /*   { */
+   /*      evas_output_size_set(ee->evas, ee->h, ee->w); */
+   /*      evas_output_viewport_set(ee->evas, 0, 0, ee->h, ee->w); */
+   /*   } */
+   /* else */
+   /*   { */
+   /*      evas_output_size_set(ee->evas, ee->w, ee->h); */
+   /*      evas_output_viewport_set(ee->evas, 0, 0, ee->w, ee->h); */
+   /*   } */
 }
 
 static void
-- 
1.6.5.7




------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to