ooo-build r12360 - in branches/ooo-build-2-4: . patches/src680



Author: thorstenb
Date: Mon Apr 28 22:05:32 2008
New Revision: 12360
URL: http://svn.gnome.org/viewvc/ooo-build?rev=12360&view=rev

Log:
	* patches/src680/apply: added cairo-canvas-use-window-screen.diff

	* patches/src680/cairo-canvas-use-window-screen.diff: cairocanvas
	now handles multi-screen displays correctly

	* patches/src680/apply: moved vcl-dynamic-screens-fix.diff behind
	gstreamer patches, added vcl-limited-bmp-subset-fix.diff

	* patches/src680/sd-custom-animation-fixes.diff: backported
	upstream dev300 fix

	* patches/src680/vcl-dynamic-screens-fix.diff: backported
	much nicer upstream libXrandr-based fix

	* patches/src680/vcl-limited-bmp-subset-fix.diff: fixed crash
	during printing

    * patches/src680/quiet-build.diff: also made verbose=t enable
    verbosity



Added:
   branches/ooo-build-2-4/patches/src680/cairo-canvas-use-window-screen.diff
   branches/ooo-build-2-4/patches/src680/vcl-limited-bmp-subset-fix.diff
Modified:
   branches/ooo-build-2-4/ChangeLog
   branches/ooo-build-2-4/patches/src680/apply
   branches/ooo-build-2-4/patches/src680/quiet-build.diff
   branches/ooo-build-2-4/patches/src680/sd-custom-animation-fixes.diff
   branches/ooo-build-2-4/patches/src680/vcl-dynamic-screens-fix.diff

Modified: branches/ooo-build-2-4/patches/src680/apply
==============================================================================
--- branches/ooo-build-2-4/patches/src680/apply	(original)
+++ branches/ooo-build-2-4/patches/src680/apply	Mon Apr 28 22:05:32 2008
@@ -1183,9 +1183,6 @@
 # enable vcl to load bitmaps when height it negative
 vcl-bitmap2-negative-height.diff
 
-# fixes dynamic screen config bugs (xinerama & multiscreen)
-vcl-dynamic-screens-fix.diff, n#359955, rodo+thorsten
-
 [ SystemBits ]
 # use getopt() and readdir_r() from system glibc
 #FIXME src680: system-libc.diff, i#69033, rengelha
@@ -1704,6 +1701,7 @@
 cairo-makefile-mk.diff, i#70519, tml
 cairo-config_office-configure-in.diff, i#70519, tml
 cairo-cairo-1-4-10-diff.diff, i#70519, tml
+cairo-canvas-use-window-screen.diff, rodo
 
 # Additional diffs for cairocanvas on Win32
 cairo-canvas-win32.diff, i#70519, n#300398, tml
@@ -2263,6 +2261,13 @@
 [ Fixes ]
 sc-xclimpchangetrack-discard-bogus-formula-size.diff, n#355304, tml
 
+# fixes dynamic screen config bugs (xinerama & multiscreen)
+vcl-dynamic-screens-fix.diff, n#359955, rodo+thorsten
+
+# fixes calculating subset of bitmap correctly
+vcl-limited-bmp-subset-fix.diff, i#88818, thorsten
+
+
 # Fix pasting with middle button in Calc
 sc-middle-button-should-paste-text.diff, n#282767, i#86734, jholesov
 

Added: branches/ooo-build-2-4/patches/src680/cairo-canvas-use-window-screen.diff
==============================================================================
--- (empty file)
+++ branches/ooo-build-2-4/patches/src680/cairo-canvas-use-window-screen.diff	Mon Apr 28 22:05:32 2008
@@ -0,0 +1,64 @@
+diff -rup canvas/source/cairo-orig/cairo_cairo.cxx canvas/source/cairo/cairo_cairo.cxx
+--- canvas/source/cairo-orig/cairo_cairo.cxx	2008-04-28 18:00:30.000000000 +0200
++++ canvas/source/cairo/cairo_cairo.cxx	2008-04-28 18:10:30.000000000 +0200
+@@ -353,7 +353,7 @@ namespace cairo
+ 
+ 			return new Surface( mpSysData, mpDisplay, (long) hPixmap, pFormat,
+ 								cairo_xlib_surface_create_with_xrender_format( (Display*) mpDisplay, hPixmap,
+-																			   DefaultScreenOfDisplay( (Display *) mpDisplay ),
++																			   (Screen*) cairoHelperGetScreen( mpSysData ),
+ 																			   pFormat, width, height ) );
+ #elif defined (CAIRO_HAS_WIN32_SURFACE)
+ 			return new Surface( mpSysData, cairo_win32_surface_create_with_dib( nFormat, width, height ) );
+diff -rup canvas/source/cairo-orig/cairo_helper.cxx canvas/source/cairo/cairo_helper.cxx
+--- canvas/source/cairo-orig/cairo_helper.cxx	2008-04-28 18:00:30.000000000 +0200
++++ canvas/source/cairo/cairo_helper.cxx	2008-04-28 18:11:31.000000000 +0200
+@@ -38,6 +38,7 @@
+ #include "precompiled_canvas.hxx"
+ 
+ #include <cairo.h>
++#include <cairo_helper.hxx>
+ 
+ #ifdef CAIRO_HAS_XLIB_SURFACE
+ #include <vcl/sysdata.hxx>
+@@ -63,9 +64,18 @@ using namespace ::cairo;
+ 
+ //#define OOO_CANVAS_GLITZ 1
+ 
+-int cairoHelperGetDefaultScreen( void* display )
++void* cairoHelperGetScreen( const void* pSysData )
+ {
+-    return DefaultScreen( ( (Display *) display ) );
++    XWindowAttributes aWA;
++
++    XGetWindowAttributes( (::cairo::Display*) cairoHelperGetDisplay( pSysData ), cairoHelperGetWindow( pSysData ), &aWA );
++
++    return aWA.screen;
++}
++
++int cairoHelperGetScreenNumber( const void* pSysData )
++{
++    return XScreenNumberOfScreen( (::cairo::Screen*) cairoHelperGetScreen( pSysData ) );
+ }
+ 
+ void*
+@@ -76,7 +86,7 @@ cairoHelperGetGlitzDrawable( const Syste
+     Display* display = (Display*) pSysData->pDisplay;
+     ::cairo::Window window = pSysData->aWindow;
+     VisualID vid = XVisualIDFromVisual( (Visual*) pSysData->pVisual );
+-    int screen = DefaultScreen( display );
++    int screen = cairoHelperGetScreen( pSysData );
+ 
+     glitz_drawable_t *pDrawable = NULL;
+     glitz_format_t* pFormat = NULL;
+diff -rup canvas/source/cairo-orig/cairo_helper.hxx canvas/source/cairo/cairo_helper.hxx
+--- canvas/source/cairo-orig/cairo_helper.hxx	2008-04-28 18:00:30.000000000 +0200
++++ canvas/source/cairo/cairo_helper.hxx	2008-04-28 18:10:10.000000000 +0200
+@@ -1,4 +1,5 @@
+-int   cairoHelperGetDefaultScreen( void* display );
++void* cairoHelperGetScreen( const void* pSysData );
++int   cairoHelperGetScreenNumber( const void* pSysData );
+ void* cairoHelperGetGlitzDrawable( const void* pSysData, int width, int height );
+ void* cairoHelperGetGlitzSurface( const void* pSysData, void *drawable, int x, int y, int width, int height );
+ void* cairoHelperGetSurface( const void* pSysData, int x, int y, int width, int height );
+Only in canvas/source/cairo: cairo_helper.hxx.~1.2.~

Modified: branches/ooo-build-2-4/patches/src680/quiet-build.diff
==============================================================================
--- branches/ooo-build-2-4/patches/src680/quiet-build.diff	(original)
+++ branches/ooo-build-2-4/patches/src680/quiet-build.diff	Mon Apr 28 22:05:32 2008
@@ -40,7 +40,7 @@
  DBGUTIL=
  dbgutil=
  
-+.IF "$(VERBOSE)"==""
++.IF "$(VERBOSE)"=="" && "$(verbose)"==""
 +QUIET_BUILD*=@
 +.ELSE
 +QUIET_BUILD*=

Modified: branches/ooo-build-2-4/patches/src680/sd-custom-animation-fixes.diff
==============================================================================
--- branches/ooo-build-2-4/patches/src680/sd-custom-animation-fixes.diff	(original)
+++ branches/ooo-build-2-4/patches/src680/sd-custom-animation-fixes.diff	Mon Apr 28 22:05:32 2008
@@ -1,133 +1,5 @@
---- sd/inc/CustomAnimationEffect.hxx
-+++ sd/inc/CustomAnimationEffect.hxx
-@@ -359,9 +359,9 @@ public:
- 
- 	CustomAnimationTextGroupPtr findGroup( sal_Int32 nGroupId );
- 	CustomAnimationTextGroupPtr	createTextGroup( CustomAnimationEffectPtr pEffect, sal_Int32 nTextGrouping, double fTextGroupingAuto, sal_Bool bAnimateForm, sal_Bool bTextReverse );
--	void setTextGrouping( CustomAnimationTextGroupPtr pTextGroup, sal_Int32 nTextGrouping );
-+	void setTextGrouping( CustomAnimationTextGroupPtr pTextGroup, sal_Int32 nTextGrouping, bool bPrevEffect );
- 	void setAnimateForm( CustomAnimationTextGroupPtr pTextGroup, sal_Bool bAnimateForm );
--	void setTextGroupingAuto( CustomAnimationTextGroupPtr pTextGroup, double fTextGroupingAuto );
-+	void setTextGroupingAuto( CustomAnimationTextGroupPtr pTextGroup, double fTextGroupingAuto, bool bPrevEffect );
- 	void setTextReverse( CustomAnimationTextGroupPtr pTextGroup, sal_Bool bAnimateForm );
- 
- 	sal_Int32 getSequenceType() const { return mnSequenceType; }
-@@ -376,7 +376,7 @@ protected:
- 	virtual void implRebuild();
- 	virtual void reset();
- 
--	void createTextGroupParagraphEffects( CustomAnimationTextGroupPtr pTextGroup, CustomAnimationEffectPtr pEffect, bool bUsed );
-+	void createTextGroupParagraphEffects( CustomAnimationTextGroupPtr pTextGroup, CustomAnimationEffectPtr pEffect, bool bPrevEffect, bool bUsed );
- 
- 	void notify_listeners();
- 
---- sd/source/core/CustomAnimationEffect.cxx
-+++ sd/source/core/CustomAnimationEffect.cxx
-@@ -2694,16 +2694,14 @@ CustomAnimationTextGroupPtr	EffectSequenceHelper::createTextGroup( CustomAnimati
- 	CustomAnimationTextGroupPtr	pTextGroup( new CustomAnimationTextGroup( xTarget, nGroupId ) );
- 	maGroupMap[nGroupId] = pTextGroup;
- 
--	bool bUsed = false;
-+	bool bPrevEffect = false;
- 
- 	// do we need to target the shape?
--	if( (nTextGrouping == 0) || bAnimateForm )
-+	if( bAnimateForm )
- 	{
--		sal_Int16 nSubItem;
--		if( nTextGrouping == 0) 
--			nSubItem = bAnimateForm ? ShapeAnimationSubType::AS_WHOLE : ShapeAnimationSubType::ONLY_TEXT;
--		else
--			nSubItem = ShapeAnimationSubType::ONLY_BACKGROUND;
-+		const sal_Int16 nSubItem( nTextGrouping == 0 ?
-+                                  ShapeAnimationSubType::AS_WHOLE :
-+                                  ShapeAnimationSubType::ONLY_BACKGROUND );
- 
- 		pEffect->setTarget( makeAny( xTarget ) );
- 		pEffect->setTargetSubItem( nSubItem );
-@@ -2711,7 +2709,7 @@ CustomAnimationTextGroupPtr	EffectSequenceHelper::createTextGroup( CustomAnimati
- 		pEffect->setGroupId( nGroupId );
- 
- 		pTextGroup->addEffect( pEffect );
--		bUsed = true;
-+		bPrevEffect = true;
- 	}
- 
- 	pTextGroup->mnTextGrouping = nTextGrouping;
-@@ -2719,7 +2717,7 @@ CustomAnimationTextGroupPtr	EffectSequenceHelper::createTextGroup( CustomAnimati
- 	pTextGroup->mbTextReverse = bTextReverse;
- 
- 	// now add an effect for each paragraph
--	createTextGroupParagraphEffects( pTextGroup, pEffect, bUsed );
-+	createTextGroupParagraphEffects( pTextGroup, pEffect, bPrevEffect, bPrevEffect );
- 
- 	notify_listeners();
- 
-@@ -2728,7 +2726,7 @@ CustomAnimationTextGroupPtr	EffectSequenceHelper::createTextGroup( CustomAnimati
- 
- // --------------------------------------------------------------------
- 
--void EffectSequenceHelper::createTextGroupParagraphEffects( CustomAnimationTextGroupPtr pTextGroup, CustomAnimationEffectPtr pEffect, bool bUsed )
-+void EffectSequenceHelper::createTextGroupParagraphEffects( CustomAnimationTextGroupPtr pTextGroup, CustomAnimationEffectPtr pEffect, bool bPrevEffect, bool bUsed )
- {
- 	Reference< XShape > xTarget( pTextGroup->maTarget );
- 
-@@ -2793,7 +2791,7 @@ void EffectSequenceHelper::createTextGroupParagraphEffects( CustomAnimationTextG
- 			pNewEffect->setEffectSequence( this );
- 
- 			// set correct node type
--			if( pNewEffect->getParaDepth() < nTextGrouping )
-+			if( pNewEffect->getParaDepth() < nTextGrouping || !bPrevEffect )
- 			{
- 				if( fTextGroupingAuto == -1.0 )
- 				{
-@@ -2825,7 +2823,7 @@ void EffectSequenceHelper::createTextGroupParagraphEffects( CustomAnimationTextG
- 
- // --------------------------------------------------------------------
- 
--void EffectSequenceHelper::setTextGrouping( CustomAnimationTextGroupPtr pTextGroup, sal_Int32 nTextGrouping )
-+void EffectSequenceHelper::setTextGrouping( CustomAnimationTextGroupPtr pTextGroup, sal_Int32 nTextGrouping, bool bPrevEffect )
- {
- 	if( pTextGroup->mnTextGrouping == nTextGrouping )
- 	{
-@@ -2838,7 +2836,7 @@ void EffectSequenceHelper::setTextGrouping( CustomAnimationTextGroupPtr pTextGro
- 		CustomAnimationEffectPtr pEffect( pTextGroup->maEffects.front() );
- 
- 		pTextGroup->mnTextGrouping = nTextGrouping;
--		createTextGroupParagraphEffects( pTextGroup, pEffect, true );
-+		createTextGroupParagraphEffects( pTextGroup, pEffect, bPrevEffect, true );
- 		notify_listeners();
- 	}
- 	else if( (pTextGroup->mnTextGrouping >= 0) && (nTextGrouping == -1 ) )
-@@ -2878,7 +2876,7 @@ void EffectSequenceHelper::setTextGrouping( CustomAnimationTextGroupPtr pTextGro
- 			if( pEffect->getTarget().getValueType() == ::getCppuType((const ParagraphTarget*)0) )
- 			{
- 				// set correct node type
--				if( pEffect->getParaDepth() < nTextGrouping )
-+				if( pEffect->getParaDepth() < nTextGrouping || !bPrevEffect )
- 				{
- 					if( fTextGroupingAuto == -1.0 )
- 					{
-@@ -2976,7 +2974,7 @@ void EffectSequenceHelper::setAnimateForm( CustomAnimationTextGroupPtr pTextGrou
- 
- // --------------------------------------------------------------------
- 
--void EffectSequenceHelper::setTextGroupingAuto( CustomAnimationTextGroupPtr pTextGroup, double fTextGroupingAuto )
-+void EffectSequenceHelper::setTextGroupingAuto( CustomAnimationTextGroupPtr pTextGroup, double fTextGroupingAuto, bool bPrevEffect )
- {
- 	sal_Int32 nTextGrouping = pTextGroup->mnTextGrouping;
- 
-@@ -2992,7 +2990,7 @@ void EffectSequenceHelper::setTextGroupingAuto( CustomAnimationTextGroupPtr pTex
- 		if( pEffect->getTarget().getValueType() == ::getCppuType((const ParagraphTarget*)0) )
- 		{
- 			// set correct node type
--			if( pEffect->getParaDepth() < nTextGrouping )
-+			if( pEffect->getParaDepth() < nTextGrouping || !bPrevEffect )
- 			{
- 				if( fTextGroupingAuto == -1.0 )
- 				{
---- sd/source/ui/animations/CustomAnimationCreateDialog.cxx
-+++ sd/source/ui/animations/CustomAnimationCreateDialog.cxx
+--- sd/source/ui/animations/CustomAnimationCreateDialog.cxx	12 Mar 2008 11:33:03 -0000	1.12
++++ sd/source/ui/animations/CustomAnimationCreateDialog.cxx	17 Mar 2008 12:47:29 -0000	1.11.150.2
 @@ -253,6 +253,8 @@ public:
  	bool getIsPreview() const;
  	void setIsPreview( bool bIsPreview );
@@ -137,7 +9,7 @@
  private:
  	DECL_LINK( implSelectHdl, Control* );
  	DECL_LINK( implDoubleClickHdl, Control* );
-@@ -544,13 +546,33 @@ void CustomAnimationCreateTabPage::setIsPreview( bool bIsPreview )
+@@ -545,13 +547,33 @@ void CustomAnimationCreateTabPage::setIs
  	mpCBXPReview->Check( bIsPreview ? TRUE : FALSE );
  }
  
@@ -176,7 +48,7 @@
  {
  	mpTabControl = new TabControl( this, SdResId( 1 ) );
  	mpOKButton = new OKButton(this, SdResId( 1 ) ) ;
-@@ -583,6 +605,19 @@ CustomAnimationCreateDialog::CustomAnimationCreateDialog( Window* pParent, Custo
+@@ -584,6 +606,19 @@ CustomAnimationCreateDialog::CustomAnima
  	mpTabControl->SetDeactivatePageHdl( LINK( this, CustomAnimationCreateDialog, implDeactivatePagekHdl ) );
  
      setPosition();
@@ -196,11 +68,9 @@
  }
  
  CustomAnimationCreateDialog::~CustomAnimationCreateDialog()
-diff --git a/sd/source/ui/animations/CustomAnimationCreateDialog.hrc b/sd/source/ui/animations/CustomAnimationCreateDialog.hrc
-index 424a53c..d24a51a 100644
---- sd/source/ui/animations/CustomAnimationCreateDialog.hxx
-+++ sd/source/ui/animations/CustomAnimationCreateDialog.hxx
-@@ -62,7 +62,7 @@ class CustomAnimationCreateDialog : public TabDialog
+--- sd/source/ui/animations/CustomAnimationCreateDialog.hxx	1 Aug 2007 11:08:21 -0000	1.7
++++ sd/source/ui/animations/CustomAnimationCreateDialog.hxx	12 Mar 2008 12:25:14 -0000	1.7.150.1
+@@ -62,7 +62,7 @@ class CustomAnimationCreateDialog : publ
  {
  	friend class CustomAnimationCreateTabPage;
  public:
@@ -209,11 +79,9 @@
  	~CustomAnimationCreateDialog();
  
  	PathKind getCreatePathKind() const;
-diff --git a/sd/source/ui/animations/CustomAnimationCreateDialog.src b/sd/source/ui/animations/CustomAnimationCreateDialog.src
-index d6bfb9a..6dc89c7 100644
---- sd/source/ui/animations/CustomAnimationDialog.cxx
-+++ sd/source/ui/animations/CustomAnimationDialog.cxx
-@@ -2381,6 +2377,8 @@ private:
+--- sd/source/ui/animations/CustomAnimationDialog.cxx	7 Mar 2008 16:25:36 -0000	1.20
++++ sd/source/ui/animations/CustomAnimationDialog.cxx	17 Mar 2008 12:47:26 -0000	1.19.76.2
+@@ -2356,6 +2356,8 @@ private:
  	CheckBox	maCBXReverse;
  
  	const STLPropertySet* mpSet;
@@ -222,7 +90,7 @@
  };
  
  CustomAnimationTextAnimTabPage::CustomAnimationTextAnimTabPage(Window* pParent, const ResId& rResId, const STLPropertySet* pSet)
-@@ -2391,7 +2389,8 @@ CustomAnimationTextAnimTabPage::CustomAnimationTextAnimTabPage(Window* pParent,
+@@ -2366,7 +2368,8 @@ CustomAnimationTextAnimTabPage::CustomAn
  	maMFGroupAuto( this, SdResId( MF_GROUP_AUTO ) ),
  	maCBXAnimateForm( this, SdResId( CBX_ANIMATE_FORM ) ),
  	maCBXReverse( this, SdResId( CBX_REVERSE ) ),
@@ -232,7 +100,7 @@
  {
  	FreeResource();
  
-@@ -2404,6 +2403,9 @@ CustomAnimationTextAnimTabPage::CustomAnimationTextAnimTabPage(Window* pParent,
+@@ -2379,6 +2382,9 @@ CustomAnimationTextAnimTabPage::CustomAn
  			maLBGroupText.SelectEntryPos( (USHORT)(nTextGrouping + 1) );
  	}
  
@@ -242,7 +110,7 @@
  	if( pSet->getPropertyState( nHandleTextGroupingAuto ) != STLPropertyState_AMBIGUOUS )
  	{
  		double fTextGroupingAuto = 0.0;
-@@ -2516,6 +2518,16 @@ void CustomAnimationTextAnimTabPage::updateControlStates()
+@@ -2491,6 +2497,16 @@ void CustomAnimationTextAnimTabPage::upd
  	maCBXGroupAuto.Enable( nPos > 1 );
  	maMFGroupAuto.Enable( nPos > 1 );
  	maCBXReverse.Enable( nPos > 0 );
@@ -259,7 +127,7 @@
  }
  
  IMPL_LINK( CustomAnimationTextAnimTabPage, implSelectHdl, Control*, EMPTYARG )
-@@ -2622,6 +2634,7 @@ STLPropertySet* CustomAnimationDialog::createDefaultSet()
+@@ -2597,6 +2613,7 @@ STLPropertySet* CustomAnimationDialog::c
  	pSet->setPropertyDefaultValue( nHandleTrigger, aEmpty );
  
  	pSet->setPropertyDefaultValue( nHandleHasText, makeAny( sal_False ) );
@@ -267,11 +135,9 @@
  	pSet->setPropertyDefaultValue( nHandleTextGrouping, makeAny( (sal_Int32)-1 ) );
  	pSet->setPropertyDefaultValue( nHandleAnimateForm, makeAny( sal_True ) );
  	pSet->setPropertyDefaultValue( nHandleTextGroupingAuto, makeAny( (double)-1.0 ) );
-diff --git a/sd/source/ui/animations/CustomAnimationDialog.hrc b/sd/source/ui/animations/CustomAnimationDialog.hrc
-index 3315156..47bb690 100644
---- sd/source/ui/animations/CustomAnimationDialog.hxx
-+++ sd/source/ui/animations/CustomAnimationDialog.hxx
-@@ -98,6 +98,8 @@ const sal_Int32 nHandleSoundEndAfterSlide = 30;
+--- sd/source/ui/animations/CustomAnimationDialog.hxx	12 Dec 2006 16:51:07 -0000	1.6
++++ sd/source/ui/animations/CustomAnimationDialog.hxx	13 Mar 2008 15:03:48 -0000	1.6.282.1
+@@ -98,6 +98,8 @@ const sal_Int32 nHandleSoundEndAfterSlid
  
  const sal_Int32 nHandleCommand = 31;
  
@@ -280,11 +146,9 @@
  const sal_Int32 nPropertyTypeNone = 0;
  const sal_Int32 nPropertyTypeDirection = 1;
  const sal_Int32 nPropertyTypeSpokes = 2;
-diff --git a/sd/source/ui/animations/CustomAnimationDialog.src b/sd/source/ui/animations/CustomAnimationDialog.src
-index c52dae9..77dcf0b 100644
---- sd/source/ui/animations/CustomAnimationList.cxx
-+++ sd/source/ui/animations/CustomAnimationList.cxx
-@@ -569,14 +569,14 @@ void CustomAnimationList::KeyInput( const KeyEvent& rKEvt )
+--- sd/source/ui/animations/CustomAnimationList.cxx	6 Jul 2007 13:11:11 -0000	1.12
++++ sd/source/ui/animations/CustomAnimationList.cxx	12 Mar 2008 13:14:10 -0000	1.12.168.1
+@@ -569,14 +569,14 @@ void CustomAnimationList::KeyInput( cons
  	const int nKeyCode = rKEvt.GetKeyCode().GetCode();
  	switch( nKeyCode )
  	{
@@ -302,8 +166,8 @@
  			}
  			
  	}
---- sd/source/ui/animations/CustomAnimationPane.cxx
-+++ sd/source/ui/animations/CustomAnimationPane.cxx
+--- sd/source/ui/animations/CustomAnimationPane.cxx	17 Aug 2007 15:33:28 -0000	1.29
++++ sd/source/ui/animations/CustomAnimationPane.cxx	17 Mar 2008 15:01:58 -0000	1.29.118.3
 @@ -80,6 +80,8 @@
  #ifndef _COM_SUN_STAR_AWT_XWINDOW_HPP_
  #include <com/sun/star/awt/XWindow.hpp>
@@ -313,7 +177,7 @@
  
  #ifndef _COMPHELPER_PROCESSFACTORY_HXX_
  #include <comphelper/processfactory.hxx>
-@@ -201,23 +203,14 @@ using namespace ::com::sun::star::presentation;
+@@ -201,23 +203,14 @@ using namespace ::com::sun::star::presen
  using namespace ::com::sun::star::text;
  
  using ::rtl::OUString;
@@ -339,7 +203,7 @@
  using ::com::sun::star::container::XIndexAccess;
  using ::com::sun::star::container::XEnumerationAccess;
  using ::com::sun::star::container::XEnumeration;
-@@ -422,6 +415,12 @@ void CustomAnimationPane::StateChanged( StateChangedType nStateChange )
+@@ -422,6 +415,12 @@ void CustomAnimationPane::StateChanged( 
  		updateMotionPathTags();
  }
  
@@ -352,7 +216,7 @@
  void CustomAnimationPane::addListener()
  {
  	Link aLink( LINK(this,CustomAnimationPane,EventMultiplexerListener) );
-@@ -1362,6 +1361,36 @@ bool CustomAnimationPane::setProperty1Value( sal_Int32 nType, CustomAnimationEff
+@@ -1362,6 +1361,36 @@ bool CustomAnimationPane::setProperty1Va
  	return bEffectChanged;
  }
  
@@ -389,57 +253,16 @@
  
  STLPropertySet* CustomAnimationPane::createSelectionSet()
  {
-@@ -1413,6 +1442,9 @@ STLPropertySet* CustomAnimationPane::createSelectionSet()
+@@ -1413,6 +1442,8 @@ STLPropertySet* CustomAnimationPane::cre
  		addValue( pSet, nHandlePresetId, makeAny( pEffect->getPresetId() ) );
  
  		addValue( pSet, nHandleHasText, makeAny( (sal_Bool)pEffect->hasText() ) );
 +		
-+        const bool bHasVisibleShape = hasVisibleShape( pEffect->getTargetShape() );
-+		addValue( pSet, nHandleHasVisibleShape, Any( bHasVisibleShape ) );
++		addValue( pSet, nHandleHasVisibleShape, Any( hasVisibleShape( pEffect->getTargetShape() ) ) );
  
  		Any aSoundSource;
  		if( pEffect->getAudio().is() )
-@@ -1434,7 +1466,9 @@ STLPropertySet* CustomAnimationPane::createSelectionSet()
- 			pTextGroup = pEffectSequence->findGroup( nGroupId );
- 
- 		addValue( pSet, nHandleTextGrouping, makeAny( pTextGroup.get() ? pTextGroup->getTextGrouping() : (sal_Int32)-1 ) );
--		addValue( pSet, nHandleAnimateForm, makeAny( pTextGroup.get() ? (sal_Bool)pTextGroup->getAnimateForm() : sal_True ) );
-+        // only default to separate geometry animation for shapes that
-+        // usually _have_ non-textual content
-+		addValue( pSet, nHandleAnimateForm, makeAny( pTextGroup.get() ? (sal_Bool)pTextGroup->getAnimateForm() : (sal_Bool)bHasVisibleShape ) );
- 		addValue( pSet, nHandleTextGroupingAuto, makeAny( pTextGroup.get() ? pTextGroup->getTextGroupingAuto() : (double)-1.0 ) );
- 		addValue( pSet, nHandleTextReverse, makeAny( pTextGroup.get() ? (sal_Bool)pTextGroup->getTextReverse() : sal_False ) );
- 
-@@ -1740,6 +1774,10 @@ void CustomAnimationPane::changeSelection( STLPropertySet* pResultSet, STLProper
- 		if( bHasTextGrouping )
- 			pResultSet->getPropertyValue(nHandleTextGrouping) >>= nTextGrouping;
- 
-+        // determine default value for animate form - if no visible
-+        // shape, default to false
-+        pResultSet->getPropertyValue(nHandleHasVisibleShape) >>= bAnimateForm;
-+
- 		if( bHasAnimateForm )
- 			pResultSet->getPropertyValue(nHandleAnimateForm) >>= bAnimateForm;
- 
-@@ -1778,7 +1816,7 @@ void CustomAnimationPane::changeSelection( STLPropertySet* pResultSet, STLProper
- 			{
- 				if( (pTextGroup->getTextGrouping() != nTextGrouping) )
- 				{
--					pEffectSequence->setTextGrouping( pTextGroup, nTextGrouping );
-+					pEffectSequence->setTextGrouping( pTextGroup, nTextGrouping, bAnimateForm );
- 					bChanged = true;
- 				}
- 			}
-@@ -1796,7 +1834,7 @@ void CustomAnimationPane::changeSelection( STLPropertySet* pResultSet, STLProper
- 			{
- 				if( pTextGroup->getTextGroupingAuto() != fTextGroupingAuto )
- 				{
--					pEffectSequence->setTextGroupingAuto( pTextGroup, fTextGroupingAuto );
-+					pEffectSequence->setTextGroupingAuto( pTextGroup, fTextGroupingAuto, bAnimateForm );
- 					bChanged = true;
- 				}
- 			}
-@@ -1926,6 +1964,9 @@ void CustomAnimationPane::onChange( bool bCreate )
+@@ -1926,6 +1957,9 @@ void CustomAnimationPane::onChange( bool
  
  	// first create vector of targets for dialog preview
  	std::vector< Any > aTargets;
@@ -449,7 +272,7 @@
  	if( bCreate )
  	{
  		// gather shapes from the selection
-@@ -1992,15 +2033,22 @@ void CustomAnimationPane::onChange( bool bCreate )
+@@ -1992,15 +2026,22 @@ void CustomAnimationPane::onChange( bool
  		{
  			if( !bHasText || !(*aIter)->hasText() )
  				bHasText = false;
@@ -474,8 +297,8 @@
  		CustomAnimationPresetPtr pDescriptor = pDlg->getSelectedPreset();
  		if( pDescriptor.get() )
  		{
---- sd/source/ui/animations/CustomAnimationPane.hxx
-+++ sd/source/ui/animations/CustomAnimationPane.hxx
+--- sd/source/ui/animations/CustomAnimationPane.hxx	6 Jul 2007 13:11:36 -0000	1.6
++++ sd/source/ui/animations/CustomAnimationPane.hxx	12 Mar 2008 13:14:10 -0000	1.6.168.1
 @@ -111,6 +111,7 @@ public:
  	// Control
  	virtual void Resize();

Modified: branches/ooo-build-2-4/patches/src680/vcl-dynamic-screens-fix.diff
==============================================================================
--- branches/ooo-build-2-4/patches/src680/vcl-dynamic-screens-fix.diff	(original)
+++ branches/ooo-build-2-4/patches/src680/vcl-dynamic-screens-fix.diff	Mon Apr 28 22:05:32 2008
@@ -1,208 +1,463 @@
---- vcl/unx/gtk/window/gtkframe.cxx	23 Jan 2008 17:17:10 -0000	1.72.8.2
-+++ vcl/unx/gtk/window/gtkframe.cxx	15 Apr 2008 20:07:09 -0000
-@@ -1180,7 +1180,7 @@ void GtkSalFrame::Center()
-             GdkModifierType aMask;
-             gdk_display_get_pointer( getGdkDisplay(), &pScreen, &x, &y, &aMask );
- 
--            const std::vector< Rectangle >& rScreens = GetX11SalData()->GetDisplay()->GetXineramaScreens();
-+            const std::vector< Rectangle >& rScreens = GetX11SalData()->GetDisplay()->GetXineramaScreenRects();
-             for( unsigned int i = 0; i < rScreens.size(); i++ )
-                 if( rScreens[i].IsInside( Point( x, y ) ) )
-                 {
-@@ -1649,7 +1649,7 @@ void GtkSalFrame::ShowFullScreen( BOOL b
-     {
-         GtkSalDisplay* pDisp = getDisplay();
-         // xinerama ?
--        if( pDisp->IsXinerama() && pDisp->GetXineramaScreens().size() > 1 )
-+        if( pDisp->IsXinerama() && pDisp->GetXineramaScreenCount() > 1 )
-         {
-             if( bFullScreen )
-             {
-@@ -1663,10 +1663,10 @@ void GtkSalFrame::ShowFullScreen( BOOL b
-                 m_nStyle |= SAL_FRAME_STYLE_PARTIAL_FULLSCREEN;
-                 createNewWindow( None, false, m_nScreen );
-                 Rectangle aNewPosSize;
--                if( nScreen < 0 || nScreen >= static_cast<int>(pDisp->GetXineramaScreens().size()) )
-+                if( nScreen < 0 || nScreen >= static_cast<int>(pDisp->GetXineramaScreenCount()) )
-                     aNewPosSize = Rectangle( Point( 0, 0 ), pDisp->GetScreenSize(m_nScreen) );
-                 else
--                    aNewPosSize = pDisp->GetXineramaScreens()[ nScreen ];
-+                    aNewPosSize = pDisp->GetXineramaScreenRects()[ nScreen ];
-                 gtk_window_resize( m_pWindow,
-                                    maGeometry.nWidth = aNewPosSize.GetWidth(),
-                                    maGeometry.nHeight = aNewPosSize.GetHeight() );
---- vcl/unx/inc/saldisp.hxx	26 Feb 2008 18:14:50 -0000	1.42.112.2
-+++ vcl/unx/inc/saldisp.hxx	15 Apr 2008 20:07:17 -0000
-@@ -477,6 +479,7 @@ public:
-     void			Remove( XEvent   *pEvent );
- 
-     virtual void          initScreen( int nScreen ) const;
-+    Size                  getScreenSize( int nScreen ) const;
-     const ScreenData&     getDataForScreen( int nScreen ) const
-     {
-         if( nScreen < 0 || nScreen >= static_cast<int>(m_aScreens.size()) )
-@@ -526,12 +529,13 @@ public:
-     ::vcl_sal::WMAdaptor* getWMAdaptor() const { return m_pWMAdaptor; }
-     DtIntegrator* getDtIntegrator() const { return m_pDtIntegrator; }
-     bool			IsXinerama() const { return m_bXinerama; }
--    const std::vector< Rectangle >& GetXineramaScreens() const { return m_aXineramaScreens; }
-+    const std::vector< Rectangle >& GetXineramaScreenRects();
-     XLIB_Window     GetRootWindow( int nScreen ) const
-     { return getDataForScreen( nScreen ).m_aRoot; }
-     const std::vector< ScreenData >& GetScreenData()
-     { return m_aScreens; }
-     int GetScreenCount() const { return static_cast<int>(m_aScreens.size()); }
-+    std::size_t GetXineramaScreenCount() const { return m_aXineramaScreens.size(); }
- 
-     const std::list< SalFrame* >& getFrames() const
-     { return m_aFrames; }
---- vcl/unx/source/app/saldisp.cxx	23 Jan 2008 17:18:18 -0000	1.91.146.2
-+++ vcl/unx/source/app/saldisp.cxx	15 Apr 2008 20:07:25 -0000
-@@ -70,7 +70,7 @@
- 
- #ifdef USE_XINERAMA
- #ifdef USE_XINERAMA_XORG
--#if defined(X86) || defined(MACOSX)
-+#if defined(X86) || defined(X86_64) || defined(MACOSX)
- #include <X11/extensions/Xinerama.h>
- #endif
- #elif defined USE_XINERAMA_XSUN
-@@ -847,6 +853,26 @@ void SalDisplay::initScreen( int nScreen
- }
+--- config_office/configure.in.before	2008-04-28 10:31:26.000000000 +0200
++++ config_office/configure.in	2008-04-28 10:32:01.000000000 +0200
+@@ -274,6 +274,9 @@
+ AC_ARG_ENABLE(xrender-link,
+ [  --enable-xrender-link   link with libXrender instead of dynamically open it
+ ],,)
++AC_ARG_ENABLE(randr,
++[  --disable-randr          disable RandR support in the vcl project
++],,enable_randr=yes)
+ AC_ARG_WITH(myspell-dicts,
+ [  --without-myspell-dicts Removes myspell dictionaries from openoffice.org
+                           installation set, for people building for specific
+@@ -838,6 +841,7 @@
+ 		build_gstreamer=yes
+ 		test_kde=yes
+ 		test_cups=yes
++        test_randr=yes
+ 		_os=SunOS
+ 
+ 		dnl ===========================================================
+@@ -865,6 +869,7 @@
+ 		build_gstreamer=yes
+ 		test_kde=yes
+ 		test_cups=yes
++        test_randr=yes
+ 		if getconf GNU_LIBPTHREAD_VERSION |grep -q NPTL; then
+ 			PTHREAD_CFLAGS="-DNPTL"
+ 		fi
+@@ -884,6 +889,7 @@
+ 		test_gtk=yes
+ 		build_cairo=no
+ 		build_gstreamer=no
++        test_randr=no
+ 		_os=Darwin
+       if test "$enable_systray" = "yes" && test "$enable_gtk" != "no"; then
+          AC_MSG_WARN([Disabling gtk-quickstarter - not supported on Mac. Use --disable-systray])
+@@ -894,6 +900,7 @@
+ 	os2*)
+ 		test_x=no
+ 		test_cups=no
++        test_randr=no
+ 		test_gtk=no
+ 		_os=OS2
+ 		;;
+@@ -903,6 +910,7 @@
+ 		build_gstreamer=yes
+ 		test_kde=yes
+ 		test_cups=yes
++        test_randr=yes
+ 		AC_MSG_CHECKING([the FreeBSD operating system release])
+ 		if test -n "$with_os_version"; then
+ 			OSVERSION="$with_os_version"
+@@ -926,6 +934,7 @@
+ 		;;
+ 	osf)
+ 		test_cups=no
++        test_randr=no
+ 		_os=OSF1
+ 		;;
+ 	netbsd)
+@@ -934,16 +943,19 @@
+ 		build_gstreamer=yes
+ 		test_kde=yes
+ 		test_cups=no
++        test_randr=yes
+ 		PTHREAD_CFLAGS="-pthread"
+ 		PTHREAD_LIBS="-pthread -lpthread"
+ 		_os=NetBSD
+ 		;;
+ 	irix*)
+ 		test_cups=no
++        test_randr=no
+ 		_os=IRIX
+ 		;;
+ 	aix*)
+ 		test_cups=no
++        test_randr=no
+ 	   PTHREAD_LIBS=-pthread
+ 		echo "AIX is an alpha port --- Use at own risk" >> warn
+ 		_os=AIX
+@@ -1123,6 +1135,19 @@
+ AC_SUBST(ENABLE_FONTCONFIG)
+ 
+ dnl ===================================================================
++dnl Build options
++dnl ===================================================================
++AC_MSG_CHECKING([whether to enable RandR support])
++if test "$test_randr" = "yes" -a \( "$enable_randr" = "yes" -o "$enable_randr" = "TRUE" \) ; then
++   ENABLE_RANDR="TRUE"
++   AC_MSG_RESULT([yes])
++else
++   ENABLE_RANDR=""
++   AC_MSG_RESULT([no])
++fi
++AC_SUBST(ENABLE_RANDR)
++
++dnl ===================================================================
+ dnl Disable legacy binary file formats filters
+ dnl ===================================================================
+ AC_MSG_CHECKING([whether to enable filters for legacy binary file formats (StarOffice 5.2)])
+@@ -1915,7 +1940,15 @@
+ fi
+ 
+ dnl ===================================================================
++dnl Check if X11/extensions/Xrandr.h is available 
++dnl ===================================================================
++if test "$test_randr" = "yes" -a "$ENABLE_RANDR" = "TRUE" ; then
++    AC_CHECK_HEADER(X11/extensions/Xrandr.h, [],
++                    [AC_MSG_ERROR([X11/extensions/Xrandr.h could not be found. X11 dev missing?])], [])
++fi
++
++dnl ===================================================================
+ dnl Check if PAM/pam_appl.h is available on Linux or FreeBSD
+ dnl ===================================================================
+ if test "$_os" = "Linux" -o "$_os" = "FreeBSD" -o "$_os" = "GNU"; then
+
+--- vcl/unx/gtk/app/gtkdata.cxx	29 Jan 2008 16:20:56 -0000	1.36
++++ vcl/unx/gtk/app/gtkdata.cxx	7 Mar 2008 16:59:00 -0000	1.36.16.1
+@@ -191,6 +191,7 @@ GdkFilterReturn GtkSalDisplay::filterGdk
+             }
+         }
+         X11SalObject::Dispatch( pEvent );
++        pDisplay->processRandREvent( pEvent );
+     }
  
- // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+     return aFilterReturn;
+--- vcl/unx/inc/saldisp.hxx	27 Feb 2008 10:32:35 -0000	1.44
++++ vcl/unx/inc/saldisp.hxx	12 Mar 2008 09:39:09 -0000	1.43.16.2
+@@ -418,6 +418,9 @@ protected:	
+     void			DestroyFontCache();
+     virtual long	Dispatch( XEvent *pEvent ) = 0;
+     void			InitXinerama();
++    void            InitRandR( XLIB_Window aRoot ) const;
++    void            DeInitRandR();
++    int             processRandREvent( XEvent* );
+ 
+     void			doDestruct();
+ public:
+--- vcl/unx/source/app/makefile.mk	7 Mar 2008 17:12:23 -0000	1.30
++++ vcl/unx/source/app/makefile.mk	1 Apr 2008 10:31:13 -0000	1.29.16.3
+@@ -64,6 +64,7 @@ SLOFILES=\
+ 			$(SLO)$/saldata.obj			\
+ 			$(SLO)$/saltimer.obj		\
+ 			$(SLO)$/saldisp.obj			\
++			$(SLO)$/randrwrapper.obj	\
+ 			$(SLO)$/salinst.obj			\
+ 			$(SLO)$/salsys.obj			\
+ 			$(SLO)$/soicon.obj			\
+@@ -81,6 +82,12 @@ EXCEPTIONSFILES=\
+             $(SLO)$/salsys.obj
+ 
+ 
++.IF "$(ENABLE_RANDR)" != ""
++.IF "$(OS)" != "SOLARIS"
++CDEFS+=-DUSE_RANDR
++.ENDIF
++.ENDIF
++
+ .IF "$(USE_XINERAMA)" != "NO"
+ CDEFS+=-DUSE_XINERAMA
+ .IF "$(USE_XINERAMA_VERSION)" == "Xorg"
+--- /dev/null	1 Jan 1970 00:00:00 -0000
++++ vcl/unx/source/app/randrwrapper.cxx	15 Mar 2008 14:29:42 -0000	1.1.2.2
+@@ -0,0 +1,250 @@
++/*************************************************************************
++ *
++ *  OpenOffice.org - a multi-platform office productivity suite
++ *
++ *  $RCSfile$
++ *
++ *  $Revision$
++ *
++ *  last change: $Author$ $Date$
++ *
++ *  The Contents of this file are made available subject to
++ *  the terms of GNU Lesser General Public License Version 2.1.
++ *
++ *
++ *    GNU Lesser General Public License Version 2.1
++ *    =============================================
++ *    Copyright 2005 by Sun Microsystems, Inc.
++ *    901 San Antonio Road, Palo Alto, CA 94303, USA
++ *
++ *    This library is free software; you can redistribute it and/or
++ *    modify it under the terms of the GNU Lesser General Public
++ *    License version 2.1, as published by the Free Software Foundation.
++ *
++ *    This library is distributed in the hope that it will be useful,
++ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++ *    Lesser General Public License for more details.
++ *
++ *    You should have received a copy of the GNU Lesser General Public
++ *    License along with this library; if not, write to the Free Software
++ *    Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ *    MA  02111-1307  USA
++ *
++ ************************************************************************/
++
++#ifdef USE_RANDR
 +
-+Size SalDisplay::getScreenSize( int nScreen ) const
++#include "prex.h"
++#include <X11/extensions/Xrandr.h>
++#include "postx.h"
++
++#include "osl/module.h"
++#include "rtl/ustring.hxx"
++
++namespace
++{
++class RandRWrapper
 +{
-+    if( nScreen < 0 || nScreen >= static_cast<int>(m_aScreens.size()) )
-+        return Size();
-+    if( ! m_aScreens[nScreen].m_bInit )
-+        initScreen( nScreen );
-+    else
-+    {
-+        // update screen size everytime, xrandr etc. change this
-+        // without notice
-+        Screen* pScreen = ScreenOfDisplay( pDisp_, nScreen );
-+        const_cast<Size&>(m_aScreens[nScreen].m_aSize) = Size( WidthOfScreen( pScreen ), 
-+                                                               HeightOfScreen( pScreen ) );
++    oslModule m_pRandRLib;
++    
++    // function pointers
++    Bool(*m_pXRRQueryExtension)(Display*,int*,int*);
++    Status(*m_pXRRQueryVersion)(Display*,int*,int*);
++    XRRScreenConfiguration*(*m_pXRRGetScreenInfo)(Display*,Drawable);
++    void(*m_pXRRFreeScreenConfigInfo)(XRRScreenConfiguration*);
++    void(*m_pXRRSelectInput)(Display*,XLIB_Window,int);
++    int(*m_pXRRUpdateConfiguration)(XEvent*);
++    XRRScreenSize*(*m_pXRRSizes)(Display*,int,int*);
++    XRRScreenSize*(*m_pXRRConfigSizes)(XRRScreenConfiguration*,int*);
++    SizeID(*m_pXRRConfigCurrentConfiguration)(XRRScreenConfiguration*,Rotation*);
++    
++    bool m_bValid;
++    
++    void initFromModule();
++    
++    RandRWrapper(Display*);
++    ~RandRWrapper();
++public:
++    static RandRWrapper& get(Display*);
++    static void releaseWrapper();
++    
++    Bool XRRQueryExtension(Display* i_pDisp, int* o_event_base, int* o_error_base )
++    {
++        Bool bRet = False;
++        if( m_bValid )
++            bRet = m_pXRRQueryExtension( i_pDisp, o_event_base, o_error_base );
++        return bRet;
++    }
++    Status XRRQueryVersion( Display* i_pDisp, int* o_major, int* o_minor )
++    {
++        return m_bValid ? m_pXRRQueryVersion( i_pDisp, o_major, o_minor ) : 0;
 +    }
++    XRRScreenConfiguration* XRRGetScreenInfo( Display* i_pDisp, Drawable i_aDrawable )
++    {
++        return m_bValid ? m_pXRRGetScreenInfo( i_pDisp, i_aDrawable ) : NULL;
++    }
++    void XRRFreeScreenConfigInfo( XRRScreenConfiguration* i_pConfig )
++    {
++        if( m_bValid )
++            m_pXRRFreeScreenConfigInfo( i_pConfig );
++    }
++    void XRRSelectInput( Display* i_pDisp, XLIB_Window i_window, int i_nMask )
++    {
++        if( m_bValid )
++            m_pXRRSelectInput( i_pDisp, i_window, i_nMask );
++    }
++    int XRRUpdateConfiguration( XEvent* i_pEvent )
++    {
++        return m_bValid ? m_pXRRUpdateConfiguration( i_pEvent ) : 0;
++    }
++    XRRScreenSize* XRRSizes( Display* i_pDisp, int i_screen, int* o_nscreens )
++    {
++        return m_bValid ? m_pXRRSizes( i_pDisp, i_screen, o_nscreens ) : NULL;
++    }
++    XRRScreenSize* XRRConfigSizes( XRRScreenConfiguration* i_pConfig, int* o_nSizes )
++    {
++        return m_bValid ? m_pXRRConfigSizes( i_pConfig, o_nSizes ) : NULL;
++    }
++    SizeID XRRConfigCurrentConfiguration( XRRScreenConfiguration* i_pConfig, Rotation* o_pRot )
++    {
++        return m_bValid ? m_pXRRConfigCurrentConfiguration( i_pConfig, o_pRot ) : 0;
++    }
++};
++}
 +
-+    return m_aScreens[nScreen].m_aSize;
++void RandRWrapper::initFromModule()
++{
++    m_pXRRQueryExtension = (Bool(*)(Display*,int*,int*))osl_getAsciiFunctionSymbol( m_pRandRLib, "XRRQueryExtension" );
++    m_pXRRQueryVersion = (Status(*)(Display*,int*,int*))osl_getAsciiFunctionSymbol( m_pRandRLib, "XRRQueryVersion" );
++    m_pXRRGetScreenInfo = (XRRScreenConfiguration*(*)(Display*,Drawable))osl_getAsciiFunctionSymbol( m_pRandRLib, "XRRGetScreenInfo" );
++    m_pXRRFreeScreenConfigInfo = (void(*)(XRRScreenConfiguration*))osl_getAsciiFunctionSymbol( m_pRandRLib, "XRRFreeScreenConfigInfo" );
++    m_pXRRSelectInput = (void(*)(Display*,XLIB_Window,int))osl_getAsciiFunctionSymbol( m_pRandRLib, "XRRSelectInput" );
++    m_pXRRUpdateConfiguration = (int(*)(XEvent*))osl_getAsciiFunctionSymbol( m_pRandRLib, "XRRUpdateConfiguration" );
++    m_pXRRSizes = (XRRScreenSize*(*)(Display*,int,int*))osl_getAsciiFunctionSymbol( m_pRandRLib, "XRRSizes" );
++    m_pXRRConfigSizes = (XRRScreenSize*(*)(XRRScreenConfiguration*,int*))osl_getAsciiFunctionSymbol( m_pRandRLib, "XRRConfigSizes" );
++    m_pXRRConfigCurrentConfiguration = (SizeID(*)(XRRScreenConfiguration*,Rotation*))osl_getAsciiFunctionSymbol( m_pRandRLib, "XRRConfigCurrentConfiguration" );
++    
++    m_bValid = m_pXRRQueryExtension             &&
++               m_pXRRQueryVersion               &&
++               m_pXRRGetScreenInfo              &&
++               m_pXRRFreeScreenConfigInfo       &&
++               m_pXRRSelectInput                &&
++               m_pXRRUpdateConfiguration        &&
++               m_pXRRSizes                      &&
++               m_pXRRConfigSizes                &&
++               m_pXRRConfigCurrentConfiguration
++               ;
 +}
 +
-+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- void SalDisplay::Init()
- {
-     for( size_t i = 0; i < POINTER_COUNT; i++ )
-@@ -2640,9 +2695,9 @@ void SalDisplay::GetScreenFontResolution
-         return;
- 
-     int   nThreshold;
--    if (m_aScreens[m_nDefaultScreen].m_aSize.Height() <= 600)
-+    if (GetScreenSize(m_nDefaultScreen).Height() <= 600)
-         nThreshold =  96;
--    else if (m_aScreens[m_nDefaultScreen].m_aSize.Height() <= 768)
-+    else if (GetScreenSize(m_nDefaultScreen).Height() <= 768)
-         nThreshold = 108;
-     else
-         nThreshold = 120;
-@@ -2657,6 +2712,96 @@ void SalDisplay::GetScreenFontResolution
-     rDPIX = rDPIY;
- }
- 
-+const std::vector< Rectangle >& SalDisplay::GetXineramaScreenRects()
-+{ 
-+    OSL_ASSERT(m_bXinerama);
-+
-+    /* update screen rects from xinerama - should, for whatever
-+       reason, xinerama been disabled by now, just fill in empty
-+       rects, calling code is not prepared to handle IsXinerama() ==
-+       true & this here giving empty vector
-+    */
-+
-+    // clear rects
-+    std::fill(m_aXineramaScreens.begin(),
-+              m_aXineramaScreens.end(),
-+              Rectangle());
-+
-+#ifdef USE_XINERAMA
-+#if defined(USE_XINERAMA_XSUN)
-+    if( XineramaGetState( pDisp_, m_nDefaultScreen ) )
-+    {
-+        int nFramebuffers = 1;
-+        XRectangle pFramebuffers[MAXFRAMEBUFFERS];
-+        unsigned char hints[MAXFRAMEBUFFERS];
-+        int result = XineramaGetInfo( pDisp_,
-+                                      m_nDefaultScreen,
-+                                      pFramebuffers,
-+                                      hints,
-+                                      &nFramebuffers );
-+
-+        // limit to existing number of screens
-+        nFramebuffers = std::min(int(m_aXineramaScreens).size(),nFramebuffers);
-+        if( result > 0 )
-+        {
-+            for( int i = 0; i < nFramebuffers; i++ )
-+                m_aXineramaScreens[i] = Rectangle( Point( pFramebuffers[i].x,
-+                                                   pFramebuffers[i].y ),
-+                                            Size( pFramebuffers[i].width,
-+                                                  pFramebuffers[i].height ) );
-+        }
++RandRWrapper::RandRWrapper( Display* pDisplay ) :
++        m_pRandRLib( NULL ),
++        m_pXRRQueryExtension( NULL ),
++        m_pXRRQueryVersion( NULL ),
++        m_pXRRGetScreenInfo( NULL ),
++        m_pXRRFreeScreenConfigInfo( NULL ),
++        m_pXRRSelectInput( NULL ),
++        m_pXRRUpdateConfiguration( NULL ),
++        m_pXRRSizes( NULL ),
++        m_pXRRConfigSizes( NULL ),
++        m_pXRRConfigCurrentConfiguration( NULL ),
++        m_bValid( false )
++{
++    // first try in process space (e.g. gtk links that ?)
++    initFromModule();
++    if( ! m_bValid )
++    {
++        rtl::OUString aLibName( RTL_CONSTASCII_USTRINGPARAM( "libXrandr.so.2" ) );
++        m_pRandRLib = osl_loadModule( aLibName.pData, SAL_LOADMODULE_DEFAULT );
++        initFromModule();
 +    }
-+#elif defined(USE_XINERAMA_XORG)
-+#if defined(X86) || defined(X86_64) || defined(MACOSX)
-+    if( XineramaIsActive( pDisp_ ) )
++    if( m_bValid )
++    {
++        int nEventBase = 0, nErrorBase = 0;
++        if( ! m_pXRRQueryExtension( pDisplay, &nEventBase, &nErrorBase ) )
++            m_bValid = false;
++    }
++}
++
++RandRWrapper::~RandRWrapper()
++{
++    if( m_pRandRLib )
++        osl_unloadModule( m_pRandRLib );
++}
++
++static RandRWrapper* pWrapper = NULL;
++
++RandRWrapper& RandRWrapper::get( Display* i_pDisplay )
++{
++    if( ! pWrapper )
++        pWrapper = new RandRWrapper( i_pDisplay );
++    return *pWrapper;
++}
++
++void RandRWrapper::releaseWrapper()
++{
++    delete pWrapper;
++    pWrapper = NULL;
++}
++
++#endif
++
++#include "saldisp.hxx"
++
++void SalDisplay::InitRandR( XLIB_Window aRoot ) const
++{
++    #ifdef USE_RANDR
++    RandRWrapper::get( GetDisplay() ).XRRSelectInput( GetDisplay(), aRoot, RRScreenChangeNotifyMask );
++    #else
++    (void)aRoot;
++    #endif
++}
++
++void SalDisplay::DeInitRandR()
++{
++    #ifdef USE_RANDR
++    RandRWrapper::releaseWrapper();
++    #endif
++}
++
++int SalDisplay::processRandREvent( XEvent* pEvent )
++{
++    int nRet = 0;
++    #ifdef USE_RANDR
++    if( pWrapper )
 +    {
-+        int nFramebuffers = 1;
-+        XineramaScreenInfo* pScreens = XineramaQueryScreens( pDisp_, &nFramebuffers );
-+        if( pScreens )
++        nRet = pWrapper->XRRUpdateConfiguration( pEvent );
++        if( nRet == 1 && pEvent->type != ConfigureNotify) // this should then be a XRRScreenChangeNotifyEvent
 +        {
-+            if( nFramebuffers > 1 )
++            // update screens
++            for( size_t i = 0; i < m_aScreens.size(); i++ )
 +            {
-+                // limit to existing number of screens
-+                nFramebuffers = std::min(int(m_aXineramaScreens.size()),nFramebuffers);
-+
-+                for( int i = 0, j = 0; i < nFramebuffers; i++ )
++                if( m_aScreens[i].m_bInit )
 +                {
-+                    // see if any frame buffers are at the same coordinates
-+                    // this can happen with weird configuration e.g. on
-+                    // XFree86 and Clone displays
-+                    bool bDuplicate = false;
-+                    for( int n = 0; n < i; n++ )
-+                    {
-+                        if( m_aXineramaScreens[n].Left() == pScreens[i].x_org &&
-+                            m_aXineramaScreens[n].Top() == pScreens[i].y_org )
-+                        {
-+                            bDuplicate = true;
-+                            if( m_aXineramaScreens[n].GetWidth() < pScreens[i].width ||
-+                                m_aXineramaScreens[n].GetHeight() < pScreens[i].height )
-+                            {
-+                                m_aXineramaScreens[n].SetSize( Size( pScreens[i].width,
-+                                                                     pScreens[i].height ) );
-+                            }
-+                            break;
-+                        }
-+                    }
-+                    if( ! bDuplicate )
-+                        m_aXineramaScreens[j++] = Rectangle( Point( pScreens[i].x_org,
-+                                                                    pScreens[i].y_org ),
-+                                                             Size( pScreens[i].width,
-+                                                                   pScreens[i].height ) );
++                    XRRScreenConfiguration *pConfig = NULL;
++                    XRRScreenSize *pSizes = NULL;
++                    int nSizes = 0;
++                    Rotation nRot = 0;
++                    SizeID nId = 0;
++                
++                    pConfig = pWrapper->XRRGetScreenInfo( GetDisplay(), m_aScreens[i].m_aRoot );
++                    nId = pWrapper->XRRConfigCurrentConfiguration( pConfig, &nRot );
++                    pSizes = pWrapper->XRRConfigSizes( pConfig, &nSizes );
++                    XRRScreenSize *pTargetSize = pSizes + nId;
++                
++                    m_aScreens[i].m_aSize = Size( pTargetSize->width, pTargetSize->height );
++    
++                    pWrapper->XRRFreeScreenConfigInfo( pConfig );
++
++                    #if OSL_DEBUG_LEVEL > 1
++                    fprintf( stderr, "screen %d changed to size %dx%d\n", i, pTargetSize->width, pTargetSize->height );
++                    #endif
 +                }
 +            }
-+            XFree( pScreens );
 +        }
 +    }
-+#endif
-+#endif
-+#endif // USE_XINERAMA
-+
-+    return m_aXineramaScreens; 
++    #else
++    (void)pEvent;
++    #endif
++    return nRet;
 +}
+--- vcl/unx/source/app/saldisp.cxx	29 Jan 2008 16:22:34 -0000	1.93
++++ vcl/unx/source/app/saldisp.cxx	31 Mar 2008 16:44:44 -0000	1.93.16.2
+@@ -70,7 +70,7 @@
+ 
+ #ifdef USE_XINERAMA
+ #ifdef USE_XINERAMA_XORG
+-#if defined(X86) || defined(MACOSX)
++#if defined(X86) || defined(X86_64) || defined(MACOSX)
+ #include <X11/extensions/Xinerama.h>
+ #endif
+ #elif defined USE_XINERAMA_XSUN
+@@ -715,6 +715,9 @@ SalX11Display::~SalX11Display()
+ 		XCloseDisplay( pDisp_ );
+ 		pDisp_ = NULL;
+ 	}
++    // don't do this in doDestruct since RandR extension adds hooks into Display
++    // that is XCloseDisplay still needs the RandR library if it was used
++    DeInitRandR();
+ }
+ 
+ void SalDisplay::initScreen( int nScreen ) const
+@@ -743,6 +746,9 @@ void SalDisplay::initScreen( int nScreen
+     rSD.m_aRoot = RootWindow( pDisp_, nScreen );
+     rSD.m_aVisual = SalVisual( &aVI );
+     rSD.m_aColormap = SalColormap( this, aColMap, nScreen );
++    
++    // we're interested in configure notification of root windows
++    InitRandR( rSD.m_aRoot );
+ 
+     // - - - - - - - - - - Reference Window/Default Drawable - -
+     XSetWindowAttributes aXWAttributes;
+@@ -2416,10 +2422,13 @@ long SalX11Display::Dispatch( XEvent *pE
+ 			return pFrame->Dispatch( pEvent );
+ 		}
+     }
+-
++    
+ 	// dispatch to salobjects
+ 	X11SalObject::Dispatch( pEvent );
+ 
++    // is this perhaps a root window that changed size ?
++    processRandREvent( pEvent );
 +
- void SalDisplay::InitXinerama()
- {
-     if( m_aScreens.size() > 1 )
+     return 0;
+ }
+ 
 @@ -2688,7 +2833,7 @@ void SalDisplay::InitXinerama()
          }
      }
@@ -212,159 +467,3 @@
  if( XineramaIsActive( pDisp_ ) )
  {
      int nFramebuffers = 1;
---- vcl/unx/source/app/salsys.cxx	27 Jun 2007 20:47:35 -0000	1.18
-+++ vcl/unx/source/app/salsys.cxx	15 Apr 2008 20:07:26 -0000
-@@ -66,7 +66,7 @@ X11SalSystem::~X11SalSystem()
- unsigned int X11SalSystem::GetDisplayScreenCount()
- {
-     SalDisplay* pSalDisp = GetX11SalData()->GetDisplay();
--    return pSalDisp->IsXinerama() ? pSalDisp->GetXineramaScreens().size() : pSalDisp->GetScreenCount();
-+    return pSalDisp->IsXinerama() ? pSalDisp->GetXineramaScreenCount() : pSalDisp->GetScreenCount();
- }
- 
- bool X11SalSystem::IsMultiDisplay()
-@@ -88,14 +88,13 @@ Rectangle X11SalSystem::GetDisplayScreen
-     SalDisplay* pSalDisp = GetX11SalData()->GetDisplay();
-     if( pSalDisp->IsXinerama() )
-     {
--        const std::vector< Rectangle >& rScreens = pSalDisp->GetXineramaScreens();
-+        const std::vector< Rectangle >& rScreens = pSalDisp->GetXineramaScreenRects();
-         if( nScreen < rScreens.size() )
-             aRet = rScreens[nScreen];
-     }
-     else
-     {
--        const SalDisplay::ScreenData& rScreen = pSalDisp->getDataForScreen( nScreen );
--        aRet = Rectangle( Point( 0, 0 ), rScreen.m_aSize );
-+        aRet = Rectangle( Point( 0, 0 ), pSalDisp->GetScreenSize(nScreen) );
-     }
-     
-     return aRet;
-@@ -113,8 +112,7 @@ rtl::OUString X11SalSystem::GetScreenNam
-     SalDisplay* pSalDisp = GetX11SalData()->GetDisplay();
-     if( pSalDisp->IsXinerama() )
-     {
--        const std::vector< Rectangle >& rScreens = pSalDisp->GetXineramaScreens();
--        if( nScreen >= rScreens.size() )
-+        if( nScreen >= pSalDisp->GetXineramaScreenCount() )
-             nScreen = 0;
-         rtl::OUStringBuffer aBuf( 256 );
-         aBuf.append( rtl::OStringToOUString( rtl::OString( DisplayString( pSalDisp->GetDisplay() ) ), osl_getThreadTextEncoding() ) );
---- vcl/unx/source/app/wmadaptor.cxx	23 Jan 2008 17:18:32 -0000	1.67.112.1
-+++ vcl/unx/source/app/wmadaptor.cxx	15 Apr 2008 20:07:31 -0000
-@@ -1580,7 +1580,7 @@ void WMAdaptor::maximizeFrame( X11SalFra
-         if( m_pSalDisplay->IsXinerama() )
-         {
-             Point aMed( aTL.X() + rGeom.nWidth/2, aTL.Y() + rGeom.nHeight/2 );
--            const std::vector< Rectangle >& rScreens = m_pSalDisplay->GetXineramaScreens();
-+            const std::vector< Rectangle >& rScreens = m_pSalDisplay->GetXineramaScreenRects();
-             for( unsigned int i = 0; i < rScreens.size(); i++ )
-                 if( rScreens[i].IsInside( aMed ) )
-                 {
-@@ -2202,7 +2202,7 @@ void NetWMAdaptor::showFullScreen( X11Sa
-                 m_pSalDisplay->GetRootWindow( pFrame->GetScreenNumber() ),
-                 &aRoot, &aChild,
-                 &root_x, &root_y, &lx, &ly, &mask );
--                const std::vector< Rectangle >& rScreens = m_pSalDisplay->GetXineramaScreens();
-+                const std::vector< Rectangle >& rScreens = m_pSalDisplay->GetXineramaScreenRects();
-                 Point aMousePoint( root_x, root_y );
-                 for( unsigned int i = 0; i < rScreens.size(); i++ )
-                 {
---- vcl/unx/source/gdi/salgdi3.cxx	31 Jan 2008 10:06:27 -0000	1.149.8.2
-+++ vcl/unx/source/gdi/salgdi3.cxx	15 Apr 2008 20:07:40 -0000
-@@ -905,7 +905,7 @@ bool X11SalGraphics::DrawServerAAForcedS
-         // clip with screen
-         int nScreenX = m_pFrame->maGeometry.nX+aXRect.x;
-         int nScreenY = m_pFrame->maGeometry.nY+aXRect.y;
--        const Size& rScreenSize = GetDisplay()->getDataForScreen( m_nScreen ).m_aSize;
-+        const Size& rScreenSize = GetDisplay()->GetScreenSize( m_nScreen );
-         int nScreenW = rScreenSize.Width();
-         int nScreenH = rScreenSize.Height();
-         if( nScreenX < 0 )
-@@ -941,7 +941,7 @@ bool X11SalGraphics::DrawServerAAForcedS
-             // geometry changed in the meantime; lets get the current geometry
-             // and clip against the current window size as well as the screen
-             // with the current frame position
--            const Size& rScreenSize = GetDisplay()->getDataForScreen(m_nScreen).m_aSize;
-+            const Size& rScreenSize = GetDisplay()->GetScreenSize(m_nScreen);
-             int nScreenW = rScreenSize.Width();
-             int nScreenH = rScreenSize.Height();
-             XLIB_Window aRoot = None;
---- vcl/unx/source/window/salframe.cxx	25 Jan 2008 16:37:31 -0000	1.219.110.3
-+++ vcl/unx/source/window/salframe.cxx	15 Apr 2008 20:07:50 -0000
-@@ -370,7 +370,7 @@ void X11SalFrame::Init( ULONG nSalFrameS
-     {
-         if( ! bUseGeometry )
-         {
--            Size aScreenSize( GetDisplay()->getDataForScreen( m_nScreen ).m_aSize );
-+            Size aScreenSize( GetDisplay()->GetScreenSize( m_nScreen ) );
-             w = aScreenSize.Width();
-             h = aScreenSize.Height();
-             if( nSalFrameStyle & SAL_FRAME_STYLE_SIZEABLE &&
-@@ -439,7 +439,7 @@ void X11SalFrame::Init( ULONG nSalFrameS
-                                    GetDisplay()->GetRootWindow( m_nScreen ),
-                                    &aRoot, &aChild,
-                                    &root_x, &root_y, &lx, &ly, &mask );
--                    const std::vector< Rectangle >& rScreens = GetDisplay()->GetXineramaScreens();
-+                    const std::vector< Rectangle >& rScreens = GetDisplay()->GetXineramaScreenRects();
-                     for( unsigned int i = 0; i < rScreens.size(); i++ )
-                         if( rScreens[i].IsInside( Point( root_x, root_y ) ) )
-                         {
-@@ -1443,7 +1443,7 @@ void X11SalFrame::Center( )
- 	int				nRealScreenWidth, nRealScreenHeight;
- 	int				nScreenX = 0, nScreenY = 0;
- 
--    const Size& aScreenSize = GetDisplay()->getDataForScreen( m_nScreen ).m_aSize;
-+    const Size& aScreenSize = GetDisplay()->GetScreenSize( m_nScreen );
-     nScreenWidth		= aScreenSize.Width();
-     nScreenHeight		= aScreenSize.Height();
-     nRealScreenWidth	= nScreenWidth;
-@@ -1469,7 +1469,7 @@ void X11SalFrame::Center( )
-                            &root_x, &root_y,
-                            &x, &y,
-                            &mask );
--        const std::vector< Rectangle >& rScreens = GetDisplay()->GetXineramaScreens();
-+        const std::vector< Rectangle >& rScreens = GetDisplay()->GetXineramaScreenRects();
-         for( unsigned int i = 0; i < rScreens.size(); i++ )
-             if( rScreens[i].IsInside( Point( root_x, root_y ) ) )
-             {
-@@ -1689,7 +1689,7 @@ void X11SalFrame::SetWindowState( const 
-                 bDoAdjust = true;
-             }
-             
--            const Size& aScreenSize = pDisplay_->getDataForScreen( m_nScreen ).m_aSize;
-+            const Size& aScreenSize = pDisplay_->GetScreenSize( m_nScreen );
-             const WMAdaptor *pWM = GetDisplay()->getWMAdaptor();
-             
-             if( bDoAdjust && aPosSize.GetWidth() <= aScreenSize.Width()
-@@ -1883,7 +1883,7 @@ void X11SalFrame::GetPosSize( Rectangle 
- {
- 	if( maGeometry.nWidth < 1 || maGeometry.nHeight < 1 )
- 	{
--        const Size& aScreenSize = pDisplay_->getDataForScreen( m_nScreen ).m_aSize;
-+        const Size& aScreenSize = pDisplay_->GetScreenSize( m_nScreen );
- 		long w = aScreenSize.Width()  - maGeometry.nLeftDecoration - maGeometry.nRightDecoration;
- 		long h = aScreenSize.Height() - maGeometry.nTopDecoration - maGeometry.nBottomDecoration;
- 
-@@ -2090,7 +2090,7 @@ void X11SalFrame::Restore()
- 
- void X11SalFrame::ShowFullScreen( BOOL bFullScreen, sal_Int32 nScreen )
- {
--    if( GetDisplay()->IsXinerama() && GetDisplay()->GetXineramaScreens().size() > 1 )
-+    if( GetDisplay()->IsXinerama() && GetDisplay()->GetXineramaScreenCount() > 1 )
-     {
-         if( mbFullScreen == (bool)bFullScreen )
-             return;
-@@ -2099,10 +2099,10 @@ void X11SalFrame::ShowFullScreen( BOOL b
-             maRestorePosSize = Rectangle( Point( maGeometry.nX, maGeometry.nY ),
-                                           Size( maGeometry.nWidth, maGeometry.nHeight ) );
-             Rectangle aRect;
--            if( nScreen < 0 || nScreen >= static_cast<int>(GetDisplay()->GetXineramaScreens().size()) )
-+            if( nScreen < 0 || nScreen >= static_cast<int>(GetDisplay()->GetXineramaScreenCount()) )
-                 aRect = Rectangle( Point(0,0), GetDisplay()->GetScreenSize( m_nScreen ) );
-             else
--                aRect = GetDisplay()->GetXineramaScreens()[nScreen];
-+                aRect = GetDisplay()->GetXineramaScreenRects()[nScreen];
-             nStyle_ |= SAL_FRAME_STYLE_PARTIAL_FULLSCREEN;
-             bool bVisible = bMapped_;
-             if( bVisible )

Added: branches/ooo-build-2-4/patches/src680/vcl-limited-bmp-subset-fix.diff
==============================================================================
--- (empty file)
+++ branches/ooo-build-2-4/patches/src680/vcl-limited-bmp-subset-fix.diff	Mon Apr 28 22:05:32 2008
@@ -0,0 +1,30 @@
+--- vcl/source/gdi/outdev2.cxx	18 Jan 2008 14:55:58 -0000	1.38.72.1
++++ vcl/source/gdi/outdev2.cxx	28 Apr 2008 21:45:34 -0000
+@@ -739,7 +739,7 @@ void OutputDevice::ImplDrawBitmap( const
+                         }
+                         if( aPosAry.mnDestX < 0 )
+                         {
+-                            aPosAry.mnDestWidth += aPosAry.mnDestX;
++                            aPosAry.mnDestWidth = Max(long(0),aPosAry.mnDestWidth+aPosAry.mnDestX);
+                             aPosAry.mnSrcX -= sal::static_int_cast<long>(aPosAry.mnDestX / nScaleX);
+                             aPosAry.mnDestX = 0;
+                         }
+@@ -757,7 +757,7 @@ void OutputDevice::ImplDrawBitmap( const
+                         }
+                         if( aPosAry.mnDestY < 0 )
+                         {
+-                            aPosAry.mnDestHeight += aPosAry.mnDestY;
++                            aPosAry.mnDestHeight = Max(long(0),aPosAry.mnDestHeight+aPosAry.mnDestY);
+                             aPosAry.mnSrcY -= sal::static_int_cast<long>(aPosAry.mnDestY / nScaleY);
+                             aPosAry.mnDestY = 0;
+                         }
+@@ -767,7 +767,8 @@ void OutputDevice::ImplDrawBitmap( const
+                 }
+             }
+ 
+-			mpGraphics->DrawBitmap( &aPosAry, *aBmp.ImplGetImpBitmap()->ImplGetSalBitmap(), this );
++            if ( aPosAry.mnSrcWidth && aPosAry.mnSrcHeight && aPosAry.mnDestWidth && aPosAry.mnDestHeight )
++                mpGraphics->DrawBitmap( &aPosAry, *aBmp.ImplGetImpBitmap()->ImplGetSalBitmap(), this );
+ 		}
+ 	}
+ }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]