This patch fixes builderrors while using '--with-gfxdrivers' and
'--with-inputdrivers' with the current DirectFB version 1.6.3.

Patch is taken from
http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/dev-libs/DirectFB/files/DirectFB-1.6.3-setregion.patch

Signed-off-by: Carsten Schoenert <c.schoenert@gmail.com>

Index: b/gfxdrivers/cyber5k/cyber5k.c
===================================================================
--- a/gfxdrivers/cyber5k/cyber5k.c
+++ b/gfxdrivers/cyber5k/cyber5k.c
@@ -640,7 +640,8 @@
               CoreLayerRegionConfigFlags  updated,
               CoreSurface                *surface,
               CorePalette                *palette,
-              CoreSurfaceBufferLock      *lock )
+              CoreSurfaceBufferLock      *left_lock,
+              CoreSurfaceBufferLock      *right_lock )
 {
      DFBResult ret;
 
@@ -648,7 +649,7 @@
      ret = oldPrimaryFuncs.SetRegion( layer, oldPrimaryDriverData,
                                       layer_data, region_data,
                                       config, updated, surface,
-                                      palette, lock );
+                                      palette, left_lock, right_lock );
      if (ret)
           return ret;
 
Index: b/gfxdrivers/radeon/radeon_crtc1.c
===================================================================
--- a/gfxdrivers/radeon/radeon_crtc1.c
+++ b/gfxdrivers/radeon/radeon_crtc1.c
@@ -147,14 +147,15 @@
                 CoreLayerRegionConfigFlags  updated,
                 CoreSurface                *surface,
                 CorePalette                *palette,
-                CoreSurfaceBufferLock      *lock )
+                CoreSurfaceBufferLock      *left_lock,
+                CoreSurfaceBufferLock      *right_lock )
 {
      
      if (updated & ~CLRCF_OPTIONS) {
           return OldPrimaryLayerFuncs.SetRegion( layer,
                                                  OldPrimaryLayerDriverData,
                                                  layer_data, region_data,
-                                                 config, updated, surface, palette, lock );
+                                                 config, updated, surface, palette, left_lock, right_lock );
      }
 
      return DFB_OK;
Index: b/gfxdrivers/cle266/uc_primary.c
===================================================================
--- a/gfxdrivers/cle266/uc_primary.c
+++ b/gfxdrivers/cle266/uc_primary.c
@@ -142,7 +142,8 @@
               CoreLayerRegionConfigFlags  updated,
               CoreSurface                *surface,
               CorePalette                *palette,
-              CoreSurfaceBufferLock      *lock )
+              CoreSurfaceBufferLock      *left_lock,
+              CoreSurfaceBufferLock      *right_lock )
 {
      DFBResult     ret;
      UcDriverData *ucdrv = (UcDriverData*) driver_data;
@@ -151,7 +152,7 @@
      ret = ucOldPrimaryFuncs.SetRegion( layer, ucOldPrimaryDriverData,
                                         layer_data, region_data,
                                         config, updated, surface,
-                                        palette, lock );
+                                        palette, left_lock, right_lock );
      if (ret)
           return ret;
 
Index: b/gfxdrivers/unichrome/uc_primary.c
===================================================================
--- a/gfxdrivers/unichrome/uc_primary.c
+++ b/gfxdrivers/unichrome/uc_primary.c
@@ -139,7 +139,8 @@
               CoreLayerRegionConfigFlags  updated,
               CoreSurface                *surface,
               CorePalette                *palette,
-              CoreSurfaceBufferLock      *lock )
+              CoreSurfaceBufferLock      *left_lock,
+              CoreSurfaceBufferLock      *right_lock )
 {
      DFBResult     ret;
      UcDriverData *ucdrv = (UcDriverData*) driver_data;
@@ -148,7 +149,7 @@
      ret = ucOldPrimaryFuncs.SetRegion( layer, ucOldPrimaryDriverData,
                                         layer_data, region_data,
                                         config, updated, surface,
-                                        palette, lock );
+                                        palette, left_lock, right_lock );
      if (ret)
           return ret;
 
