Commits

Anonymous committed 91b81e3 Merge

cws dict33a: merge with OOO330_m8

  • Participants
  • Parent commits 0dfc5f7, 622d6e0

Comments (0)

Files changed (152)

 03cf80e29979c28332a36bcb00a8947032433b3d OOO330_m4
 d9859c6e249e31fbd651f9a98c2fbe85d6f2df80 OOO330_m5
 b50d17df62fbe1557311243a12ca1bced5c1c28b OOO330_m6
+ca1b98fb0dd4add032396c9f1d37a3f6764e3909 OOO330_m7
+850e10cf801ede046f962443383ae239a28be675 OOO330_m8

File basctl/source/basicide/basidesh.cxx

 
 TYPEINIT1( BasicIDEShell, SfxViewShell );
 
-SFX_IMPL_VIEWFACTORY( BasicIDEShell, IDEResId( SVX_INTERFACE_BASIDE_VIEWSH ) )
+SFX_IMPL_NAMED_VIEWFACTORY( BasicIDEShell, "Default" )
 {
 	SFX_VIEW_REGISTRATION( BasicDocShell );
 }

File connectivity/source/commontools/formattedcolumnvalue.cxx

         ::rtl::OUString sStringValue;
         if ( m_pData->m_xColumn.is() )
         {
-            sStringValue = DBTypeConversion::getValue(
-                m_pData->m_xColumn, m_pData->m_xFormatter, m_pData->m_aNullDate, m_pData->m_nFormatKey, m_pData->m_nKeyType
-            );
+            if ( m_pData->m_bNumericField )
+            {
+                sStringValue = DBTypeConversion::getValue(
+                    m_pData->m_xColumn, m_pData->m_xFormatter, m_pData->m_aNullDate, m_pData->m_nFormatKey, m_pData->m_nKeyType
+                );
+            }
+            else
+            {
+                sStringValue = m_pData->m_xColumn->getString();
+            }
         }
         return sStringValue;
     }

File connectivity/source/drivers/odbcbase/OTools.cxx

 			// StarView zu lang ist oder der Treiber kann die Laenge der
 			// Daten nicht im voraus bestimmen - also als MemoryStream
 			// speichern.
