Kaydet (Commit) 02ff95fc authored tarafından Ivo Hinkelmann's avatar Ivo Hinkelmann

CWS-TOOLING: integrate CWS hb21_DEV300

2009-03-24 17:48:22 +0100 hbrinkm  r269985 : #i100449# OutWW8TableDefinition: nSz sums the widths of columns. nTblOffset is added to the current width for every cellx.
2009-03-24 16:28:31 +0100 mav  r269966 : #i100505# fix the wrapper ole-handler
üst 7bd3cbaa
......@@ -502,7 +502,17 @@ void DocumentHolder::InPlaceDeactivate(void)
m_xLayoutManager->setVisible(false);
if (NULL!=m_pIOleIPSite)
{
// The following workaround should let the object be stored in case of inplace editing
// CComPtr< IOleClientSite > pClientSite;
//
// m_pIOleIPSite->QueryInterface(
// IID_IOleClientSite, (void**)&pClientSite );
// if ( pClientSite )
// pClientSite->SaveObject();
m_pIOleIPSite->OnInPlaceDeactivate();
}
if(m_pIOleIPFrame) m_pIOleIPFrame->Release(); m_pIOleIPFrame = 0;
if(m_pIOleIPUIWindow) m_pIOleIPUIWindow->Release(); m_pIOleIPUIWindow = 0;
......@@ -512,7 +522,9 @@ void DocumentHolder::InPlaceDeactivate(void)
{
LockedEmbedDocument_Impl aDocLock = m_xOleAccess->GetEmbedDocument();
if ( aDocLock.GetEmbedDocument() )
{
aDocLock.GetEmbedDocument()->SaveObject();
}
}
return;
......
......@@ -159,6 +159,11 @@ STDMETHODIMP EmbedDocument_Impl::DoVerb(
if ( m_bIsInVerbHandling )
return OLEOBJ_S_CANNOT_DOVERB_NOW;
// an object can not handle any Verbs in Hands off mode
if ( m_pMasterStorage == NULL || m_pOwnStream == NULL )
return OLE_E_CANT_BINDTOSOURCE;
BooleanGuard_Impl aGuard( m_bIsInVerbHandling );
if ( iVerb == OLEIVERB_PRIMARY )
......@@ -260,8 +265,9 @@ STDMETHODIMP EmbedDocument_Impl::EnumVerbs( IEnumOLEVERB ** /*ppEnumOleVerb*/ )
STDMETHODIMP EmbedDocument_Impl::Update()
{
HRESULT hr = CACHE_E_NOCACHE_UPDATED;
return hr;
return S_OK;
// HRESULT hr = CACHE_E_NOCACHE_UPDATED;
// return hr;
}
STDMETHODIMP EmbedDocument_Impl::IsUpToDate()
......
......@@ -146,31 +146,46 @@ STDMETHODIMP_(ULONG) OleWrapperAdviseSink::Release()
STDMETHODIMP_(void) OleWrapperAdviseSink::OnDataChange( LPFORMATETC pFetc, LPSTGMEDIUM pMedium )
{
if ( m_pListener )
{
WRITEDEBUGINFO( "OleWrapperAdviseSink::OnDataChange():" );
m_pListener->OnDataChange( pFetc, pMedium );
}
}
STDMETHODIMP_(void) OleWrapperAdviseSink::OnViewChange( DWORD dwAspect, LONG lindex )
{
if ( m_pListener )
{
WRITEDEBUGINFO( "OleWrapperAdviseSink::OnViewChange():" );
m_pListener->OnViewChange( dwAspect, lindex );
}
}
STDMETHODIMP_(void) OleWrapperAdviseSink::OnRename( LPMONIKER pMoniker )
{
if ( m_pListener )
{
WRITEDEBUGINFO( "OleWrapperAdviseSink::OnRename():" );
m_pListener->OnRename( pMoniker );
}
}
STDMETHODIMP_(void) OleWrapperAdviseSink::OnSave(void)
{
if ( m_pListener )
{
WRITEDEBUGINFO( "OleWrapperAdviseSink::OnSave():" );
m_pListener->OnSave();
}
}
STDMETHODIMP_(void) OleWrapperAdviseSink::OnClose(void)
{
if ( m_pListener )
{
WRITEDEBUGINFO( "OleWrapperAdviseSink::OnClose():" );
m_pListener->OnClose();
}
if ( m_bHandleClosed )
m_bClosed = TRUE;
......
......@@ -82,6 +82,7 @@ public:
FORMATETC* GetFormatEtc() { return m_pFormatEtc; }
DWORD GetAspect() { return m_nAspect; }
ComSmart< IAdviseSink >& GetOrigAdvise() { return m_pListener; }
void DisconnectOrigAdvise() { m_pListener = NULL; }
void SetClosed() { m_bClosed = TRUE; }
void UnsetClosed() { m_bClosed = FALSE; }
......
......@@ -59,29 +59,44 @@ static ULONG g_nLock = 0;
namespace {
void FillCharFromInt( int nValue, char* pBuf, int nLen )
{
int nInd = 0;
while( nInd < nLen )
{
char nSign = ( nValue / ( 1 << ( ( nLen - nInd ) * 4 ) ) ) % 16;
if ( nSign >= 0 && nSign <= 9 )
pBuf[nInd] = nSign + '0';
else if ( nSign >= 10 && nSign <= 15 )
pBuf[nInd] = nSign - 10 + 'a';
nInd++;
}
}
int GetStringFromClassID( const GUID& guid, char* pBuf, int nLen )
{
if ( nLen < 27 )
// is not allowed to insert
if ( nLen < 38 )
return 0;
int nResult = sprintf( pBuf,
"{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
guid.Data1,
guid.Data2,
guid.Data3,
guid.Data4[0],
guid.Data4[1],
guid.Data4[2],
guid.Data4[3],
guid.Data4[4],
guid.Data4[5],
guid.Data4[6],
guid.Data4[7] );
if ( nResult && nResult < nLen )
return ++nResult;
return 0;
pBuf[0] = '{';
FillCharFromInt( guid.Data1, &pBuf[1], 8 );
pBuf[9] = '-';
FillCharFromInt( guid.Data2, &pBuf[10], 4 );
pBuf[14] = '-';
FillCharFromInt( guid.Data3, &pBuf[15], 4 );
pBuf[19] = '-';
int nInd = 0;
for ( nInd = 0; nInd < 2 ; nInd++ )
FillCharFromInt( guid.Data4[nInd], &pBuf[20 + 2*nInd], 2 );
pBuf[24] = '-';
for ( nInd = 2; nInd < 8 ; nInd++ )
FillCharFromInt( guid.Data4[nInd], &pBuf[20 + 1 + 2*nInd], 2 );
pBuf[37] = '}';
return 38;
}
HRESULT WriteLibraryToRegistry( char* pLibrary, DWORD nLen )
......@@ -90,21 +105,17 @@ namespace {
if ( pLibrary && nLen )
{
HKEY hKey = NULL;
char* pPrefix = "Software\\Classes\\CLSID\\";
char* pPostfix = "\\InprocHandler32";
hRes = S_OK;
for ( int nInd = 0; nInd < SUPPORTED_FACTORIES_NUM; nInd++ )
{
char pSubKey[513];
char pCLSID[64];
int nGuidLen = GetStringFromClassID( *guidList[nInd], pCLSID, 64 );
char* pSubKey = "Software\\Classes\\CLSID\\.....................................\\InprocHandler32";
int nGuidLen = GetStringFromClassID( *guidList[nInd], &pSubKey[23], 38 );
BOOL bLocalSuccess = FALSE;
if ( nGuidLen && nGuidLen < 64 )
if ( nGuidLen && nGuidLen == 38 )
{
pCLSID[nGuidLen] = 0;
sprintf( pSubKey, "%s%s%s", pPrefix, pCLSID, pPostfix );
if ( ERROR_SUCCESS == RegOpenKey( HKEY_LOCAL_MACHINE, pSubKey, &hKey ) )
{
if ( ERROR_SUCCESS == RegSetValueEx( hKey, "", 0, REG_SZ, (const BYTE*)pLibrary, nLen ) )
......
......@@ -93,6 +93,7 @@ class InprocEmbedDocument_Impl : public InprocCountedObject_Impl
ComSmart< IStorage > m_pStorage;
ComSmart< IOleClientSite > m_pClientSite;
ComSmart< IOleContainer > m_pOleContainer;
ULONG m_nCallsOnStack;
......@@ -148,7 +149,7 @@ public:
{}
HRESULT Init();
void SetFileName( LPCOLESTR pszFileName );
void SetName( LPCOLESTR pszNameFromOutside, wchar_t*& pOwnName );
BOOL CheckDefHandler();
ComSmart< IUnknown >& GetDefHandler() { return m_pDefHandler; }
......
......@@ -46,6 +46,8 @@ use_shl_versions=
LIBTARGET=NO
USE_DEFFILE=YES
LIBCMT=libcmt.lib
UWINAPILIB=
# --- Files -------------------------------------
......
......@@ -36,8 +36,24 @@
#ifndef _INPROCSERV_SMARTPOINTER_HXX_
#define _INPROCSERV_SMARTPOINTER_HXX_
// #define OWNDEBUG
#ifdef OWNDEBUG
#define WRITEDEBUGINFOINTERN( x ) WriteDebugInfo( (DWORD)this, x, sizeof( x ) )
#define WRITEDEBUGINFO( x ) WRITEDEBUGINFOINTERN( x ":" MY_STRING_LINE "\n" )
#define TO_STRING( x ) #x
#define MACRO_VALUE_TO_STRING( x ) TO_STRING( x )
#define MY_STRING_LINE MACRO_VALUE_TO_STRING( __LINE__ )
#else
#define WRITEDEBUGINFO( x ) void()
#define MY_STRING_LINE
#endif
namespace inprocserv{
void WriteDebugInfo( DWORD pThis, char* pString, DWORD nToWrite );
template< class T > class ComSmart
{
T* m_pInterface;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment