Here's a patch to add this function (selfexplanatory, no?)

Hope this patch gets in, if not please tell me what you dislike.
BTW: I'm still wondering if you think my idea about StretchBlit should
be done...

Regards Hallvar Helleseth
Index: include/directfb.h
===================================================================
RCS file: /cvs/directfb/DirectFB/include/directfb.h,v
retrieving revision 1.72
diff -c -u -r1.72 directfb.h
--- include/directfb.h  15 Jan 2002 21:33:48 -0000      1.72
+++ include/directfb.h  20 Jan 2002 20:38:38 -0000
@@ -1221,7 +1221,15 @@
                IDirectFBWindow                   **interface
           );
 
-
+          /*
+           * Get the window that has the given window id
+                   */
+          DFBResult (*GetWindow) (
+              IDirectFBDisplayLayer              *thiz,
+              DFBWindowID                         id,
+              IDirectFBWindow                   **interface
+          );
+                        
         /** Cursor handling **/
 
           /*
Index: src/core/windows.c
===================================================================
RCS file: /cvs/directfb/DirectFB/src/core/windows.c,v
retrieving revision 1.44
diff -c -u -r1.44 windows.c
--- src/core/windows.c  15 Jan 2002 21:33:49 -0000      1.44
+++ src/core/windows.c  20 Jan 2002 20:38:38 -0000
@@ -309,6 +309,8 @@
 
      window->stack   = stack;
 
+     window->container = NULL;
+
      window->reactor = reactor_new(sizeof(DFBWindowEvent));
 
      return window;
Index: src/core/windows.h
===================================================================
RCS file: /cvs/directfb/DirectFB/src/core/windows.h,v
retrieving revision 1.15
diff -c -u -r1.15 windows.h
--- src/core/windows.h  14 Jan 2002 09:49:35 -0000      1.15
+++ src/core/windows.h  20 Jan 2002 20:38:39 -0000
@@ -71,6 +71,8 @@
      CoreWindowStack      *stack;           /* window stack the window belongs */
 
      FusionReactor        *reactor;         /* event dispatcher */
+
+     IDirectFBWindow      *container        /* IDirectFBWindow the window belongs */
 };
 
 /*
Index: src/display/idirectfbdisplaylayer.c
===================================================================
RCS file: /cvs/directfb/DirectFB/src/display/idirectfbdisplaylayer.c,v
retrieving revision 1.23
diff -c -u -r1.23 idirectfbdisplaylayer.c
--- src/display/idirectfbdisplaylayer.c 15 Jan 2002 21:33:49 -0000      1.23
+++ src/display/idirectfbdisplaylayer.c 20 Jan 2002 20:38:40 -0000
@@ -398,6 +398,27 @@
 }
 
 static DFBResult
+IDirectFBDisplayLayer_GetWindow( IDirectFBDisplayLayer  *thiz,
+                                 DFBWindowID             id,
+                                 IDirectFBWindow       **window )
+{
+   CoreWindow **windows;
+   CoreWindow *w;
+   int i=0;
+   INTERFACE_GET_DATA(IDirectFBDisplayLayer)
+
+   windows = dfb_layers->shared->windowstack->windows;
+
+   for(w = windows[i];w;w = windows[i++]) {
+     if(w->id == id) {
+        *window = w->container;
+        return DFB_OK;
+     }
+   }
+   return DFB_IDNOTFOUND;
+}
+
+static DFBResult
 IDirectFBDisplayLayer_WarpCursor( IDirectFBDisplayLayer *thiz, int x, int y )
 {
      INTERFACE_GET_DATA(IDirectFBDisplayLayer)
@@ -530,6 +551,7 @@
      thiz->GetColorAdjustment = IDirectFBDisplayLayer_GetColorAdjustment;
      thiz->SetColorAdjustment = IDirectFBDisplayLayer_SetColorAdjustment;
      thiz->CreateWindow = IDirectFBDisplayLayer_CreateWindow;
+     thiz->GetWindow = IDirectFBDisplayLayer_GetWindow;
      thiz->WarpCursor = IDirectFBDisplayLayer_WarpCursor;
      thiz->EnableCursor = IDirectFBDisplayLayer_EnableCursor;
      thiz->GetCursorPosition = IDirectFBDisplayLayer_GetCursorPosition;
Index: src/windows/idirectfbwindow.c
===================================================================
RCS file: /cvs/directfb/DirectFB/src/windows/idirectfbwindow.c,v
retrieving revision 1.24
diff -c -u -r1.24 idirectfbwindow.c
--- src/windows/idirectfbwindow.c       18 Jan 2002 13:08:09 -0000      1.24
+++ src/windows/idirectfbwindow.c       20 Jan 2002 20:38:40 -0000
@@ -452,7 +452,9 @@
 
      data->ref = 1;
      data->window = window;
-
+        
+     data->window->container = thiz;
+        
      reactor_attach( data->window->reactor, IDirectFBWindow_React, data );
 
      dfb_window_init( data->window );

Reply via email to