-			while ((pcbValue == SQL_NO_TOTAL ) || pcbValue > nMaxLen)
+			while ((pcbValue == SQL_NO_TOTAL ) || nLen > nMaxLen)
 			{
 				// Bei Strings wird der Puffer nie ganz ausgenutzt
 				// (das letzte Byte ist immer ein NULL-Byte, das

File dbaccess/source/core/api/KeySet.cxx

 		for (;aAutoIter !=  aAutoEnd; ++aAutoIter)
 		{
 			// we will only fetch values which are keycolumns
-			if ( m_pKeyColumnNames->find(*aAutoIter) != aEnd )
+            SelectColumnsMetaData::iterator aFind = m_pKeyColumnNames->find(*aAutoIter);
+			if ( aFind != aEnd )
 			{
 				sMaxStmt += sMax;
-				sMaxStmt += ::dbtools::quoteName( sQuote,*aAutoIter);
+                sMaxStmt += ::dbtools::quoteName( sQuote,aFind->second.sRealName
+);
 				sMaxStmt += sMaxEnd;
 			}
 		}
 			::rtl::OUString sStmt = ::rtl::OUString::createFromAscii("SELECT ");
 			sStmt += sMaxStmt;
 			sStmt += ::rtl::OUString::createFromAscii("FROM ");
-			::rtl::OUString sCatalog,sSchema,sTable;
+            ::rtl::OUString sCatalog,sSchema,sTable;
 			::dbtools::qualifiedNameComponents(m_xConnection->getMetaData(),m_sUpdateTableName,sCatalog,sSchema,sTable,::dbtools::eInDataManipulation);
 			sStmt += ::dbtools::composeTableNameForSelect( m_xConnection, sCatalog, sSchema, sTable );
-			//sStmt += m_aSelectComposedTableName;
 			try
 			{
 				// now fetch the autoincrement values

File dbaccess/source/core/api/SingleSelectQueryComposer.cxx

 		// Feldnamen
 		sal_uInt16 i;
 		for (i=0;i< pLhs->count();i++)
-			 pCondition->getChild(i)->parseNodeToPredicateStr( aName, m_xConnection, xFormatter, m_aLocale, static_cast<sal_Char>( m_sDecimalSep.toChar() ) );
+			 pLhs->getChild(i)->parseNodeToPredicateStr( aName, m_xConnection, xFormatter, m_aLocale, static_cast<sal_Char>( m_sDecimalSep.toChar() ) );
 
 		// Kriterium
 		aItem.Handle = pCondition->getChild(1)->getNodeType();
 		aValue		 = pCondition->getChild(1)->getTokenValue();
 		for(i=0;i< pRhs->count();i++)
-			pCondition->getChild(i)->parseNodeToPredicateStr(aValue, m_xConnection, xFormatter, m_aLocale, static_cast<sal_Char>( m_sDecimalSep.toChar() ) );
+			pRhs->getChild(i)->parseNodeToPredicateStr(aValue, m_xConnection, xFormatter, m_aLocale, static_cast<sal_Char>( m_sDecimalSep.toChar() ) );
 
 		aItem.Name = aName;
 		aItem.Value <<= aValue;

File dbaccess/source/ui/app/AppController.cxx

 				InvalidateAll();
 				break;
 			case SID_DB_APP_DSRELDESIGN:
-                if ( !m_pSubComponentManager->activateSubFrame( ::rtl::OUString(), SID_DB_APP_DSRELDESIGN, E_OPEN_DESIGN ) )
+            {
+                Reference< XComponent > xRelationDesigner;
+                if ( !m_pSubComponentManager->activateSubFrame( ::rtl::OUString(), SID_DB_APP_DSRELDESIGN, E_OPEN_DESIGN, xRelationDesigner ) )
                 {
 				    SharedConnection xConnection( ensureConnection() );
 				    if ( xConnection.is() )
                         onDocumentOpened( ::rtl::OUString(), SID_DB_APP_DSRELDESIGN, E_OPEN_DESIGN, xComponent, NULL );
 				    }
                 }
-				break;
+            }
+			break;
 			case SID_DB_APP_DSUSERADMIN:
 				{
 					SharedConnection xConnection( ensureConnection() );
 	case E_REPORT:
 	case E_FORM:
 	{
-        if ( !m_pSubComponentManager->activateSubFrame( _sName, _eType, _eOpenMode ) )
+        if ( !m_pSubComponentManager->activateSubFrame( _sName, _eType, _eOpenMode, xRet ) )
         {
 		    ::std::auto_ptr< OLinkedDocumentsAccess > aHelper = getDocumentsAccess( _eType );
             if ( !aHelper->isConnected() )
 	case E_QUERY:
 	case E_TABLE:
 	{
-        if ( !m_pSubComponentManager->activateSubFrame( _sName, _eType, _eOpenMode ) )
+        if ( !m_pSubComponentManager->activateSubFrame( _sName, _eType, _eOpenMode, xRet ) )
         {
 		    SharedConnection xConnection( ensureConnection() );
 		    if ( !xConnection.is() )

File dbaccess/source/ui/app/subcomponentmanager.cxx

     }
 
 	//------------------------------------------------------------------------------------------------------------------
-    bool SubComponentManager::activateSubFrame( const ::rtl::OUString& _rName, const sal_Int32 _nComponentType, const ElementOpenMode _eOpenMode ) const
+    bool SubComponentManager::activateSubFrame( const ::rtl::OUString& _rName, const sal_Int32 _nComponentType,
+        const ElementOpenMode _eOpenMode, Reference< XComponent >& o_rComponent ) const
     {
 	    ::osl::MutexGuard aGuard( m_pData->getMutex() );
 
         const Reference< XTopWindow > xTopWindow( xFrame->getContainerWindow(), UNO_QUERY_THROW );
         xTopWindow->toFront();
 
+        if ( pos->xModel.is() )
+            o_rComponent = pos->xModel.get();
+        else if ( pos->xController.is() )
+            o_rComponent = pos->xController.get();
+        else
+            o_rComponent = pos->xFrame.get();
+
         return true;
     }
 

File dbaccess/source/ui/app/subcomponentmanager.hxx

         bool        activateSubFrame(
                         const ::rtl::OUString& _rName,
                         const sal_Int32 _nComponentType,
-                        const ElementOpenMode _eOpenMode
+                        const ElementOpenMode _eOpenMode,
+                              ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& o_rComponent
                     ) const;
 
         /** closes all frames of the given component

File desktop/source/deployment/registry/help/dp_help.cxx

             ::rtl::Reference<AbortChannel> const & abortChannel,
             Reference<XCommandEnvironment> const & xCmdEnv );
 
+        bool extensionContainsCompiledHelp();
     public:
         PackageImpl(
             ::rtl::Reference<PackageRegistryBackend> const & myBackend,
         Reference<XCommandEnvironment> const & xCmdEnv );
 
 	void implProcessHelp( Reference< deployment::XPackage > xPackage, bool doRegisterPackage,
-            Reference<ucb::XCommandEnvironment> const & xCmdEnv);
+                          bool compiledHelp, Reference<ucb::XCommandEnvironment> const & xCmdEnv);
 	void implCollectXhpFiles( const rtl::OUString& aDir,
 		std::vector< rtl::OUString >& o_rXhpFileVector );
 
     return pBackend;
 }
 
+
+bool BackendImpl::PackageImpl::extensionContainsCompiledHelp() 
+{
+    bool bCompiled = true;
+    rtl::OUString aExpandedHelpURL = dp_misc::expandUnoRcUrl(getURL());
+    
+    ::osl::Directory helpFolder(aExpandedHelpURL);
+    if ( helpFolder.open() == ::osl::File::E_None)
+    {
+        //iterate over the contents of the help folder
+        //We assume that all folders withing the help folder contain language specific
+        //help files. If just one of them does not contain compiled help then this
+        //function returns false.
+        ::osl::DirectoryItem item;
+        ::osl::File::RC errorNext = ::osl::File::E_None;
+        while ((errorNext = helpFolder.getNextItem(item)) == ::osl::File::E_None)
+        {
+            //No find the language folders
+            ::osl::FileStatus stat(FileStatusMask_Type | FileStatusMask_FileName |FileStatusMask_FileURL);
+            if (item.getFileStatus(stat) == ::osl::File::E_None)
+            {
+                if (stat.getFileType() != ::osl::FileStatus::Directory)
+                    continue;
+                
+                //look if there is the folder help.idxl in the language folder
+                OUString compUrl(stat.getFileURL() + OUSTR("/help.idxl"));
+                ::osl::Directory compiledFolder(compUrl);
+                if (compiledFolder.open() != ::osl::File::E_None)
+                {
+                    bCompiled = false;
+                    break;
+                }
+            }
+            else
+            {
+                //Error
+                OSL_ASSERT(0);
+                bCompiled = false;
+                break;
+            }
+        }
+        if (errorNext != ::osl::File::E_NOENT
+            && errorNext != ::osl::File::E_None)
+        {
+            //Error
+            OSL_ASSERT(0);
+            bCompiled = false;    
+        }
+    }
+    return bCompiled;
+}
 //______________________________________________________________________________
 beans::Optional< beans::Ambiguous<sal_Bool> >
 BackendImpl::PackageImpl::isRegistered_(
 
     BackendImpl* that = getMyBackend();
 	Reference< deployment::XPackage > xThisPackage( this );
-	that->implProcessHelp( xThisPackage, doRegisterPackage, xCmdEnv);
+	that->implProcessHelp( xThisPackage, doRegisterPackage,
+                           extensionContainsCompiledHelp(), xCmdEnv);
 }
 
 beans::Optional< OUString > BackendImpl::PackageImpl::getRegistrationDataURL()
 
 
 void BackendImpl::implProcessHelp
-( Reference< deployment::XPackage > xPackage, bool doRegisterPackage,
+( Reference< deployment::XPackage > xPackage, bool doRegisterPackage, bool compiledHelp,
   Reference<ucb::XCommandEnvironment> const & xCmdEnv)
 {
     OSL_ASSERT(xPackage.is());
     if (doRegisterPackage)
     {
         HelpBackendDb::Data data;
-        const OUString sHelpFolder = createFolder(OUString(), xCmdEnv);
-        data.dataUrl = sHelpFolder;
 
-        Reference< ucb::XSimpleFileAccess > xSFA = getFileAccess();
-        rtl::OUString aHelpURL = xPackage->getURL();
-        rtl::OUString aExpandedHelpURL = dp_misc::expandUnoRcUrl( aHelpURL );
-        rtl::OUString aName = xPackage->getName();
-        if( !xSFA->isFolder( aExpandedHelpURL ) )
+        if (compiledHelp)
         {
-            rtl::OUString aErrStr = getResourceString( RID_STR_HELPPROCESSING_GENERAL_ERROR );
-            aErrStr += rtl::OUString::createFromAscii( "No help folder" );
-            OWeakObject* oWeakThis = static_cast<OWeakObject *>(this);
-            throw deployment::DeploymentException( rtl::OUString(), oWeakThis,
-                                                   makeAny( uno::Exception( aErrStr, oWeakThis ) ) );
+            data.dataUrl = xPackage->getURL();
         }
+        else
+        {
+            const OUString sHelpFolder = createFolder(OUString(), xCmdEnv);
+            data.dataUrl = sHelpFolder;
 
-        Reference<XComponentContext> const & xContext = getComponentContext();
-        Reference< script::XInvocation > xInvocation;
-        if( xContext.is() )
-        {
-            try
+            Reference< ucb::XSimpleFileAccess > xSFA = getFileAccess();
+            rtl::OUString aHelpURL = xPackage->getURL();
+            rtl::OUString aExpandedHelpURL = dp_misc::expandUnoRcUrl( aHelpURL );
+            rtl::OUString aName = xPackage->getName();
+            if( !xSFA->isFolder( aExpandedHelpURL ) )
             {
-                xInvocation = Reference< script::XInvocation >( 
-                    xContext->getServiceManager()->createInstanceWithContext( rtl::OUString::createFromAscii(
-                                                                                  "com.sun.star.help.HelpIndexer" ), xContext ) , UNO_QUERY );
+                rtl::OUString aErrStr = getResourceString( RID_STR_HELPPROCESSING_GENERAL_ERROR );
+                aErrStr += rtl::OUString::createFromAscii( "No help folder" );
+                OWeakObject* oWeakThis = static_cast<OWeakObject *>(this);
+                throw deployment::DeploymentException( rtl::OUString(), oWeakThis,
+                                                       makeAny( uno::Exception( aErrStr, oWeakThis ) ) );
             }
-            catch (Exception &)
+
+            Reference<XComponentContext> const & xContext = getComponentContext();
+            Reference< script::XInvocation > xInvocation;
+            if( xContext.is() )
             {
-                // i98680: Survive missing lucene
+                try
+                {
+                    xInvocation = Reference< script::XInvocation >( 
+                        xContext->getServiceManager()->createInstanceWithContext( rtl::OUString::createFromAscii(
+                                                                                      "com.sun.star.help.HelpIndexer" ), xContext ) , UNO_QUERY );
+                }
+                catch (Exception &)
+                {
+                    // i98680: Survive missing lucene
+                }
             }
-        }
 
-        // Scan languages
-        Sequence< rtl::OUString > aLanguageFolderSeq = xSFA->getFolderContents( aExpandedHelpURL, true );
-        sal_Int32 nLangCount = aLanguageFolderSeq.getLength();
-        const rtl::OUString* pSeq = aLanguageFolderSeq.getConstArray();
-        for( sal_Int32 iLang = 0 ; iLang < nLangCount ; ++iLang )
-        {
-            rtl::OUString aLangURL = pSeq[iLang];
-            if( xSFA->isFolder( aLangURL ) )
+            // Scan languages
+            Sequence< rtl::OUString > aLanguageFolderSeq = xSFA->getFolderContents( aExpandedHelpURL, true );
+            sal_Int32 nLangCount = aLanguageFolderSeq.getLength();
+            const rtl::OUString* pSeq = aLanguageFolderSeq.getConstArray();
+            for( sal_Int32 iLang = 0 ; iLang < nLangCount ; ++iLang )
             {
-                std::vector< rtl::OUString > aXhpFileVector;
+                rtl::OUString aLangURL = pSeq[iLang];
+                if( xSFA->isFolder( aLangURL ) )
+                {
+                    std::vector< rtl::OUString > aXhpFileVector;
 
-                // calculate jar file URL
-                sal_Int32 indexStartSegment = aLangURL.lastIndexOf('/');
-                // for example "/en"
-                OUString langFolderURLSegment(
-                    aLangURL.copy(
-                        indexStartSegment + 1, aLangURL.getLength() - indexStartSegment - 1));
+                    // calculate jar file URL
+                    sal_Int32 indexStartSegment = aLangURL.lastIndexOf('/');
+                    // for example "/en"
+                    OUString langFolderURLSegment(
+                        aLangURL.copy(
+                            indexStartSegment + 1, aLangURL.getLength() - indexStartSegment - 1));
 
-                //create the folder in the "temporary folder"
-                ::ucbhelper::Content langFolderContent;
-                const OUString langFolderDest = makeURL(sHelpFolder, langFolderURLSegment);
-                const OUString langFolderDestExpanded = ::dp_misc::expandUnoRcUrl(langFolderDest);
-                ::dp_misc::create_folder(
-                    &langFolderContent,
-                    langFolderDest, xCmdEnv);
+                    //create the folder in the "temporary folder"
+                    ::ucbhelper::Content langFolderContent;
+                    const OUString langFolderDest = makeURL(sHelpFolder, langFolderURLSegment);
+                    const OUString langFolderDestExpanded = ::dp_misc::expandUnoRcUrl(langFolderDest);
+                    ::dp_misc::create_folder(
+                        &langFolderContent,
+                        langFolderDest, xCmdEnv);
                 
-                rtl::OUString aJarFile(
-                    makeURL(sHelpFolder, langFolderURLSegment + aSlash + aHelpStr +
-                            OUSTR(".jar")));
-                aJarFile = ::dp_misc::expandUnoRcUrl(aJarFile);
+                    rtl::OUString aJarFile(
+                        makeURL(sHelpFolder, langFolderURLSegment + aSlash + aHelpStr +
+                                OUSTR(".jar")));
+                    aJarFile = ::dp_misc::expandUnoRcUrl(aJarFile);
                 
-                rtl::OUString aEncodedJarFilePath = rtl::Uri::encode(
-                    aJarFile, rtl_UriCharClassPchar,
-                    rtl_UriEncodeIgnoreEscapes,
-                    RTL_TEXTENCODING_UTF8 );
-                rtl::OUString aDestBasePath = rtl::OUString::createFromAscii( "vnd.sun.star.pkg://" );
-                aDestBasePath += aEncodedJarFilePath;
-                aDestBasePath += rtl::OUString::createFromAscii( "/" );
+                    rtl::OUString aEncodedJarFilePath = rtl::Uri::encode(
+                        aJarFile, rtl_UriCharClassPchar,
+                        rtl_UriEncodeIgnoreEscapes,
+                        RTL_TEXTENCODING_UTF8 );
+                    rtl::OUString aDestBasePath = rtl::OUString::createFromAscii( "vnd.sun.star.pkg://" );
+                    aDestBasePath += aEncodedJarFilePath;
+                    aDestBasePath += rtl::OUString::createFromAscii( "/" );
 
-                sal_Int32 nLenLangFolderURL = aLangURL.getLength() + 1;
+                    sal_Int32 nLenLangFolderURL = aLangURL.getLength() + 1;
 
-                Sequence< rtl::OUString > aSubLangSeq = xSFA->getFolderContents( aLangURL, true );
-                sal_Int32 nSubLangCount = aSubLangSeq.getLength();
-                const rtl::OUString* pSubLangSeq = aSubLangSeq.getConstArray();
-                for( sal_Int32 iSubLang = 0 ; iSubLang < nSubLangCount ; ++iSubLang )
-                {
-                    rtl::OUString aSubFolderURL = pSubLangSeq[iSubLang];
-                    if( !xSFA->isFolder( aSubFolderURL ) )
-                        continue;
+                    Sequence< rtl::OUString > aSubLangSeq = xSFA->getFolderContents( aLangURL, true );
+                    sal_Int32 nSubLangCount = aSubLangSeq.getLength();
+                    const rtl::OUString* pSubLangSeq = aSubLangSeq.getConstArray();
+                    for( sal_Int32 iSubLang = 0 ; iSubLang < nSubLangCount ; ++iSubLang )
+                    {
+                        rtl::OUString aSubFolderURL = pSubLangSeq[iSubLang];
+                        if( !xSFA->isFolder( aSubFolderURL ) )
+                            continue;
 
-                    implCollectXhpFiles( aSubFolderURL, aXhpFileVector );
+                        implCollectXhpFiles( aSubFolderURL, aXhpFileVector );
 
-                    // Copy to package (later: move?)
-                    rtl::OUString aDestPath = aDestBasePath;
-                    rtl::OUString aPureFolderName = aSubFolderURL.copy( nLenLangFolderURL );
-                    aDestPath += aPureFolderName;
-                    xSFA->copy( aSubFolderURL, aDestPath );
-                }
+                        // Copy to package (later: move?)
+                        rtl::OUString aDestPath = aDestBasePath;
+                        rtl::OUString aPureFolderName = aSubFolderURL.copy( nLenLangFolderURL );
+                        aDestPath += aPureFolderName;
+                        xSFA->copy( aSubFolderURL, aDestPath );
+                    }
 
-                // Call compiler
-                sal_Int32 nXhpFileCount = aXhpFileVector.size();
-                rtl::OUString* pXhpFiles = new rtl::OUString[nXhpFileCount];
-                for( sal_Int32 iXhp = 0 ; iXhp < nXhpFileCount ; ++iXhp )
-                {
-                    rtl::OUString aXhpFile = aXhpFileVector[iXhp];
-                    rtl::OUString aXhpRelFile = aXhpFile.copy( nLenLangFolderURL );
-                    pXhpFiles[iXhp] = aXhpRelFile;
-                }
+                    // Call compiler
+                    sal_Int32 nXhpFileCount = aXhpFileVector.size();
+                    rtl::OUString* pXhpFiles = new rtl::OUString[nXhpFileCount];
+                    for( sal_Int32 iXhp = 0 ; iXhp < nXhpFileCount ; ++iXhp )
+                    {
+                        rtl::OUString aXhpFile = aXhpFileVector[iXhp];
+                        rtl::OUString aXhpRelFile = aXhpFile.copy( nLenLangFolderURL );
+                        pXhpFiles[iXhp] = aXhpRelFile;
+                    }
 
-                rtl::OUString aOfficeHelpPath( SvtPathOptions().GetHelpPath() );
-                rtl::OUString aOfficeHelpPathFileURL;
-                ::osl::File::getFileURLFromSystemPath( aOfficeHelpPath, aOfficeHelpPathFileURL ); 
+                    rtl::OUString aOfficeHelpPath( SvtPathOptions().GetHelpPath() );
+                    rtl::OUString aOfficeHelpPathFileURL;
+                    ::osl::File::getFileURLFromSystemPath( aOfficeHelpPath, aOfficeHelpPathFileURL ); 
 
-                HelpProcessingErrorInfo aErrorInfo;
-                bool bSuccess = compileExtensionHelp(
-                    aOfficeHelpPathFileURL, aHelpStr, aLangURL,
-                    nXhpFileCount, pXhpFiles,
-                    langFolderDestExpanded, aErrorInfo );
+                    HelpProcessingErrorInfo aErrorInfo;
+                    bool bSuccess = compileExtensionHelp(
+                        aOfficeHelpPathFileURL, aHelpStr, aLangURL,
+                        nXhpFileCount, pXhpFiles,
+                        langFolderDestExpanded, aErrorInfo );
 
-                if( bSuccess && xInvocation.is() )
-                {
-                    Sequence<uno::Any> aParamsSeq( 6 );
+                    if( bSuccess && xInvocation.is() )
+                    {
+                        Sequence<uno::Any> aParamsSeq( 6 );
 
-                    aParamsSeq[0] = uno::makeAny( rtl::OUString::createFromAscii( "-lang" ) );
+                        aParamsSeq[0] = uno::makeAny( rtl::OUString::createFromAscii( "-lang" ) );
 
-                    rtl::OUString aLang;
-                    sal_Int32 nLastSlash = aLangURL.lastIndexOf( '/' );
-                    if( nLastSlash != -1 )
-                        aLang = aLangURL.copy( nLastSlash + 1 );
-                    else
-                        aLang = rtl::OUString::createFromAscii( "en" );
-                    aParamsSeq[1] = uno::makeAny( aLang );
+                        rtl::OUString aLang;
+                        sal_Int32 nLastSlash = aLangURL.lastIndexOf( '/' );
+                        if( nLastSlash != -1 )
+                            aLang = aLangURL.copy( nLastSlash + 1 );
+                        else
+                            aLang = rtl::OUString::createFromAscii( "en" );
+                        aParamsSeq[1] = uno::makeAny( aLang );
 
-                    aParamsSeq[2] = uno::makeAny( rtl::OUString::createFromAscii( "-mod" ) );
-                    aParamsSeq[3] = uno::makeAny( rtl::OUString::createFromAscii( "help" ) );
+                        aParamsSeq[2] = uno::makeAny( rtl::OUString::createFromAscii( "-mod" ) );
+                        aParamsSeq[3] = uno::makeAny( rtl::OUString::createFromAscii( "help" ) );
 
-                    aParamsSeq[4] = uno::makeAny( rtl::OUString::createFromAscii( "-zipdir" ) );
-                    rtl::OUString aSystemPath;
-                    osl::FileBase::getSystemPathFromFileURL(
-                        langFolderDestExpanded, aSystemPath );
-                    aParamsSeq[5] = uno::makeAny( aSystemPath );
+                        aParamsSeq[4] = uno::makeAny( rtl::OUString::createFromAscii( "-zipdir" ) );
+                        rtl::OUString aSystemPath;
+                        osl::FileBase::getSystemPathFromFileURL(
+                            langFolderDestExpanded, aSystemPath );
+                        aParamsSeq[5] = uno::makeAny( aSystemPath );
 
-                    Sequence< sal_Int16 > aOutParamIndex;
-                    Sequence< uno::Any > aOutParam;
-                    uno::Any aRet = xInvocation->invoke( rtl::OUString::createFromAscii( "createIndex" ),
-                                                         aParamsSeq, aOutParamIndex, aOutParam );
-                }
+                        Sequence< sal_Int16 > aOutParamIndex;
+                        Sequence< uno::Any > aOutParam;
+                        uno::Any aRet = xInvocation->invoke( rtl::OUString::createFromAscii( "createIndex" ),
+                                                             aParamsSeq, aOutParamIndex, aOutParam );
+                    }
 
-                if( !bSuccess )
-                {
-                    USHORT nErrStrId = 0;
-                    switch( aErrorInfo.m_eErrorClass )
+                    if( !bSuccess )
                     {
-                    case HELPPROCESSING_GENERAL_ERROR:
-                    case HELPPROCESSING_INTERNAL_ERROR:		nErrStrId = RID_STR_HELPPROCESSING_GENERAL_ERROR; break;
-                    case HELPPROCESSING_XMLPARSING_ERROR:	nErrStrId = RID_STR_HELPPROCESSING_XMLPARSING_ERROR; break;
-                    default: ;
-                    };
+                        USHORT nErrStrId = 0;
+                        switch( aErrorInfo.m_eErrorClass )
+                        {
+                        case HELPPROCESSING_GENERAL_ERROR:
+                        case HELPPROCESSING_INTERNAL_ERROR:		nErrStrId = RID_STR_HELPPROCESSING_GENERAL_ERROR; break;
+                        case HELPPROCESSING_XMLPARSING_ERROR:	nErrStrId = RID_STR_HELPPROCESSING_XMLPARSING_ERROR; break;
+                        default: ;
+                        };
 
-                    rtl::OUString aErrStr;
-                    if( nErrStrId != 0 )
-                    {
-                        aErrStr = getResourceString( nErrStrId );
+                        rtl::OUString aErrStr;
+                        if( nErrStrId != 0 )
+                        {
+                            aErrStr = getResourceString( nErrStrId );
 
-                        // Remoce CR/LF
-                        rtl::OUString aErrMsg( aErrorInfo.m_aErrorMsg );
-                        sal_Unicode nCR = 13, nLF = 10;
-                        sal_Int32 nSearchCR = aErrMsg.indexOf( nCR );
-                        sal_Int32 nSearchLF = aErrMsg.indexOf( nLF );
-                        sal_Int32 nCopy;
-                        if( nSearchCR != -1 || nSearchLF != -1 )
-                        {
-                            if( nSearchCR == -1 )
-                                nCopy = nSearchLF;
-                            else if( nSearchLF == -1 )
-                                nCopy = nSearchCR;
-                            else
-                                nCopy = ( nSearchCR < nSearchLF ) ? nSearchCR : nSearchLF;
+                            // Remoce CR/LF
+                            rtl::OUString aErrMsg( aErrorInfo.m_aErrorMsg );
+                            sal_Unicode nCR = 13, nLF = 10;
+                            sal_Int32 nSearchCR = aErrMsg.indexOf( nCR );
+                            sal_Int32 nSearchLF = aErrMsg.indexOf( nLF );
+                            sal_Int32 nCopy;
+                            if( nSearchCR != -1 || nSearchLF != -1 )
+                            {
+                                if( nSearchCR == -1 )
+                                    nCopy = nSearchLF;
+                                else if( nSearchLF == -1 )
+                                    nCopy = nSearchCR;
+                                else
+                                    nCopy = ( nSearchCR < nSearchLF ) ? nSearchCR : nSearchLF;
 
-                            aErrMsg = aErrMsg.copy( 0, nCopy );
-                        }
-                        aErrStr += aErrMsg;
-                        if( nErrStrId == RID_STR_HELPPROCESSING_XMLPARSING_ERROR && aErrorInfo.m_aXMLParsingFile.getLength() )
-                        {
-                            aErrStr += rtl::OUString::createFromAscii( " in " );
+                                aErrMsg = aErrMsg.copy( 0, nCopy );
+                            }
+                            aErrStr += aErrMsg;
+                            if( nErrStrId == RID_STR_HELPPROCESSING_XMLPARSING_ERROR && aErrorInfo.m_aXMLParsingFile.getLength() )
+                            {
+                                aErrStr += rtl::OUString::createFromAscii( " in " );
 
-                            rtl::OUString aDecodedFile = rtl::Uri::decode( aErrorInfo.m_aXMLParsingFile,
-                                                                           rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8 );
-                            aErrStr += aDecodedFile;
-                            if( aErrorInfo.m_nXMLParsingLine != -1 )
-                            {
-                                aErrStr += rtl::OUString::createFromAscii( ", line " );
-                                aErrStr += ::rtl::OUString::valueOf( aErrorInfo.m_nXMLParsingLine );
+                                rtl::OUString aDecodedFile = rtl::Uri::decode( aErrorInfo.m_aXMLParsingFile,
+                                                                               rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8 );
+                                aErrStr += aDecodedFile;
+                                if( aErrorInfo.m_nXMLParsingLine != -1 )
+                                {
+                                    aErrStr += rtl::OUString::createFromAscii( ", line " );
+                                    aErrStr += ::rtl::OUString::valueOf( aErrorInfo.m_nXMLParsingLine );
+                                }
                             }
                         }
+
+                        OWeakObject* oWeakThis = static_cast<OWeakObject *>(this);
+                        throw deployment::DeploymentException( rtl::OUString(), oWeakThis,
+                                                               makeAny( uno::Exception( aErrStr, oWeakThis ) ) );
                     }
-
-                    OWeakObject* oWeakThis = static_cast<OWeakObject *>(this);
-                    throw deployment::DeploymentException( rtl::OUString(), oWeakThis,
-                                                           makeAny( uno::Exception( aErrStr, oWeakThis ) ) );
                 }
             }
         }
-
         //Writing the data entry replaces writing the flag file. If we got to this
         //point the registration was successful.
         addDataToDb(xPackage->getURL(), data);
-    }
+    } //if (doRegisterPackage)
     else
     {
         deleteDataFromDb(xPackage->getURL());

File drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx

 						    mpOutputDevice->SetLineColor(Color(aHairlineColor));
 						    mpOutputDevice->SetFillColor();
 						    aHairLinePolyPolygon.transform(maCurrentTransformation);
-						    LineInfo aLineInfo(LINE_SOLID, basegfx::fround(rLine.getWidth()));
+							
+							// #i113922# LineWidth needs to be transformed, too
+							const basegfx::B2DVector aDiscreteUnit(maCurrentTransformation * basegfx::B2DVector(rLine.getWidth(), 0.0));
+							const double fDiscreteLineWidth(aDiscreteUnit.getLength());
+
+							LineInfo aLineInfo(LINE_SOLID, basegfx::fround(fDiscreteLineWidth));
 						    aLineInfo.SetLineJoin(rLine.getLineJoin());
 
 						    for(sal_uInt32 a(0); a < aHairLinePolyPolygon.count(); a++)

File editeng/inc/editeng/unoipset.hxx

 	sal_Bool AreThereOwnUsrAnys() const { return (pCombiList ? sal_True : sal_False); }
 	::com::sun::star::uno::Any* GetUsrAnyForID(sal_uInt16 nWID) const;
 	void AddUsrAnyForID(const ::com::sun::star::uno::Any& rAny, sal_uInt16 nWID);
+	void ClearAllUsrAny();
 
 	com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > getPropertySetInfo() const;
     const SfxItemPropertyMapEntry* getPropertyMapEntries() const {return _pMap;}

File editeng/source/uno/unoipset.cxx

 //----------------------------------------------------------------------
 SvxItemPropertySet::~SvxItemPropertySet()
 {
-/*
-	if(pItemPool)
-		delete pItemPool;
-	pItemPool = NULL;
-*/
-
-	if(pCombiList)
-		delete pCombiList;
-	pCombiList = NULL;
+	ClearAllUsrAny();
 }
 
 //----------------------------------------------------------------------
 	pCombiList->Insert(pNew);
 }
 
+//----------------------------------------------------------------------
+
+void SvxItemPropertySet::ClearAllUsrAny()
+{
+	if(pCombiList)
+		delete pCombiList;
+	pCombiList = NULL;
+}
+
+//----------------------------------------------------------------------
+
 sal_Bool SvxUnoCheckForPositiveValue( const uno::Any& rVal )
 {
 	sal_Bool bConvert = sal_True; // the default is that all metric items must be converted

File forms/source/component/FormComponent.cxx

 //------------------------------------------------------------------
 Sequence<sal_Int8> SAL_CALL OControlModel::getImplementationId() throw(RuntimeException)
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::getImplementationId" );
 	return OImplementationIds::getImplementationId(getTypes());
 }
 
 //------------------------------------------------------------------
 Sequence<Type> SAL_CALL OControlModel::getTypes() throw(RuntimeException)
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::getTypes" );
     TypeBag aTypes( _getTypes() );
 
     Reference< XTypeProvider > xProv;
 //------------------------------------------------------------------------------
 Sequence<Type> OControlModel::_getTypes()
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::_getTypes" );
     return TypeBag( OComponentHelper::getTypes(),
         OPropertySetAggregationHelper::getTypes(),
         OControlModel_BASE::getTypes()
 //------------------------------------------------------------------
 Any SAL_CALL OControlModel::queryAggregation(const Type& _rType) throw (RuntimeException)
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::queryAggregation" );
 	// base class 1
 	Any aReturn(OComponentHelper::queryAggregation(_rType));
 
 //------------------------------------------------------------------------------
 void OControlModel::readHelpTextCompatibly(const staruno::Reference< stario::XObjectInputStream >& _rxInStream)
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::readHelpTextCompatibly" );
 	::rtl::OUString sHelpText;
 	::comphelper::operator>>( _rxInStream, sHelpText);
 	try
 //------------------------------------------------------------------------------
 void OControlModel::writeHelpTextCompatibly(const staruno::Reference< stario::XObjectOutputStream >& _rxOutStream)
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::writeHelpTextCompatibly" );
 	::rtl::OUString sHelpText;
 	try
 	{
         // the native look is ugly ....
         // #i37342# / 2004-11-19 / frank.schoenheit@sun.com
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::OControlModel" );
 	DBG_CTOR(OControlModel, NULL);
 	if (_rUnoControlModelTypeName.getLength())	// the is a model we have to aggregate
 	{
 	,m_nTabIndex( FRM_DEFAULT_TABINDEX )
 	,m_nClassId( FormComponentType::CONTROL )
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::OControlModel(copy)" );
 	DBG_CTOR( OControlModel, NULL );
 	DBG_ASSERT( _pOriginal, "OControlModel::OControlModel: invalid original!" );
 
 //------------------------------------------------------------------
 void OControlModel::clonedFrom( const OControlModel* /*_pOriginal*/ )
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::clonedFrom" );
     // nothing to do in this base class
 }
 
 //------------------------------------------------------------------------------
 void OControlModel::doResetDelegator()
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::doResetDelegator" );
 	if (m_xAggregate.is())
 		m_xAggregate->setDelegator(NULL);
 }
 //------------------------------------------------------------------------------
 void OControlModel::doSetDelegator()
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::doSetDelegator" );
 	increment(m_refCount);
 	if (m_xAggregate.is())
 	{
 //------------------------------------------------------------------------------
 InterfaceRef SAL_CALL OControlModel::getParent() throw(RuntimeException)
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::getParent" );
 	return m_xParent;
 }
 
 //------------------------------------------------------------------------------
 void SAL_CALL OControlModel::setParent(const InterfaceRef& _rxParent) throw(com::sun::star::lang::NoSupportException, RuntimeException)
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::setParent" );
 	osl::MutexGuard aGuard(m_aMutex);
 
 	Reference<XComponent> xComp(m_xParent, UNO_QUERY);
 //------------------------------------------------------------------------------
 ::rtl::OUString SAL_CALL OControlModel::getName() throw(RuntimeException)
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::getName" );
 	::rtl::OUString aReturn;
 	OPropertySetHelper::getFastPropertyValue(PROPERTY_ID_NAME) >>= aReturn;
 	return aReturn;
 //------------------------------------------------------------------------------
 void SAL_CALL OControlModel::setName(const ::rtl::OUString& _rName) throw(RuntimeException)
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::setName" );
         setFastPropertyValue(PROPERTY_ID_NAME, makeAny(_rName));
 }
 
 //------------------------------------------------------------------------------
 sal_Bool SAL_CALL OControlModel::supportsService(const rtl::OUString& _rServiceName) throw ( RuntimeException)
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::supportsService" );
     Sequence<rtl::OUString> aSupported = getSupportedServiceNames();
 	const rtl::OUString* pSupported = aSupported.getConstArray();
 	for (sal_Int32 i=0; i<aSupported.getLength(); ++i, ++pSupported)
 //------------------------------------------------------------------------------
 Sequence< ::rtl::OUString > OControlModel::getAggregateServiceNames()
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::getAggregateServiceNames" );
     Sequence< ::rtl::OUString > aAggServices;
     Reference< XServiceInfo > xInfo;
 	if ( query_aggregation( m_xAggregate, xInfo ) )
 //------------------------------------------------------------------------------
 Sequence<rtl::OUString> SAL_CALL OControlModel::getSupportedServiceNames() throw(RuntimeException)
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::getSupportedServiceNames" );
     return ::comphelper::concatSequences(
         getAggregateServiceNames(),
         getSupportedServiceNames_Static()
 //------------------------------------------------------------------------------
 Sequence< ::rtl::OUString > SAL_CALL OControlModel::getSupportedServiceNames_Static() throw( RuntimeException )
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::getSupportedServiceNames_Static" );
     Sequence< ::rtl::OUString > aServiceNames( 2 );
 	aServiceNames[ 0 ] = FRM_SUN_FORMCOMPONENT;
 	aServiceNames[ 1 ] = ::rtl::OUString::createFromAscii( "com.sun.star.form.FormControlModel" );
 //------------------------------------------------------------------------------
 void SAL_CALL OControlModel::disposing(const com::sun::star::lang::EventObject& _rSource) throw (RuntimeException)
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::disposing" );
 	// release the parent
 	if (_rSource.Source == m_xParent)
 	{
 //-----------------------------------------------------------------------------
 void OControlModel::disposing()
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::disposing" );
 	OPropertySetAggregationHelper::disposing();
 
 	Reference<com::sun::star::lang::XComponent> xComp;
 //------------------------------------------------------------------------------
 void OControlModel::writeAggregate( const Reference< XObjectOutputStream >& _rxOutStream ) const
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::writeAggregate" );
 	Reference< XPersistObject > xPersist;
 	if ( query_aggregation( m_xAggregate, xPersist ) )
 		xPersist->write( _rxOutStream );
 //------------------------------------------------------------------------------
 void OControlModel::readAggregate( const Reference< XObjectInputStream >& _rxInStream )
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::readAggregate" );
 	Reference< XPersistObject > xPersist;
 	if ( query_aggregation( m_xAggregate, xPersist ) )
 		xPersist->read( _rxInStream );
 void SAL_CALL OControlModel::write(const Reference<stario::XObjectOutputStream>& _rxOutStream)
                         throw(stario::IOException, RuntimeException)
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::write" );
 	osl::MutexGuard aGuard(m_aMutex);
 
 	// 1. Schreiben des UnoControls
 //------------------------------------------------------------------------------
 void OControlModel::read(const Reference<stario::XObjectInputStream>& InStream) throw (::com::sun::star::io::IOException, RuntimeException)
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::read" );
 	osl::MutexGuard aGuard(m_aMutex);
 
 	Reference<stario::XMarkableStream> xMark(InStream, UNO_QUERY);
 //------------------------------------------------------------------------------
 PropertyState OControlModel::getPropertyStateByHandle( sal_Int32 _nHandle )
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::getPropertyStateByHandle" );
 	// simply compare the current and the default value
 	Any aCurrentValue = getPropertyDefaultByHandle( _nHandle );
 	Any aDefaultValue;  getFastPropertyValue( aDefaultValue, _nHandle );
 //------------------------------------------------------------------------------
 void OControlModel::setPropertyToDefaultByHandle( sal_Int32 _nHandle)
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::setPropertyToDefaultByHandle" );
 	Any aDefault = getPropertyDefaultByHandle( _nHandle );
 
 	Any aConvertedValue, aOldValue;
 //------------------------------------------------------------------------------
 Any OControlModel::getPropertyDefaultByHandle( sal_Int32 _nHandle ) const
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::getPropertyDefaultByHandle" );
 	Any aReturn;
 	switch ( _nHandle )
 	{
 //------------------------------------------------------------------------------
 void OControlModel::getFastPropertyValue( Any& _rValue, sal_Int32 _nHandle ) const
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::getFastPropertyValue" );
 	switch ( _nHandle )
 	{
 		case PROPERTY_ID_NAME:
                         Any& _rConvertedValue, Any& _rOldValue, sal_Int32 _nHandle, const Any& _rValue)
                         throw (com::sun::star::lang::IllegalArgumentException)
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::convertFastPropertyValue" );
 	sal_Bool bModified(sal_False);
 	switch (_nHandle)
 	{
 void OControlModel::setFastPropertyValue_NoBroadcast(sal_Int32 _nHandle, const Any& _rValue)
                         throw (Exception)
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::setFastPropertyValue_NoBroadcast" );
 	switch (_nHandle)
 	{
 		case PROPERTY_ID_NAME:
 //------------------------------------------------------------------------------
 void OControlModel::describeFixedProperties( Sequence< Property >& _rProps ) const
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::describeFixedProperties" );
 	BEGIN_DESCRIBE_BASE_PROPERTIES( 4 )
         DECL_PROP2      (CLASSID,     sal_Int16,        READONLY, TRANSIENT);
         DECL_PROP1      (NAME,        ::rtl::OUString,  BOUND);
 //------------------------------------------------------------------------------
 void OControlModel::describeAggregateProperties( Sequence< Property >& /* [out] */ _rAggregateProps ) const
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::describeAggregateProperties" );
     if ( m_xAggregateSet.is() )
     {
         Reference< XPropertySetInfo > xPSI( m_xAggregateSet->getPropertySetInfo() );
 //------------------------------------------------------------------------------
 ::osl::Mutex& OControlModel::getMutex()
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::getMutex" );
     return m_aMutex;
 }
 
 //------------------------------------------------------------------------------
 void OControlModel::describeFixedAndAggregateProperties( Sequence< Property >& _out_rFixedProperties, Sequence< Property >& _out_rAggregateProperties ) const
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::describeFixedAndAggregateProperties" );
     describeFixedProperties( _out_rFixedProperties );
     describeAggregateProperties( _out_rAggregateProperties );
 }
 //------------------------------------------------------------------------------
 Reference< XMultiPropertySet > OControlModel::getPropertiesInterface()
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::getPropertiesInterface" );
     return Reference< XMultiPropertySet >( *this, UNO_QUERY );
 }
 
 //------------------------------------------------------------------------------
 Reference< XPropertySetInfo> SAL_CALL OControlModel::getPropertySetInfo() throw( RuntimeException)
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::getPropertySetInfo" );
 	return createPropertySetInfo( getInfoHelper() );
 }
 
 //------------------------------------------------------------------------------
 ::cppu::IPropertyArrayHelper& OControlModel::getInfoHelper()
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::getInfoHelper" );
     return m_aPropertyBagHelper.getInfoHelper();
 }
 
 //--------------------------------------------------------------------
 void SAL_CALL OControlModel::addProperty( const ::rtl::OUString& _rName, ::sal_Int16 _nAttributes, const Any& _rInitialValue ) throw (PropertyExistException, IllegalTypeException, IllegalArgumentException, RuntimeException)
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::addProperty" );
     m_aPropertyBagHelper.addProperty( _rName, _nAttributes, _rInitialValue );
 }
 
 //--------------------------------------------------------------------
 void SAL_CALL OControlModel::removeProperty( const ::rtl::OUString& _rName ) throw (UnknownPropertyException, NotRemoveableException, RuntimeException)
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::removeProperty" );
     m_aPropertyBagHelper.removeProperty( _rName );
 }
 
 //--------------------------------------------------------------------
 Sequence< PropertyValue > SAL_CALL OControlModel::getPropertyValues() throw (RuntimeException)
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::getPropertyValues" );
     return m_aPropertyBagHelper.getPropertyValues();
 }
 
 //--------------------------------------------------------------------
 void SAL_CALL OControlModel::setPropertyValues( const Sequence< PropertyValue >& _rProps ) throw (UnknownPropertyException, PropertyVetoException, IllegalArgumentException, WrappedTargetException, RuntimeException)
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::setPropertyValues" );
     m_aPropertyBagHelper.setPropertyValues( _rProps );
 }
 
 	Any aReturn( OControlModel::queryAggregation(_rType) );
 	if (!aReturn.hasValue())
 	{
-        // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::queryAggregation" );
 		aReturn = OBoundControlModel_BASE1::queryInterface(_rType);
 
         if ( !aReturn.hasValue() && m_bCommitable )
 }
 
 //-----------------------------------------------------------------------------
+void OBoundControlModel::initOwnValueProperty( const ::rtl::OUString& i_rValuePropertyName )
+{
+    OSL_PRECOND( !m_sValuePropertyName.getLength() && -1 == m_nValuePropertyAggregateHandle,
+        "OBoundControlModel::initOwnValueProperty: value property is already initialized!" );
+    OSL_ENSURE( i_rValuePropertyName.getLength(), "OBoundControlModel::initOwnValueProperty: invalid property name!" );
+    m_sValuePropertyName = i_rValuePropertyName;
+}
+
+//-----------------------------------------------------------------------------
 void OBoundControlModel::initValueProperty( const ::rtl::OUString& _rValuePropertyName, sal_Int32 _nValuePropertyExternalHandle )
 {
     OSL_PRECOND( !m_sValuePropertyName.getLength() && -1 == m_nValuePropertyAggregateHandle,
-        "OBoundControlModel::initValueProperty: already called before!" );
+        "OBoundControlModel::initValueProperty: value property is already initialized!" );
     OSL_ENSURE( _rValuePropertyName.getLength(), "OBoundControlModel::initValueProperty: invalid property name!" );
     OSL_ENSURE( _nValuePropertyExternalHandle != -1, "OBoundControlModel::initValueProperty: invalid property handle!" );
 
 //-----------------------------------------------------------------------------
 void OBoundControlModel::disposing()
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::_getTypes" );
 	OControlModel::disposing();
 
     ::osl::ClearableMutexGuard aGuard(m_aMutex);
 }
 
 //------------------------------------------------------------------------------
+void OBoundControlModel::onValuePropertyChange( ControlModelLock& i_rControLock )
+{
+    if ( hasExternalValueBinding() )
+    {   // the control value changed, while we have an external value binding
+        // -> forward the value to it
+        if ( m_eControlValueChangeInstigator != eExternalBinding )
+            transferControlValueToExternal( i_rControLock );
+    }
+    else if ( !m_bCommitable && m_xColumnUpdate.is() )
+    {   // the control value changed, while we are  bound to a database column,
+        // but not committable (which means changes in the control have to be reflected to
+        // the underlying database column immediately)
+        // -> forward the value to the database column
+        if ( m_eControlValueChangeInstigator != eDbColumnBinding )
+            commitControlValueToDbColumn( false );
+    }
+
+    // validate the new value
+    if ( m_bSupportsValidation )
+        recheckValidity( true );
+}
+
+//------------------------------------------------------------------------------
 void OBoundControlModel::_propertyChanged( const PropertyChangeEvent& _rEvt ) throw ( RuntimeException )
 {
     ControlModelLock aLock( *this );
         "OBoundControlModel::_propertyChanged: where did this come from (2)?" );
 
     if ( _rEvt.PropertyName == m_sValuePropertyName )
-    {   // our control value changed
-
-        if ( hasExternalValueBinding() )
-        {   // the control value changed, while we have an external value binding
-            // -> forward the value to it
-            if ( m_eControlValueChangeInstigator != eExternalBinding )
-                transferControlValueToExternal( aLock );
-        }
-        else if ( !m_bCommitable && m_xColumnUpdate.is() )
-        {   // the control value changed, while we are  bound to a database column,
-            // but not committable (which means changes in the control have to be reflected to
-            // the underlying database column immediately)
-            // -> forward the value to the database column
-            if ( m_eControlValueChangeInstigator !=  eDbColumnBinding )
-                commitControlValueToDbColumn( false );
-        }
-
-        // validate the new value
-        if ( m_bSupportsValidation )
-            recheckValidity( true );
+    {
+        onValuePropertyChange( aLock );
     }
 }
 
 //------------------------------------------------------------------------------
 StringSequence SAL_CALL OBoundControlModel::getSupportedServiceNames() throw(RuntimeException)
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::disposing" );
     return ::comphelper::concatSequences(
         getAggregateServiceNames(),
         getSupportedServiceNames_Static()
 //------------------------------------------------------------------------------
 void SAL_CALL OBoundControlModel::write( const Reference<stario::XObjectOutputStream>& _rxOutStream ) throw(stario::IOException, RuntimeException)
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::getSupportedServiceNames_Static" );
 	OControlModel::write(_rxOutStream);
 
 	osl::MutexGuard aGuard(m_aMutex);
 //------------------------------------------------------------------------------
 void OBoundControlModel::getFastPropertyValue(Any& rValue, sal_Int32 nHandle) const
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OBoundControlModel::getFastPropertyValue" );
 	switch (nHandle)
 	{
         case PROPERTY_ID_INPUT_REQUIRED:
 //------------------------------------------------------------------------------
 Any OBoundControlModel::getPropertyDefaultByHandle( sal_Int32 _nHandle ) const
 {
-    // RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "forms", "dev@dba.openoffice.org", "OControlModel::convertFastPropertyValue" );
     Any aDefault;
     switch ( _nHandle )
     {

File forms/source/component/ImageControl.cxx

 	:OBoundControlModel( _rxFactory, VCL_CONTROLMODEL_IMAGECONTROL, FRM_SUN_CONTROL_IMAGECONTROL, sal_False, sal_False, sal_False )
 					// use the old control name for compytibility reasons
 	,m_pImageProducer( NULL )
+    ,m_bExternalGraphic( true )
 	,m_bReadOnly( sal_False )
+    ,m_sImageURL()
+    ,m_xGraphicObject()
 {
 	DBG_CTOR( OImageControlModel, NULL );
 	m_nClassId = FormComponentType::IMAGECONTROL;
-    initValueProperty( PROPERTY_IMAGE_URL, PROPERTY_ID_IMAGE_URL);
+    initOwnValueProperty( PROPERTY_IMAGE_URL );
 
 	implConstruct();
 }
 	:OBoundControlModel( _pOriginal, _rxFactory )
 				// use the old control name for compytibility reasons
 	,m_pImageProducer( NULL )
+    ,m_bExternalGraphic( true )
+	,m_bReadOnly( _pOriginal->m_bReadOnly )
+    ,m_sImageURL( _pOriginal->m_sImageURL )
+    ,m_xGraphicObject( _pOriginal->m_xGraphicObject )
 {
 	DBG_CTOR( OImageControlModel, NULL );
 	implConstruct();
-	m_bReadOnly = _pOriginal->m_bReadOnly;
 
     osl_incrementInterlockedCount( &m_refCount );
     {
         // simulate a propertyChanged event for the ImageURL
         // 2003-05-15 - #109591# - fs@openoffice.org
-        Any aImageURL;
-        getFastPropertyValue( aImageURL, PROPERTY_ID_IMAGE_URL );
-        ::rtl::OUString sImageURL;
-        aImageURL >>= sImageURL;
-
         ::osl::MutexGuard aGuard( m_aMutex );
-        impl_handleNewImageURL_lck( sImageURL, eOther );
+        impl_handleNewImageURL_lck( eOther );
     }
     osl_decrementInterlockedCount( &m_refCount );
 }
 	return ImageStoreInvalid != lcl_getImageStoreType( _nColumnType );
 }
 
-
-//------------------------------------------------------------------------------
-void OImageControlModel::_propertyChanged( const PropertyChangeEvent& _rEvent )
-											throw( RuntimeException )
-{
-    if ( m_xColumnUpdate.is() )
-    {
-        OBoundControlModel::_propertyChanged( _rEvent );
-    }
-    else
-    {   // we're not bound. In this case, we have to manually care for updating the
-        // image producer, since the base class will not do this
-        ::rtl::OUString sImageURL;
-        _rEvent.NewValue >>= sImageURL;
-
-        ::osl::MutexGuard aGuard( m_aMutex );
-        impl_handleNewImageURL_lck( sImageURL, eOther );
-    }
-}
-
 //------------------------------------------------------------------------------
 void OImageControlModel::getFastPropertyValue(Any& rValue, sal_Int32 nHandle) const
 {
 	switch (nHandle)
 	{
-		case PROPERTY_ID_READONLY       : rValue <<= (sal_Bool)m_bReadOnly; break;
+        case PROPERTY_ID_READONLY:
+            rValue <<= (sal_Bool)m_bReadOnly;
+            break;
+        case PROPERTY_ID_IMAGE_URL:
+            rValue <<= m_sImageURL;
+            break;
+        case PROPERTY_ID_GRAPHIC:
+            rValue <<= m_xGraphicObject.is() ? m_xGraphicObject->getGraphic() : Reference< XGraphic >();
+            break;
 		default:
 			OBoundControlModel::getFastPropertyValue(rValue, nHandle);
 	}
 			m_bReadOnly = getBOOL(rValue);
 			break;
 
-		default:
+        case PROPERTY_ID_IMAGE_URL:
+            OSL_VERIFY( rValue >>= m_sImageURL );
+            impl_handleNewImageURL_lck( eOther );
+            {
+                ControlModelLock aLock( *this );
+                    // that's a fake ... onValuePropertyChange expects to receive the only lock to our instance,
+                    // but we're already called with our mutex locked ...
+                onValuePropertyChange( aLock );
+            }
+            break;
+
+        case PROPERTY_ID_GRAPHIC:
+        {
+            Reference< XGraphic > xGraphic;
+            OSL_VERIFY( rValue >>= xGraphic );
+            if ( !xGraphic.is() )
+                m_xGraphicObject.clear();
+            else
+            {
+                m_xGraphicObject = GraphicObject::create( m_aContext.getUNOContext() );
+                m_xGraphicObject->setGraphic( xGraphic );
+            }
+
+            if ( m_bExternalGraphic )
+            {
+                // if that's an external graphic, i.e. one which has not been loaded by ourselves in response to a
+                // new image URL, then also adjust our ImageURL.
+                ::rtl::OUString sNewImageURL;
+                if ( m_xGraphicObject.is() )
+                {
+                    sNewImageURL = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "vnd.sun.star.GraphicObject:" ) );
+				    sNewImageURL = sNewImageURL + m_xGraphicObject->getUniqueID();
+                }
+                m_sImageURL = sNewImageURL;
+                // TODO: speaking strictly, this would need to be notified, since ImageURL is a bound property. However,
+                // this method here is called with a locked mutex, so we cannot simply call listeners ...
+                // I think the missing notification (and thus clients which potentially cannot observe the change)
+                // is less severe than the potential deadlock ...
+            }
+        }
+        break;
+
+        default:
 			OBoundControlModel::setFastPropertyValue_NoBroadcast(nHandle, rValue);
+            break;
 	}
 }
 
 		case PROPERTY_ID_READONLY :
 			return tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bReadOnly);
 
+        case PROPERTY_ID_IMAGE_URL:
+            return tryPropertyValue( rConvertedValue, rOldValue, rValue, m_sImageURL );
+
+        case PROPERTY_ID_GRAPHIC:
+        {
+            const Reference< XGraphic > xGraphic( getFastPropertyValue( PROPERTY_ID_GRAPHIC ), UNO_QUERY );
+            return tryPropertyValue( rConvertedValue, rOldValue, rValue, xGraphic );
+        }
+
 		default:
 			return OBoundControlModel::convertFastPropertyValue(rConvertedValue, rOldValue, nHandle, rValue);
 	}
 //------------------------------------------------------------------------------
 void OImageControlModel::describeFixedProperties( Sequence< Property >& _rProps ) const
 {
-	BEGIN_DESCRIBE_PROPERTIES( 2, OBoundControlModel )
-		DECL_BOOL_PROP1 ( READONLY,             BOUND );
-        DECL_PROP1      ( TABINDEX, sal_Int16,  BOUND );
+	BEGIN_DESCRIBE_PROPERTIES( 4, OBoundControlModel )
+        DECL_IFACE_PROP2( GRAPHIC,   XGraphic,        BOUND, TRANSIENT );
+        DECL_PROP1      ( IMAGE_URL, ::rtl::OUString, BOUND );
+		DECL_BOOL_PROP1 ( READONLY,                   BOUND );
+        DECL_PROP1      ( TABINDEX,  sal_Int16,       BOUND );
 	END_DESCRIBE_PROPERTIES();
 }
 
 //------------------------------------------------------------------------------
+void OImageControlModel::describeAggregateProperties( Sequence< Property >& /* [out] */ o_rAggregateProperties ) const
+{
+    OBoundControlModel::describeAggregateProperties( o_rAggregateProperties );
+    // remove ImageULR and Graphic properties, we "overload" them. This is because our aggregate synchronizes those
+    // two, but we have an own sychronization mechanism.
+    RemoveProperty( o_rAggregateProperties, PROPERTY_IMAGE_URL );
+    RemoveProperty( o_rAggregateProperties, PROPERTY_GRAPHIC );
+}
+
+//------------------------------------------------------------------------------
 ::rtl::OUString OImageControlModel::getServiceName() throw ( ::com::sun::star::uno::RuntimeException)
 {
 	return FRM_COMPONENT_IMAGECONTROL;	// old (non-sun) name for compatibility !
 }
 
 //------------------------------------------------------------------------------
-sal_Bool OImageControlModel::impl_handleNewImageURL_lck( const ::rtl::OUString& _rURL, ValueChangeInstigator _eInstigator )
+sal_Bool OImageControlModel::impl_handleNewImageURL_lck( ValueChangeInstigator _eInstigator )
 {
     switch ( lcl_getImageStoreType( getFieldType() ) )
     {
     case ImageStoreBinary:
-        if ( impl_updateStreamForURL_lck( _rURL, _eInstigator ) )
+        if ( impl_updateStreamForURL_lck( m_sImageURL, _eInstigator ) )
             return sal_True;
         break;
 
     case ImageStoreLink:
     {
-        ::rtl::OUString sCommitURL( _rURL );
+        ::rtl::OUString sCommitURL( m_sImageURL );
         if ( m_sDocumentURL.getLength() )
             sCommitURL = URIHelper::simpleNormalizedMakeRelative( m_sDocumentURL, sCommitURL );
         OSL_ENSURE( m_xColumnUpdate.is(), "OImageControlModel::impl_handleNewImageURL_lck: no bound field, but ImageStoreLink?!" );
     break;
 
     case ImageStoreInvalid:
-        OSL_ENSURE( false, "OImageControlModel::impl_handleNewImageURL_lck: invalid current field type!" );
+        OSL_ENSURE( false, "OImageControlModel::impl_handleNewImageURL_lck: image storage type type!" );
         break;
     }
 
     else
     {
 	    ::osl::MutexGuard aGuard(m_aMutex);
-
-        ::rtl::OUString sImageURL;
-        m_xAggregateSet->getPropertyValue( PROPERTY_IMAGE_URL ) >>= sImageURL;
-        return impl_handleNewImageURL_lck( sImageURL, eDbColumnBinding );
+        return impl_handleNewImageURL_lck( eDbColumnBinding );
     }
 
     return sal_True;
 {
     switch ( lcl_getImageStoreType( getFieldType() ) )
     {
-    case ImageStoreBinary:  return makeAny( m_xColumn->getBinaryStream() );
+    case ImageStoreBinary: 
+    {
+        Reference< XInputStream > xImageStream( m_xColumn->getBinaryStream() );
+        if ( m_xColumn->wasNull() )
+            xImageStream.clear();
+        return makeAny( xImageStream );
+    }
     case ImageStoreLink:
     {
         ::rtl::OUString sImageLink( m_xColumn->getString() );
 }
 
 //------------------------------------------------------------------------------
+Any OImageControlModel::getControlValue( ) const
+{
+    return makeAny( m_sImageURL );
+}
+
+//------------------------------------------------------------------------------
 void OImageControlModel::doSetControlValue( const Any& _rValue )
 {
     DBG_ASSERT( GetImageProducer() && m_xImageProducer.is(), "OImageControlModel::doSetControlValue: no image producer!" );
 void SAL_CALL OImageControlModel::disposing()
 {
 	OBoundControlModel::disposing();
-
-    {
-        ::osl::MutexGuard aGuard( m_aMutex ); // setControlValue expects this
-        setControlValue( Any(), eOther );
-    }
 }
 
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
 IMPL_LINK( OImageControlModel, OnImageImportDone, ::Graphic*, i_pGraphic )
 {
-    ENSURE_OR_RETURN( i_pGraphic, "OImageControlModel::OnImageImportDone: illegal graphic!", 0L );
-    setPropertyValue(
-        ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Graphic" ) ),
-        makeAny( Image( i_pGraphic->GetBitmapEx() ).GetXGraphic() )
-    );
+    const Reference< XGraphic > xGraphic( i_pGraphic != NULL ? Image( i_pGraphic->GetBitmapEx() ).GetXGraphic() : NULL );
+    m_bExternalGraphic = false;
+    try
+    {
+        setPropertyValue( PROPERTY_GRAPHIC, makeAny( xGraphic ) );
+    }
+    catch ( const Exception& )
+    {
+        DBG_UNHANDLED_EXCEPTION();
+    }
+    m_bExternalGraphic = true;
     return 1L;
 }
 
 			implClearGraphics( sal_False );
 			sal_Bool bIsLink = sal_False;
 			xController->getValue(ExtendedFilePickerElementIds::CHECKBOX_LINK, 0) >>= bIsLink;
+            // Force bIsLink to be TRUE if we're bound to a field. Though we initialized the file picker with IsLink=TRUE
+            // in this case, and disabled the respective control, there might be picker implementations which do not
+            // respect this, and return IsLink=FALSE here. In this case, "normalize" the flag.
+            // #i112659# / 2010-08-26 / frank.schoenheit@oracle.com
+            bIsLink |= bHasField;
 			if ( !bIsLink )
 			{
 				Graphic aGraphic;
 				aDialog.GetGraphic( aGraphic );
-				                
-				Reference< graphic::XGraphicObject > xGrfObj = graphic::GraphicObject::create( m_aContext.getUNOContext() );
-				xGrfObj->setGraphic( aGraphic.GetXGraphic() );
-				rtl::OUString sObjectID( RTL_CONSTASCII_USTRINGPARAM( "vnd.sun.star.GraphicObject:" ) );
-				sObjectID = sObjectID + xGrfObj->getUniqueID();
-				xSet->setPropertyValue( PROPERTY_IMAGE_URL, makeAny( ::rtl::OUString( sObjectID ) ) );
+ 				xSet->setPropertyValue( PROPERTY_GRAPHIC, makeAny( aGraphic.GetXGraphic() ) );
 			}
 			else
 				xSet->setPropertyValue( PROPERTY_IMAGE_URL, makeAny( ::rtl::OUString( aDialog.GetPath() ) ) );

File forms/source/component/ImageControl.hxx

 #include <com/sun/star/form/XImageProducerSupplier.hpp>
 #include <com/sun/star/awt/XMouseListener.hpp>
 #include <com/sun/star/util/XModifyBroadcaster.hpp>
+#include <com/sun/star/graphic/XGraphicObject.hpp>
 #include <comphelper/propmultiplex.hxx>
 #include <comphelper/implementationreference.hxx>
 #include <cppuhelper/implbase2.hxx>
 {
 	::com::sun::star::uno::Reference< ::com::sun::star::awt::XImageProducer> 	m_xImageProducer;
 	ImageProducer*									m_pImageProducer;
+    bool                                            m_bExternalGraphic;
 	sal_Bool										m_bReadOnly;
+    ::rtl::OUString                                 m_sImageURL;
+    ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphicObject > 
+                                                    m_xGraphicObject;
     ::rtl::OUString                                 m_sDocumentURL;
 
 protected:
     // OComponentHelper
 	virtual void SAL_CALL disposing();
 
-    // OPropertyChangeListener
-	virtual void _propertyChanged( const ::com::sun::star::beans::PropertyChangeEvent& ) throw(::com::sun::star::uno::RuntimeException);
-
     // XPersistObject
 	virtual ::rtl::OUString SAL_CALL getServiceName() throw ( ::com::sun::star::uno::RuntimeException);
 	virtual void SAL_CALL write(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream) throw ( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException);
     virtual void SAL_CALL startProduction(  ) throw (::com::sun::star::uno::RuntimeException);
 
     // OControlModel's property handling
+    virtual void describeAggregateProperties(
+		::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rAggregateProps
+    ) const;
 	virtual void describeFixedProperties(
 		::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps
     ) const;
                             translateDbColumnToControlValue( );
     virtual sal_Bool        commitControlValueToDbColumn( bool _bPostReset );
 
+    virtual ::com::sun::star::uno::Any
+                            getControlValue( ) const;
     virtual void            doSetControlValue( const ::com::sun::star::uno::Any& _rValue );
 
     virtual sal_Bool		approveDbColumnType(sal_Int32 _nColumnType);
         @precond
             our own mutex is locked
     */
-    sal_Bool    impl_handleNewImageURL_lck( const ::rtl::OUString& _rURL, ValueChangeInstigator _eInstigator );
+    sal_Bool    impl_handleNewImageURL_lck( ValueChangeInstigator _eInstigator );
 
     /** updates the binary stream, created from loading the file which the given URL points to, into our
         bound field, or the control itself if there is no bound field

File forms/source/component/imgprod.cxx

 			// delete interfaces in temporary list
 			for( pCons = aTmp.First(); pCons; pCons = aTmp.Next() )
 				delete (::com::sun::star::uno::Reference< ::com::sun::star::awt::XImageConsumer > *) pCons;
+
+            if ( maDoneHdl.IsSet() )
+                maDoneHdl.Call( NULL );
 		}
 	}
 }

File forms/source/inc/FormComponent.hxx

                                 sal_Int32 _nValuePropertyExternalHandle
                             );
 
+    /** initializes the part of the class which is related to the control value.
+
+        <p>In opposite to ->initValueProperty, this method is to be used for value properties which are <em>not</em>
+        implemented by our aggregate, but by ourselves.</p>
+
+        <p>Certain functionality is not available when using own value properties. This includes binding to an external
+        value and external validation. (This is not a conceptual limit, but simply missing implementation.)</p>
+    */
+    void                    initOwnValueProperty(
+                                const ::rtl::OUString& i_rValuePropertyName
+                            );
+
     /** suspends listening at the value property
 
         <p>As long as this listening is suspended, changes in the value property will not be
     */
     void                    resumeValueListening( );
 
+    /** (to be) called when the value property changed
+
+        Normally, this is done automatically, since the value property is a property of our aggregate, and we're
+        a listener at this property.
+        However, in some cases the value property might not be an aggregate property, but a property of the
+        delegator instance. In this case, you'll need to call <code>onValuePropertyChange</code> whenever this
+        property changes.
+    */
+    void                    onValuePropertyChange( ControlModelLock& i_rControLock );
+
     /** starts listening at the aggregate, for changes in the given property
 
         <p>The OBoundControlModel automatically registers a multiplexer which listens for

File forms/source/inc/frm_strings.hxx

     FORMS_CONSTASCII_STRING( PROPERTY_SUBMIT_METHOD,            "SubmitMethod" );
     FORMS_CONSTASCII_STRING( PROPERTY_SUBMIT_ENCODING,          "SubmitEncoding" );
     FORMS_CONSTASCII_STRING( PROPERTY_IMAGE_URL,                "ImageURL" );
+    FORMS_CONSTASCII_STRING( PROPERTY_GRAPHIC,                  "Graphic" );
     FORMS_CONSTASCII_STRING( PROPERTY_IMAGE_POSITION,           "ImagePosition" );
     FORMS_CONSTASCII_STRING( PROPERTY_EMPTY_IS_NULL,            "ConvertEmptyToNull" );
     FORMS_CONSTASCII_STRING( PROPERTY_LISTSOURCETYPE,           "ListSourceType" );

File forms/source/inc/property.hrc

 #define PROPERTY_ID_WRITING_MODE        (PROPERTY_ID_START + 20)
 #define PROPERTY_ID_CONTEXT_WRITING_MODE    (PROPERTY_ID_START + 21)
 #define PROPERTY_ID_VERTICAL_ALIGN      (PROPERTY_ID_START + 22)
-    // free
+#define PROPERTY_ID_GRAPHIC             (PROPERTY_ID_START + 23)
     // free
     // free
     // free

File forms/source/misc/property.cxx

 	ADD_PROP_ASSIGNMENT(SUBMIT_METHOD);
 	ADD_PROP_ASSIGNMENT(SUBMIT_ENCODING);
 	ADD_PROP_ASSIGNMENT(IMAGE_URL);
+	ADD_PROP_ASSIGNMENT(GRAPHIC);
 	ADD_PROP_ASSIGNMENT(EMPTY_IS_NULL);
 	ADD_PROP_ASSIGNMENT(LISTSOURCETYPE);
 	ADD_PROP_ASSIGNMENT(LISTSOURCE);

File helpcontent2/prj/build.lst

 h2	helpcontent2\source\text\swriter\02                    nmake - all helpcontent2_swri_02 helpcontent2_aux NULL
 h2	helpcontent2\source\text\swriter\04                    nmake - all helpcontent2_swri_04 helpcontent2_aux NULL
 h2	helpcontent2\source\text\swriter\guide                 nmake - all helpcontent2_swri_guid helpcontent2_aux NULL
-h2	helpcontent2\util                                      nmake - all helpcontent2_ut helpcontent2_aux NULL
 h2	helpcontent2\util\sbasic                               nmake - all helpcontent2_ut_sbas helpcontent2_aux helpcontent2_sbas_guid helpcontent2_sbas_shar helpcontent2_sbas_shar_01 helpcontent2_sbas_shar_02 helpcontent2_scal helpcontent2_scal_00 helpcontent2_scal_01 helpcontent2_scal_02 helpcontent2_scal_04 helpcontent2_scal_05 helpcontent2_scal_guid helpcontent2_scha helpcontent2_scha_00 helpcontent2_scha_01 helpcontent2_scha_02 helpcontent2_scha_04 helpcontent2_sdra helpcontent2_sdra_00 helpcontent2_sdra_01 helpcontent2_sdra_04 helpcontent2_sdra_guid helpcontent2_shar helpcontent2_shar_00 helpcontent2_shar_01 helpcontent2_shar_02 helpcontent2_shar_04 helpcontent2_shar_05 helpcontent2_shar_07 helpcontent2_shar_auko helpcontent2_shar_aupi helpcontent2_shar_expl_data helpcontent2_shar_guid helpcontent2_shar_opti helpcontent2_simp helpcontent2_simp_00 helpcontent2_simp_01 helpcontent2_simp_02 helpcontent2_simp_04 helpcontent2_simp_guid helpcontent2_smat helpcontent2_smat_00 helpcontent2_smat_01 helpcontent2_smat_02 helpcontent2_smat_04 helpcontent2_smat_guid helpcontent2_swri helpcontent2_swri_00 helpcontent2_swri_01 helpcontent2_swri_02 helpcontent2_swri_04 helpcontent2_swri_guid NULL
 h2	helpcontent2\util\schart                               nmake - all helpcontent2_ut_scha helpcontent2_aux helpcontent2_sbas_guid helpcontent2_sbas_shar helpcontent2_sbas_shar_01 helpcontent2_sbas_shar_02 helpcontent2_scal helpcontent2_scal_00 helpcontent2_scal_01 helpcontent2_scal_02 helpcontent2_scal_04 helpcontent2_scal_05 helpcontent2_scal_guid helpcontent2_scha helpcontent2_scha_00 helpcontent2_scha_01 helpcontent2_scha_02 helpcontent2_scha_04 helpcontent2_sdra helpcontent2_sdra_00 helpcontent2_sdra_01 helpcontent2_sdra_04 helpcontent2_sdra_guid helpcontent2_shar helpcontent2_shar_00 helpcontent2_shar_01 helpcontent2_shar_02 helpcontent2_shar_04 helpcontent2_shar_05 helpcontent2_shar_07 helpcontent2_shar_auko helpcontent2_shar_aupi helpcontent2_shar_expl_data helpcontent2_shar_guid helpcontent2_shar_opti helpcontent2_simp helpcontent2_simp_00 helpcontent2_simp_01 helpcontent2_simp_02 helpcontent2_simp_04 helpcontent2_simp_guid helpcontent2_smat helpcontent2_smat_00 helpcontent2_smat_01 helpcontent2_smat_02 helpcontent2_smat_04 helpcontent2_smat_guid helpcontent2_swri helpcontent2_swri_00 helpcontent2_swri_01 helpcontent2_swri_02 helpcontent2_swri_04 helpcontent2_swri_guid NULL
 h2	helpcontent2\util\scalc                                nmake - all helpcontent2_ut_scal helpcontent2_aux helpcontent2_sbas_guid helpcontent2_sbas_shar helpcontent2_sbas_shar_01 helpcontent2_sbas_shar_02 helpcontent2_scal helpcontent2_scal_00 helpcontent2_scal_01 helpcontent2_scal_02 helpcontent2_scal_04 helpcontent2_scal_05 helpcontent2_scal_guid helpcontent2_scha helpcontent2_scha_00 helpcontent2_scha_01 helpcontent2_scha_02 helpcontent2_scha_04 helpcontent2_sdra helpcontent2_sdra_00 helpcontent2_sdra_01 helpcontent2_sdra_04 helpcontent2_sdra_guid helpcontent2_shar helpcontent2_shar_00 helpcontent2_shar_01 helpcontent2_shar_02 helpcontent2_shar_04 helpcontent2_shar_05 helpcontent2_shar_07 helpcontent2_shar_auko helpcontent2_shar_aupi helpcontent2_shar_expl_data helpcontent2_shar_guid helpcontent2_shar_opti helpcontent2_simp helpcontent2_simp_00 helpcontent2_simp_01 helpcontent2_simp_02 helpcontent2_simp_04 helpcontent2_simp_guid helpcontent2_smat helpcontent2_smat_00 helpcontent2_smat_01 helpcontent2_smat_02 helpcontent2_smat_04 helpcontent2_smat_guid helpcontent2_swri helpcontent2_swri_00 helpcontent2_swri_01 helpcontent2_swri_02 helpcontent2_swri_04 helpcontent2_swri_guid NULL

File helpcontent2/prj/d.lst

 ..\%__SRC%\bin\simpress_*.zip %_DEST%\pck%_EXT%
 ..\%__SRC%\bin\smath_*.zip %_DEST%\pck%_EXT%
 ..\%__SRC%\bin\swriter_*.zip %_DEST%\pck%_EXT%
-
-..\%__SRC%\bin\helpxsl.zip %_DEST%\pck%_EXT%\helpxsl.zip

File helpcontent2/source/auxiliary/embed.xsl

-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-<xsl:output indent="yes" method="xml"/>
-
-<!-- SPECIFY YOUR FILE SYSTEM ROOT PATH TO THE HELP FILES -->
-<xsl:param name="fsroot" select="'file:///handbuch/WORKBENCH/helpcontent2/source/'"/>
-
-<!--
-######################################################
-All others
-######################################################
--->
-<xsl:template match="/">
-	<xsl:apply-templates/>
-</xsl:template>
-
-<xsl:template match="*|@*|comment()|processing-instruction()|text()">
-  <xsl:copy>
-    <xsl:apply-templates select="*|@*|comment()|processing-instruction()|text()"/>
-  </xsl:copy>
-</xsl:template>
-
-<xsl:template match="*|@*|comment()|processing-instruction()|text()" mode="embedded">
-  <xsl:copy>
-    <xsl:apply-templates select="*|@*|comment()|processing-instruction()|text()" mode="embedded"/>
-  </xsl:copy>
-</xsl:template>
-
-<xsl:template match="bookmark" mode="embedded" />
-<xsl:template match="ahelp" mode="embedded">
-	<xsl:apply-templates mode="embedded"/>
-</xsl:template>
-
-<xsl:template match="paragraph[@role='heading']">
-    <title>
-        <xsl:apply-templates/>
-    </title>
-</xsl:template>
-
-<xsl:template match="paragraph[@role=*]">
-    <paragraph>
-        <xsl:apply-templates/>
-    </paragraph>
-</xsl:template>
-
-<xsl:template match="sort">
-    <xsl:apply-templates/>
-</xsl:template>
-
-