summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens-Heiner Rechtien <hr@openoffice.org>2003-03-25 13:05:43 +0000
committerJens-Heiner Rechtien <hr@openoffice.org>2003-03-25 13:05:43 +0000
commitec2f352b8fbd698d74979e1a031163e3c9bc90b6 (patch)
treecaf10e3220368369ca523e524b450a0f6466c350
parent2e412b3f0d73d337573e388d9854211dd3dee2d2 (diff)
MWS_SRX644: migrate branch mws_srx644 -> HEAD
-rw-r--r--dtrans/source/X11/X11_selection.cxx544
-rw-r--r--dtrans/source/X11/X11_selection.hxx27
-rw-r--r--dtrans/source/X11/bmp.cxx764
-rw-r--r--dtrans/source/X11/bmp.hxx142
-rw-r--r--dtrans/source/X11/dtransX11.xml2
-rw-r--r--dtrans/source/X11/makefile.mk7
-rw-r--r--dtrans/source/aqua/dtransaqua.xml103
-rw-r--r--dtrans/source/cnttype/mcnttype.hxx8
-rw-r--r--dtrans/source/win32/clipb/APNDataObject.hxx127
-rw-r--r--dtrans/source/win32/clipb/makefile.mk6
-rw-r--r--dtrans/source/win32/dnd/makefile.mk6
-rw-r--r--dtrans/source/win32/dtobj/DOTransferable.cxx10
-rw-r--r--dtrans/source/win32/dtobj/DTransHelper.cxx6
-rw-r--r--dtrans/source/win32/dtobj/TxtCnvtHlp.cxx16
-rw-r--r--dtrans/source/win32/dtobj/makefile.mk6
-rw-r--r--dtrans/source/win32/ftransl/ftransl.cxx436
-rw-r--r--dtrans/source/win32/ftransl/ftransl.hxx59
-rw-r--r--dtrans/source/win32/workbench/test_wincb.cxx342
-rw-r--r--dtrans/source/win32/workbench/testmarshal.cxx349
-rw-r--r--dtrans/test/win32/dnd/atlwindow.cxx82
-rw-r--r--dtrans/test/win32/dnd/atlwindow.hxx31
-rw-r--r--dtrans/test/win32/dnd/makefile.mk6
-rw-r--r--dtrans/test/win32/dnd/targetlistener.cxx27
23 files changed, 2198 insertions, 908 deletions
diff --git a/dtrans/source/X11/X11_selection.cxx b/dtrans/source/X11/X11_selection.cxx
index 2ffe69031cc5..732fda68bc2a 100644
--- a/dtrans/source/X11/X11_selection.cxx
+++ b/dtrans/source/X11/X11_selection.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: X11_selection.cxx,v $
*
- * $Revision: 1.58 $
+ * $Revision: 1.59 $
*
- * last change: $Author: pl $ $Date: 2002-12-10 14:48:18 $
+ * last change: $Author: hr $ $Date: 2003-03-25 14:05:28 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -62,11 +62,13 @@
#include <unistd.h>
#include <stdio.h>
#include <string.h>
+#include <sys/time.h>
#include <X11/Xatom.h>
#include <X11/keysym.h>
#include <X11/Xlib.h>
+#include <X11/X.h>
#include <X11/Xutil.h>
-#ifdef LINUX
+#if defined(LINUX) || defined(NETBSD) || defined (FREEBSD)
#include <sys/poll.h>
#else
#include <poll.h>
@@ -79,6 +81,7 @@
#include <X11_clipboard.hxx>
#include <X11_transferable.hxx>
#include <X11_dndcontext.hxx>
+#include <bmp.hxx>
// pointer bitmaps
#include <copydata_curs.h>
@@ -178,10 +181,14 @@ static NativeTypeEntry aNativeConversionTab[] =
{ 0, "text/plain;charset=ksc5601.1992-0", "KSC5601.1992-0", 8 },
// eastern european encodings
{ 0, "text/plain;charset=koi8-r", "KOI8-R", 8 },
+ { 0, "text/plain;charset=koi8-u", "KOI8-U", 8 },
// String (== iso8859-1)
{ XA_STRING, "text/plain;charset=iso8859-1", "STRING", 8 },
// special for compound text
- { 0, "text/plain;charset=compound_text", "COMPOUND_TEXT", 8 }
+ { 0, "text/plain;charset=compound_text", "COMPOUND_TEXT", 8 },
+
+ // PIXMAP
+ { XA_PIXMAP, "image/bmp", "PIXMAP", 32 }
};
rtl_TextEncoding x11::getTextPlainEncoding( const OUString& rMimeType )
@@ -365,6 +372,12 @@ void SelectionManager::initialize( const Sequence< Any >& arguments ) throw (::c
m_xDisplayConnection->addEventHandler( Any(), this, ~0 );
}
+ if( !m_xBitmapConverter.is() )
+ {
+ if( arguments.getLength() > 2 )
+ arguments.getConstArray()[2] >>= m_xBitmapConverter;
+ }
+
if( ! m_pDisplay )
{
OUString aUDisplay;
@@ -392,6 +405,7 @@ void SelectionManager::initialize( const Sequence< Any >& arguments ) throw (::c
m_nTEXTAtom = getAtom( OUString::createFromAscii( "TEXT" ) );
m_nINCRAtom = getAtom( OUString::createFromAscii( "INCR" ) );
m_nCOMPOUNDAtom = getAtom( OUString::createFromAscii( "COMPOUND_TEXT" ) );
+ m_nMULTIPLEAtom = getAtom( OUString::createFromAscii( "MULTIPLE" ) );
m_nUTF16Atom = getAtom( OUString::createFromAscii( "ISO10646-1" ) );
// m_nUTF16Atom = getAtom( OUString::createFromAscii( "text/plain;charset=ISO-10646-UCS-2" ) );
@@ -757,12 +771,24 @@ bool SelectionManager::requestOwnership( Atom selection )
bSuccess ? "acquired" : "failed to acquire",
OUStringToOString( getString( selection ), RTL_TEXTENCODING_ISO_8859_1 ).getStr() );
#endif
- m_aSelections[ selection ]->m_bOwner = bSuccess;
+ Selection* pSel = m_aSelections[ selection ];
+ pSel->m_bOwner = bSuccess;
+ delete pSel->m_pPixmap;
+ pSel->m_pPixmap = NULL;
}
#ifdef DEBUG
else
fprintf( stderr, "no adaptor for selection %s\n",
OUStringToOString( getString( selection ), RTL_TEXTENCODING_ISO_8859_1 ).getStr() );
+
+ if( pAdaptor->getTransferable().is() )
+ {
+ Sequence< DataFlavor > aTypes = pAdaptor->getTransferable()->getTransferDataFlavors();
+ for( int i = 0; i < aTypes.getLength(); i++ )
+ {
+ fprintf( stderr, " %s\n", OUStringToOString( aTypes.getConstArray()[i].MimeType, RTL_TEXTENCODING_ISO_8859_1 ).getStr() );
+ }
+ }
#endif
}
return bSuccess;
@@ -790,6 +816,19 @@ void SelectionManager::convertTypeToNative( const OUString& rType, Atom selectio
rConversions.push_front( pTab[i].nAtom );
else
rConversions.push_back( pTab[i].nAtom );
+ if( pTab[i].nFormat == XA_PIXMAP )
+ {
+ if( bPushFront )
+ {
+ rConversions.push_front( XA_VISUALID );
+ rConversions.push_front( XA_COLORMAP );
+ }
+ else
+ {
+ rConversions.push_back( XA_VISUALID );
+ rConversions.push_back( XA_COLORMAP );
+ }
+ }
}
}
if( ! rFormat )
@@ -827,6 +866,8 @@ void SelectionManager::getNativeTypeList( const Sequence< DataFlavor >& rTypes,
}
convertTypeToNative( OUString::createFromAscii( "text/plain;charset=utf-8" ), targetselection, nFormat, rOutTypeList, true );
}
+ if( targetselection != m_nXdndSelection )
+ rOutTypeList.push_back( m_nMULTIPLEAtom );
}
// ------------------------------------------------------------------------
@@ -887,9 +928,16 @@ bool SelectionManager::getPasteData( Atom selection, Atom type, Sequence< sal_In
return false;
}
+ // ICCCM recommends to destroy property before convert request unless
+ // parameters are transported; we do only in case of MULTIPLE,
+ // so destroy property unless target is MULTIPLE
+ if( type != m_nMULTIPLEAtom )
+ XDeleteProperty( m_pDisplay, m_aWindow, selection );
+
XConvertSelection( m_pDisplay, selection, type, selection, m_aWindow, selection == m_nXdndSelection ? m_nDropTime : CurrentTime );
- it->second->m_eState = Selection::WaitingForResponse;
- it->second->m_aData = Sequence< sal_Int8 >();
+ it->second->m_eState = Selection::WaitingForResponse;
+ it->second->m_aRequestedType = type;
+ it->second->m_aData = Sequence< sal_Int8 >();
it->second->m_aDataArrived.reset();
// really start the request; if we don't flush the
// queue the request won't leave it because there are no more
@@ -1038,6 +1086,96 @@ bool SelectionManager::getPasteData( Atom selection, const ::rtl::OUString& rTyp
}
}
}
+ else if( rType.equalsAsciiL( "image/bmp", 9 ) )
+ {
+ Pixmap aPixmap = None;
+ Colormap aColormap = None;
+
+ // prepare property for MULTIPLE request
+ Sequence< sal_Int8 > aData;
+ Atom pTypes[4] = { XA_PIXMAP, XA_PIXMAP,
+ XA_COLORMAP, XA_COLORMAP };
+ {
+ MutexGuard aGuard(m_aMutex);
+
+ XChangeProperty( m_pDisplay,
+ m_aWindow,
+ selection,
+ XA_ATOM,
+ 32,
+ PropModeReplace,
+ (unsigned char*)pTypes,
+ 4 );
+ }
+
+ // try MULTIPLE request
+ if( getPasteData( selection, m_nMULTIPLEAtom, aData ) )
+ {
+ Atom* pReturnedTypes = (Atom*)aData.getArray();
+ if( pReturnedTypes[0] == XA_PIXMAP && pReturnedTypes[1] == XA_PIXMAP )
+ {
+ MutexGuard aGuard(m_aMutex);
+
+ Atom type = None;
+ int format = 0;
+ unsigned long nItems = 0;
+ unsigned long nBytes = 0;
+ unsigned char* pReturn = NULL;
+ XGetWindowProperty( m_pDisplay, m_aWindow, XA_PIXMAP, 0, 1, True, XA_PIXMAP, &type, &format, &nItems, &nBytes, &pReturn );
+ if( pReturn )
+ {
+ if( type == XA_PIXMAP )
+ aPixmap = *(Pixmap*)pReturn;
+ XFree( pReturn );
+ pReturn = NULL;
+ if( pReturnedTypes[2] == XA_COLORMAP && pReturnedTypes[3] == XA_COLORMAP )
+ {
+ XGetWindowProperty( m_pDisplay, m_aWindow, XA_COLORMAP, 0, 1, True, XA_COLORMAP, &type, &format, &nItems, &nBytes, &pReturn );
+ if( pReturn )
+ {
+ if( type == XA_COLORMAP )
+ aColormap = *(Colormap*)pReturn;
+ XFree( pReturn );
+ }
+ }
+ }
+#ifdef DEBUG
+ else
+ {
+ fprintf( stderr, "could not get PIXMAP property: type=%s, format=%d, items=%d, bytes=%d, ret=0x%p\n", OUStringToOString( getString( type ), RTL_TEXTENCODING_ISO_8859_1 ).getStr(), format, nItems, nBytes, pReturn );
+ }
+#endif
+ }
+ }
+
+ if( aPixmap == None )
+ {
+ // perhaps two normal requests will work
+ if( getPasteData( selection, XA_PIXMAP, aData ) )
+ {
+ aPixmap = *(Pixmap*)aData.getArray();
+ if( aColormap == None && getPasteData( selection, XA_COLORMAP, aData ) )
+ aColormap = *(Colormap*)aData.getArray();
+ }
+ }
+
+ // convert data if possible
+ if( aPixmap != None )
+ {
+ MutexGuard aGuard(m_aMutex);
+
+ sal_Int32 nOutSize = 0;
+ sal_uInt8* pBytes = X11_getBmpFromPixmap( m_pDisplay, aPixmap, aColormap, nOutSize );
+ if( pBytes && nOutSize )
+ {
+ rData = Sequence< sal_Int8 >( nOutSize );
+ memcpy( rData.getArray(), pBytes, nOutSize );
+ X11_freeBmp( pBytes );
+ bSuccess = true;
+ }
+ }
+ }
+
if( ! bSuccess )
{
::std::list< Atom > aTypes;
@@ -1261,6 +1399,153 @@ bool SelectionManager::getPasteDataTypes( Atom selection, Sequence< DataFlavor >
// ------------------------------------------------------------------------
+PixmapHolder* SelectionManager::getPixmapHolder( Atom selection )
+{
+ std::hash_map< Atom, Selection* >::const_iterator it = m_aSelections.find( selection );
+ if( it == m_aSelections.end() )
+ return NULL;
+ if( ! it->second->m_pPixmap )
+ it->second->m_pPixmap = new PixmapHolder( m_pDisplay );
+ return it->second->m_pPixmap;
+}
+
+bool SelectionManager::sendData( SelectionAdaptor* pAdaptor,
+ Window requestor,
+ Atom target,
+ Atom property,
+ Atom selection )
+{
+ ResettableMutexGuard aGuard( m_aMutex );
+
+ // handle targets related to image/bmp
+ if( target == XA_COLORMAP || target == XA_PIXMAP || target == XA_BITMAP || target == XA_VISUALID )
+ {
+ PixmapHolder* pPixmap = getPixmapHolder( selection );
+ if( ! pPixmap ) return false;
+ XID nValue = None;
+
+ // handle colormap request
+ if( target == XA_COLORMAP )
+ nValue = (XID)pPixmap->getColormap();
+ else if( target == XA_VISUALID )
+ nValue = (XID)pPixmap->getVisualID();
+ else if( target == XA_PIXMAP || target == XA_BITMAP )
+ {
+ nValue = (XID)pPixmap->getPixmap();
+ if( nValue == None )
+ {
+ // first conversion
+ Sequence< sal_Int8 > aData;
+ int nFormat;
+ aGuard.clear();
+ bool bConverted = convertData( pAdaptor->getTransferable(), target, selection, nFormat, aData );
+ aGuard.reset();
+ if( bConverted )
+ {
+ // conversion succeeded, so aData contains image/bmp now
+ if( pPixmap->needsConversion( (const sal_uInt8*)aData.getConstArray() )
+ && m_xBitmapConverter.is() )
+ {
+#ifdef DEBUG
+ fprintf( stderr, "trying bitmap conversion\n" );
+#endif
+ Reference<XBitmap> xBM( new BmpTransporter( aData ) );
+ Sequence<Any> aArgs(2), aOutArgs;
+ Sequence<sal_Int16> aOutIndex;
+ aArgs.getArray()[0] = makeAny( xBM );
+ aArgs.getArray()[1] = makeAny( (sal_uInt16)pPixmap->getDepth() );
+ try
+ {
+ aGuard.clear();
+ Any aResult =
+ m_xBitmapConverter->invoke( OUString::createFromAscii( "convert-bitmap-depth" ),
+ aArgs, aOutIndex, aOutArgs );
+ aGuard.reset();
+ if( aResult >>= xBM )
+ aData = xBM->getDIB();
+ }
+ catch(...)
+ {
+#ifdef DEBUG
+ fprintf( stderr, "exception in bitmap converter\n" );
+#endif
+ }
+ }
+ nValue = (XID)pPixmap->setBitmapData( (const sal_uInt8*)aData.getConstArray() );
+ }
+ if( nValue == None )
+ return false;
+ }
+ if( target == XA_BITMAP )
+ nValue = (XID)pPixmap->getBitmap();
+ }
+
+ XChangeProperty( m_pDisplay,
+ requestor,
+ property,
+ target,
+ 32,
+ PropModeReplace,
+ (const unsigned char*)&nValue,
+ 1);
+ return true;
+ }
+
+ /*
+ * special target TEXT allows us to transfer
+ * the data in an encoding of our choice
+ * COMPOUND_TEXT will work with most applications
+ */
+ if( target == m_nTEXTAtom )
+ target = m_nCOMPOUNDAtom;
+
+ Sequence< sal_Int8 > aData;
+ int nFormat;
+ aGuard.clear();
+ bool bConverted = convertData( pAdaptor->getTransferable(), target, selection, nFormat, aData );
+ aGuard.reset();
+ if( bConverted )
+ {
+ // conversion succeeded
+ if( aData.getLength() > INCR_MIN_SIZE )
+ {
+#ifdef DEBUG
+ fprintf( stderr, "using INCR protocol\n" );
+#endif
+ // use incr protocol
+ int nBufferPos = 0;
+ int nMinSize = INCR_MIN_SIZE;
+ XChangeProperty( m_pDisplay, requestor, property,
+ m_nINCRAtom, 32, PropModeReplace, (unsigned char*)&nMinSize, 1 );
+ XSelectInput( m_pDisplay, requestor, PropertyChangeMask );
+ IncrementalTransfer aTransfer( aData,
+ requestor,
+ property,
+ target,
+ nFormat
+ );
+ m_aIncrementals[ requestor ].push_back( aTransfer );
+ }
+ else
+ XChangeProperty( m_pDisplay,
+ requestor,
+ property,
+ target,
+ nFormat,
+ PropModeReplace,
+ (const unsigned char*)aData.getConstArray(),
+ aData.getLength()/(nFormat/8) );
+ }
+#ifdef DEBUG
+ else
+ fprintf( stderr, "convertData failed for type: %s \n",
+ OUStringToOString( convertTypeFromNative( target, selection, nFormat ), RTL_TEXTENCODING_ISO_8859_1 ).getStr() );
+#endif
+ return bConverted;
+}
+
+// ------------------------------------------------------------------------
+
void SelectionManager::handleSelectionRequest( XSelectionRequestEvent& rRequest )
{
ResettableMutexGuard aGuard( m_aMutex );
@@ -1317,58 +1602,110 @@ void SelectionManager::handleSelectionRequest( XSelectionRequestEvent& rRequest
}
else
{
- /*
- * special target TEXT allows us to transfer
- * the data in an encoding of our choice
- * COMPOUND_TEXT will work with most applications
- */
- if( rRequest.target == m_nTEXTAtom )
- rRequest.target = m_nCOMPOUNDAtom;
-
- Sequence< sal_Int8 > aData;
- int nFormat;
- aGuard.clear();
- bool bConverted = convertData( pAdaptor->getTransferable(), rRequest.target, rRequest.selection, nFormat, aData );
- aGuard.reset();
- if( bConverted )
+ bool bEventSuccess = false;
+ if( rRequest.target == m_nMULTIPLEAtom )
{
- // conversion succeeded
- aNotify.xselection.target = rRequest.target;
- aNotify.xselection.property = rRequest.property;
- if( aData.getLength() > INCR_MIN_SIZE )
+ // get all targets
+ Atom nType = None;
+ int nFormat = 0;
+ unsigned long nItems = 0, nBytes = 0;
+ unsigned char* pData = NULL;
+
+ // get number of atoms
+ XGetWindowProperty( m_pDisplay,
+ rRequest.requestor,
+ rRequest.property,
+ 0, 0,
+ False,
+ AnyPropertyType,
+ &nType, &nFormat,
+ &nItems, &nBytes,
+ &pData );
+ if( nFormat == 32 && nBytes/4 )
{
+ if( pData ) // ?? should not happen
+ {
+ XFree( pData );
+ pData = NULL;
+ }
+ XGetWindowProperty( m_pDisplay,
+ rRequest.requestor,
+ rRequest.property,
+ 0, nBytes/4,
+ False,
+ nType,
+ &nType, &nFormat,
+ &nItems, &nBytes,
+ &pData );
+ if( pData && nItems )
+ {
+#ifdef DEBUG
+ fprintf( stderr, "found %d atoms in MULTIPLE request\n", nItems );
+#endif
+ bEventSuccess = true;
+ bool bResetAtoms = false;
+ Atom* pAtoms = (Atom*)pData;
+ aGuard.clear();
+ for( int i = 0; i < nItems; i += 2 )
+ {
+#ifdef DEBUG
+ fprintf( stderr, " %s => %s: ",
+ OUStringToOString( getString( pAtoms[i] ), RTL_TEXTENCODING_ISO_8859_1 ).getStr(),
+ OUStringToOString( getString( pAtoms[i+1] ), RTL_TEXTENCODING_ISO_8859_1 ).getStr() );
+#endif
+ bool bSuccess = sendData( pAdaptor, rRequest.requestor, pAtoms[i], pAtoms[i+1], rRequest.selection );
#ifdef DEBUG
- fprintf( stderr, "using INCR protocol\n" );
-#endif
- // use incr protocol
- int nBufferPos = 0;
- int nMinSize = INCR_MIN_SIZE;
- XChangeProperty( m_pDisplay, rRequest.requestor, rRequest.property,
- m_nINCRAtom, 32, PropModeReplace, (unsigned char*)&nMinSize, 1 );
- XSelectInput( m_pDisplay, rRequest.requestor, PropertyChangeMask );
- IncrementalTransfer aTransfer( aData,
- rRequest.requestor,
- rRequest.property,
- rRequest.target,
- nFormat
- );
- m_aIncrementals[ rRequest.requestor ].push_back( aTransfer );
+ fprintf( stderr, "%s\n", bSuccess ? "succeeded" : "failed" );
+#endif
+ if( ! bSuccess )
+ {
+ pAtoms[i] = None;
+ bResetAtoms = true;
+ }
+ }
+ aGuard.reset();
+ if( bResetAtoms )
+ XChangeProperty( m_pDisplay,
+ rRequest.requestor,
+ rRequest.property,
+ XA_ATOM,
+ 32,
+ PropModeReplace,
+ pData,
+ nBytes/4 );
+ }
+ if( pData )
+ XFree( pData );
}
+#ifdef DEBUG
else
- XChangeProperty( m_pDisplay,
- rRequest.requestor,
- rRequest.property,
- rRequest.target,
- nFormat,
- PropModeReplace,
- (const unsigned char*)aData.getConstArray(),
- aData.getLength()/(nFormat/8) );
+ {
+ fprintf( stderr, "could not get type list from \"%s\" of type \"%s\" on requestor 0x%x, requestor has properties:",
+ OUStringToOString( getString( rRequest.property ), RTL_TEXTENCODING_ISO_8859_1 ).getStr(),
+ OUStringToOString( getString( nType ), RTL_TEXTENCODING_ISO_8859_1 ).getStr(),
+ rRequest.requestor );
+ int nProps = 0;
+ Atom* pProps = XListProperties( m_pDisplay, rRequest.requestor, &nProps );
+ if( pProps )
+ {
+ for( int i = 0; i < nProps; i++ )
+ fprintf( stderr, " \"%s\"", OUStringToOString( getString( pProps[i]), RTL_TEXTENCODING_ISO_8859_1 ).getStr() );
+ XFree( pProps );
+ }
+ }
+#endif
}
-#ifdef DEBUG
else
- fprintf( stderr, "convertData failed for type: %s \n",
- OUStringToOString( convertTypeFromNative( rRequest.target, rRequest.selection, nFormat ), RTL_TEXTENCODING_ISO_8859_1 ).getStr() );
-#endif
+ {
+ aGuard.clear();
+ bEventSuccess = sendData( pAdaptor, rRequest.requestor, rRequest.target, rRequest.property, rRequest.selection );
+ aGuard.reset();
+ }
+ if( bEventSuccess )
+ {
+ aNotify.xselection.target = rRequest.target;
+ aNotify.xselection.property = rRequest.property;
+ }
}
}
XSendEvent( m_pDisplay, rRequest.requestor, False, 0, &aNotify );
@@ -1420,6 +1757,12 @@ void SelectionManager::handleReceivePropertyNotify( XPropertyEvent& rNotify )
)
)
{
+ // MULTIPLE requests are only complete after selection notify
+ if( it->second->m_aRequestedType == m_nMULTIPLEAtom &&
+ ( it->second->m_eState == Selection::WaitingForResponse ||
+ it->second->m_eState == Selection::WaitingForData ) )
+ return;
+
Atom nType = None;
int nFormat = 0;
unsigned long nItems = 0, nBytes = 0;
@@ -1533,25 +1876,20 @@ void SelectionManager::handleSendPropertyNotify( XPropertyEvent& rNotify )
bool bDone = false;
if( inc_it->m_aProperty == rNotify.atom )
{
- if( rNotify.state != PropertyDelete )
+ int nBytes = inc_it->m_aData.getLength() - inc_it->m_nBufferPos;
+ nBytes = nBytes > INCR_MIN_SIZE ? INCR_MIN_SIZE : nBytes;
+ XChangeProperty(
+ m_pDisplay,
+ inc_it->m_aRequestor,
+ inc_it->m_aProperty,
+ inc_it->m_aTarget,
+ inc_it->m_nFormat,
+ PropModeReplace,
+ (const unsigned char*)inc_it->m_aData.getConstArray()+inc_it->m_nBufferPos,
+ nBytes/(inc_it->m_nFormat/8) );
+ inc_it->m_nBufferPos += nBytes;
+ if( nBytes == 0 )
bDone = true;
- else
- {
- int nBytes = inc_it->m_aData.getLength() - inc_it->m_nBufferPos;
- nBytes = nBytes > INCR_MIN_SIZE ? INCR_MIN_SIZE : nBytes;
- XChangeProperty(
- m_pDisplay,
- inc_it->m_aRequestor,
- inc_it->m_aProperty,
- inc_it->m_aTarget,
- inc_it->m_nFormat,
- PropModeReplace,
- (const unsigned char*)inc_it->m_aData.getConstArray()+inc_it->m_nBufferPos,
- nBytes/(inc_it->m_nFormat/8) );
- inc_it->m_nBufferPos += nBytes;
- if( nBytes == 0 )
- bDone = true;
- }
}
else if( nCurrentTime - inc_it->m_nTransferStartTime > INCR_TIMEOUT )
bDone = true;
@@ -1595,10 +1933,47 @@ void SelectionManager::handleSelectionNotify( XSelectionEvent& rNotify )
( it->second->m_eState == Selection::WaitingForResponse ) ||
( it->second->m_eState == Selection::WaitingForData ) )
{
+ if( it->second->m_aRequestedType == m_nMULTIPLEAtom )
+ {
+ Atom nType = None;
+ int nFormat = 0;
+ unsigned long nItems = 0, nBytes = 0;
+ unsigned char* pData = NULL;
+
+ // get type and length
+ XGetWindowProperty( m_pDisplay,
+ rNotify.requestor,
+ rNotify.property,
+ 0, 256,
+ False,
+ AnyPropertyType,
+ &nType, &nFormat,
+ &nItems, &nBytes,
+ &pData );
+ if( nBytes ) // HUGE request !!!
+ {
+ if( pData )
+ XFree( pData );
+ XGetWindowProperty( m_pDisplay,
+ rNotify.requestor,
+ rNotify.property,
+ 0, 256+(nBytes+3)/4,
+ False,
+ AnyPropertyType,
+ &nType, &nFormat,
+ &nItems, &nBytes,
+ &pData );
+ }
+ it->second->m_eState = Selection::Inactive;
+ it->second->m_aData = Sequence< sal_Int8 >((sal_Int8*)pData, nFormat/8 * nItems );
+ it->second->m_aDataArrived.set();
+ if( pData )
+ XFree( pData );
+ }
// WaitingForData can actually happen; some
// applications (e.g. cmdtool on Solaris) first send
// a success and then cancel it. Weird !
- if( rNotify.property == None )
+ else if( rNotify.property == None )
{
// conversion failed, stop transfer
it->second->m_eState = Selection::Inactive;
@@ -1945,6 +2320,9 @@ void SelectionManager::sendDropPosition( bool bForce, Time eventTime )
{
ClearableMutexGuard aGuard(m_aMutex);
+ if( m_bDropSent )
+ return;
+
::std::hash_map< Window, DropTargetEntry >::const_iterator it =
m_aDropTargets.find( m_aDropWindow );
if( it != m_aDropTargets.end() )
@@ -3073,11 +3451,6 @@ void SelectionManager::dispatchEvent( int millisec )
}
}
}
- else
- {
- MutexGuard aGuard(m_aMutex);
- XFlush( m_pDisplay );
- }
}
// ------------------------------------------------------------------------
@@ -3091,18 +3464,21 @@ void SelectionManager::run( void* pThis )
SelectionManager* This = (SelectionManager*)pThis;
- time_t nLast = time( NULL );
- osl_yieldThread();
+ timeval aLast;
+ gettimeofday( &aLast, 0 );
+
while( osl_scheduleThread(This->m_aThread) )
{
- osl_yieldThread();
- This->dispatchEvent( 200 );
- time_t nNow = time( NULL );
- if( nNow - nLast > 0 )
+ This->dispatchEvent( 1000 );
+
+ timeval aNow;
+ gettimeofday( &aNow, 0 );
+
+ if( (aNow.tv_sec - aLast.tv_sec) > 0 )
{
ClearableMutexGuard aGuard(This->m_aMutex);
::std::list< SelectionAdaptor* > aChangeList;
- nLast = nNow;
+
for( ::std::hash_map< Atom, Selection* >::iterator it = This->m_aSelections.begin(); it != This->m_aSelections.end(); ++it )
{
if( it->first != This->m_nXdndSelection && ! it->second->m_bOwner )
@@ -3121,6 +3497,7 @@ void SelectionManager::run( void* pThis )
aChangeList.front()->fireContentsChanged();
aChangeList.pop_front();
}
+ aLast = aNow;
}
}
#ifdef DEBUG
@@ -3163,6 +3540,7 @@ void SelectionManager::deregisterHandler( Atom selection )
m_aSelections.find( selection );
if( it != m_aSelections.end() )
{
+ delete it->second->m_pPixmap;
delete it->second;
m_aSelections.erase( it );
}
diff --git a/dtrans/source/X11/X11_selection.hxx b/dtrans/source/X11/X11_selection.hxx
index cade8a91497a..a840ea99154b 100644
--- a/dtrans/source/X11/X11_selection.hxx
+++ b/dtrans/source/X11/X11_selection.hxx
@@ -2,9 +2,9 @@
*
* $RCSfile: X11_selection.hxx,v $
*
- * $Revision: 1.21 $
+ * $Revision: 1.22 $
*
- * last change: $Author: pl $ $Date: 2002-11-22 16:13:03 $
+ * last change: $Author: hr $ $Date: 2003-03-25 14:05:28 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -90,6 +90,10 @@
#include <com/sun/star/lang/XServiceInfo.hpp>
#endif
+#ifndef _COM_SUN_STAR_SCRIPT_XINVOCATION_HPP_
+#include <com/sun/star/script/XInvocation.hpp>
+#endif
+
#ifndef _OSL_THREAD_H_
#include <osl/thread.h>
#endif
@@ -115,6 +119,8 @@ using namespace ::com::sun::star::uno;
namespace x11 {
+ class PixmapHolder; // in bmp.hxx
+
// ------------------------------------------------------------------------
rtl_TextEncoding getTextPlainEncoding( const ::rtl::OUString& rMimeType );
@@ -251,27 +257,31 @@ namespace x11 {
SelectionAdaptor* m_pAdaptor;
Atom m_aAtom;
::osl::Condition m_aDataArrived;
- Sequence< sal_Int8 >
- m_aData;
+ Sequence< sal_Int8 > m_aData;
Sequence< ::com::sun::star::datatransfer::DataFlavor >
- m_aTypes;
+ m_aTypes;
Sequence< Atom > m_aNativeTypes;
// this is used for caching
// m_aTypes is invalid after 2 seconds
// m_aNativeTypes contains the corresponding original atom
+ Atom m_aRequestedType;
+ // m_aRequestedType is only valid while WaitingForResponse and WaitingFotData
int m_nLastTimestamp;
bool m_bHaveUTF16;
bool m_bHaveCompound;
bool m_bOwner;
Window m_aLastOwner;
+ PixmapHolder* m_pPixmap;
Selection() : m_eState( Inactive ),
m_pAdaptor( NULL ),
m_aAtom( None ),
+ m_aRequestedType( None ),
m_nLastTimestamp( 0 ),
m_bHaveUTF16( false ),
m_bOwner( false ),
- m_aLastOwner( None )
+ m_aLastOwner( None ),
+ m_pPixmap( NULL )
{}
};
@@ -305,6 +315,8 @@ namespace x11 {
Window m_aWindow;
Reference< ::com::sun::star::awt::XDisplayConnection >
m_xDisplayConnection;
+ Reference< com::sun::star::script::XInvocation >
+ m_xBitmapConverter;
// members used for Xdnd
@@ -379,6 +391,7 @@ namespace x11 {
Atom m_nTEXTAtom;
Atom m_nINCRAtom;
Atom m_nCOMPOUNDAtom;
+ Atom m_nMULTIPLEAtom;
Atom m_nUTF16Atom;
Atom m_nXdndAware;
Atom m_nXdndEnter;
@@ -418,6 +431,7 @@ namespace x11 {
~SelectionManager();
SelectionAdaptor* getAdaptor( Atom selection );
+ PixmapHolder* getPixmapHolder( Atom selection );
// handle various events
void handleSelectionRequest( XSelectionRequestEvent& rRequest );
@@ -443,6 +457,7 @@ namespace x11 {
Atom nSelection,
int & rFormat,
Sequence< sal_Int8 >& rData );
+ bool sendData( SelectionAdaptor* pAdaptor, Window requestor, Atom target, Atom property, Atom selection );
// thread dispatch loop
static void run( void* );
diff --git a/dtrans/source/X11/bmp.cxx b/dtrans/source/X11/bmp.cxx
new file mode 100644
index 000000000000..8d2f2fcbb62a
--- /dev/null
+++ b/dtrans/source/X11/bmp.cxx
@@ -0,0 +1,764 @@
+/*************************************************************************
+ *
+ * $RCSfile: bmp.cxx,v $
+ *
+ * $Revision: 1.2 $
+ *
+ * last change: $Author: hr $ $Date: 2003-03-25 14:05:29 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 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
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (the "License"); You may not use this file
+ * except in compliance with the License. You may obtain a copy of the
+ * License at http://www.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ * Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+
+#include <unistd.h>
+#include <cstdio>
+#include <cstring>
+
+#include <bmp.hxx>
+
+#include <X11_selection.hxx>
+
+using namespace x11;
+using namespace com::sun::star::uno;
+using namespace com::sun::star::script;
+using namespace com::sun::star::awt;
+using namespace rtl;
+
+/*
+ * helper functions
+ */
+
+inline void writeLE( sal_uInt16 nNumber, sal_uInt8* pBuffer )
+{
+ pBuffer[ 0 ] = (nNumber & 0xff);
+ pBuffer[ 1 ] = ((nNumber>>8)&0xff);
+}
+
+inline void writeLE( sal_uInt32 nNumber, sal_uInt8* pBuffer )
+{
+ pBuffer[ 0 ] = (nNumber & 0xff);
+ pBuffer[ 1 ] = ((nNumber>>8)&0xff);
+ pBuffer[ 2 ] = ((nNumber>>16)&0xff);
+ pBuffer[ 3 ] = ((nNumber>>24)&0xff);
+}
+
+inline sal_uInt16 readLE16( const sal_uInt8* pBuffer )
+{
+ return (((sal_uInt16)pBuffer[1]) << 8 ) | pBuffer[0];
+}
+
+inline sal_uInt16 readLE32( const sal_uInt8* pBuffer )
+{
+ return
+ (((sal_uInt32)pBuffer[3]) << 24 ) |
+ (((sal_uInt32)pBuffer[2]) << 16 ) |
+ (((sal_uInt32)pBuffer[1]) << 8 ) |
+ pBuffer[0];
+}
+
+
+/*
+ * BmpTransporter
+ */
+
+BmpTransporter::BmpTransporter( const Sequence<sal_Int8>& rBmp ) :
+ m_aBM( rBmp )
+{
+ const sal_uInt8* pData = (const sal_uInt8*)rBmp.getConstArray();
+
+ if( pData[0] == 'B' || pData[1] == 'M' )
+ {
+ pData = pData+14;
+ m_aSize.Width = readLE32( pData+4 );
+ m_aSize.Height = readLE32( pData+8 );
+ }
+ else
+ m_aSize.Width = m_aSize.Height = 0;
+}
+
+BmpTransporter::~BmpTransporter()
+{
+}
+
+com::sun::star::awt::Size SAL_CALL BmpTransporter::getSize() throw()
+{
+ return m_aSize;
+}
+
+Sequence< sal_Int8 > SAL_CALL BmpTransporter::getDIB() throw()
+{
+ return m_aBM;
+}
+
+Sequence< sal_Int8 > SAL_CALL BmpTransporter::getMaskDIB() throw()
+{
+ return Sequence< sal_Int8 >();
+}
+
+/*
+ * scanline helpers
+ */
+
+inline void X11_writeScanlinePixel( unsigned long nColor, sal_uInt8* pScanline, int depth, int x )
+{
+ switch( depth )
+ {
+ case 1:
+ pScanline[ x/8 ] &= ~(1 << (x&7));
+ pScanline[ x/8 ] |= ((nColor & 1) << (x&7));
+ break;
+ case 4:
+ pScanline[ x/2 ] &= ((x&1) ? 0x0f : 0xf0);
+ pScanline[ x/2 ] |= ((x&1) ? (nColor & 0x0f) : ((nColor & 0x0f) << 4));
+ break;
+ default:
+ case 8:
+ pScanline[ x ] = (nColor & 0xff);
+ break;
+ }
+}
+
+static sal_uInt8* X11_getPaletteBmpFromImage(
+ Display* pDisplay,
+ XImage* pImage,
+ Colormap aColormap,
+ sal_Int32& rOutSize
+ )
+{
+ sal_uInt32 nColors = 0;
+
+ rOutSize = 0;
+
+ sal_uInt8* pBuffer = 0;
+ sal_uInt32 nHeaderSize, nScanlineSize;
+ sal_uInt16 nBitCount;
+ // determine header and scanline size
+ switch( pImage->depth )
+ {
+ case 1:
+ nHeaderSize = 64;
+ nScanlineSize = (pImage->width+31)/32;
+ nBitCount = 1;
+ break;
+ case 4:
+ nHeaderSize = 72;
+ nScanlineSize = (pImage->width+1)/2;
+ nBitCount = 4;
+ break;
+ default:
+ case 8:
+ nHeaderSize = 1084;
+ nScanlineSize = pImage->width;
+ nBitCount = 8;
+ break;
+ }
+ // adjust scan lines to begin on %4 boundaries
+ if( nScanlineSize & 3 )
+ {
+ nScanlineSize &= 0xfffffffc;
+ nScanlineSize += 4;
+ }
+
+ // allocate buffer to hold header and scanlines, initialize to zero
+ rOutSize = nHeaderSize + nScanlineSize*pImage->height;
+ pBuffer = (sal_uInt8*)rtl_allocateZeroMemory( rOutSize );
+ for( int y = 0; y < pImage->height; y++ )
+ {
+ sal_uInt8* pScanline = pBuffer + nHeaderSize + (pImage->height-1-y)*nScanlineSize;
+ for( int x = 0; x < pImage->width; x++ )
+ {
+ unsigned long nPixel = XGetPixel( pImage, x, y );
+ if( nPixel >= nColors )
+ nColors = nPixel+1;
+ X11_writeScanlinePixel( nPixel, pScanline, pImage->depth, x );
+ }
+ }
+
+ // fill in header fields
+ pBuffer[ 0 ] = 'B';
+ pBuffer[ 1 ] = 'M';
+
+ writeLE( nHeaderSize, pBuffer+10 );
+ writeLE( (sal_uInt32)40, pBuffer+14 );
+ writeLE( (sal_uInt32)pImage->width, pBuffer+18 );
+ writeLE( (sal_uInt32)pImage->height, pBuffer+22 );
+ writeLE( (sal_uInt16)1, pBuffer+26 );
+ writeLE( nBitCount, pBuffer+28 );
+ writeLE( (sal_uInt32)(DisplayWidth(pDisplay,DefaultScreen(pDisplay))*1000/DisplayWidthMM(pDisplay,DefaultScreen(pDisplay))), pBuffer+38);
+ writeLE( (sal_uInt32)(DisplayHeight(pDisplay,DefaultScreen(pDisplay))*1000/DisplayHeightMM(pDisplay,DefaultScreen(pDisplay))), pBuffer+42);
+ writeLE( nColors, pBuffer+46 );
+ writeLE( nColors, pBuffer+50 );
+
+ XColor aColors[256];
+ if( nColors > (1<<nBitCount) ) // paranoia
+ nColors = (1 << nBitCount);
+ for( unsigned long nPixel = 0; nPixel < nColors; nPixel++ )
+ {
+ aColors[nPixel].flags = DoRed | DoGreen | DoBlue;
+ aColors[nPixel].pixel = nPixel;
+ }
+ XQueryColors( pDisplay, aColormap, aColors, nColors );
+ for( sal_uInt32 i = 0; i < nColors; i++ )
+ {
+ pBuffer[ 54 + i*4 ] = (sal_uInt8)(aColors[i].blue >> 8);
+ pBuffer[ 55 + i*4 ] = (sal_uInt8)(aColors[i].green >> 8);
+ pBuffer[ 56 + i*4 ] = (sal_uInt8)(aColors[i].red >> 8);
+ }
+
+ // done
+
+ return pBuffer;
+}
+
+inline unsigned long doRightShift( unsigned long nValue, int nShift )
+{
+ return (nShift > 0) ? (nValue >> nShift) : (nValue << (-nShift));
+}
+
+inline unsigned long doLeftShift( unsigned long nValue, int nShift )
+{
+ return (nShift > 0) ? (nValue << nShift) : (nValue >> (-nShift));
+}
+
+static void getShift( unsigned long nMask, int& rShift, int& rSigBits, int& rShift2 )
+{
+ unsigned long nUseMask = nMask;
+ rShift = 0;
+ while( nMask & 0xffffff00 )
+ {
+ rShift++;
+ nMask >>= 1;
+ }
+ if( rShift == 0 )
+ while( ! (nMask & 0x00000080) )
+ {
+ rShift--;
+ nMask <<= 1;
+ }
+
+ int nRotate = sizeof(unsigned long)*8 - rShift;
+ rSigBits = 0;
+ nMask = doRightShift( nUseMask, rShift) ;
+ while( nRotate-- )
+ {
+ if( nMask & 1 )
+ rSigBits++;
+ nMask >>= 1;
+ }
+
+ rShift2 = 0;
+ if( rSigBits < 8 )
+ rShift2 = 8-rSigBits;
+}
+
+static sal_uInt8* X11_getTCBmpFromImage(
+ Display* pDisplay,
+ XImage* pImage,
+ sal_Int32& rOutSize,
+ int nScreenNo
+ )
+{
+ // get masks from visual info (guesswork)
+ XVisualInfo aVInfo;
+ if( ! XMatchVisualInfo( pDisplay, nScreenNo, pImage->depth, TrueColor, &aVInfo ) )
+ return NULL;
+
+ rOutSize = 0;
+
+ sal_uInt8* pBuffer = 0;
+ sal_uInt32 nHeaderSize = 60;
+ sal_uInt32 nScanlineSize = pImage->width*3;
+
+ // adjust scan lines to begin on %4 boundaries
+ if( nScanlineSize & 3 )
+ {
+ nScanlineSize &= 0xfffffffc;
+ nScanlineSize += 4;
+ }
+ int nRedShift, nRedSig, nRedShift2 = 0;
+ getShift( aVInfo.red_mask, nRedShift, nRedSig, nRedShift2 );
+ int nGreenShift, nGreenSig, nGreenShift2 = 0;
+ getShift( aVInfo.green_mask, nGreenShift, nGreenSig, nGreenShift2 );
+ int nBlueShift, nBlueSig, nBlueShift2 = 0;
+ getShift( aVInfo.blue_mask, nBlueShift, nBlueSig, nBlueShift2 );
+
+ // allocate buffer to hold header and scanlines, initialize to zero
+ rOutSize = nHeaderSize + nScanlineSize*pImage->height;
+ pBuffer = (sal_uInt8*)rtl_allocateZeroMemory( rOutSize );
+ for( int y = 0; y < pImage->height; y++ )
+ {
+ sal_uInt8* pScanline = pBuffer + nHeaderSize + (pImage->height-1-y)*nScanlineSize;
+ for( int x = 0; x < pImage->width; x++ )
+ {
+ unsigned long nPixel = XGetPixel( pImage, x, y );
+
+ sal_uInt8 nValue = (sal_uInt8)doRightShift( nPixel&aVInfo.blue_mask, nBlueShift);
+ if( nBlueShift2 )
+ nValue |= (nValue >> nBlueShift2 );
+ *pScanline++ = nValue;
+
+ nValue = (sal_uInt8)doRightShift( nPixel&aVInfo.green_mask, nGreenShift);
+ if( nGreenShift2 )
+ nValue |= (nValue >> nGreenShift2 );
+ *pScanline++ = nValue;
+
+ nValue = (sal_uInt8)doRightShift( nPixel&aVInfo.red_mask, nRedShift);
+ if( nRedShift2 )
+ nValue |= (nValue >> nRedShift2 );
+ *pScanline++ = nValue;
+ }
+ }
+
+ // fill in header fields
+ pBuffer[ 0 ] = 'B';
+ pBuffer[ 1 ] = 'M';
+
+ writeLE( nHeaderSize, pBuffer+10 );
+ writeLE( (sal_uInt32)40, pBuffer+14 );
+ writeLE( (sal_uInt32)pImage->width, pBuffer+18 );
+ writeLE( (sal_uInt32)pImage->height, pBuffer+22 );
+ writeLE( (sal_uInt16)1, pBuffer+26 );
+ writeLE( (sal_uInt16)24, pBuffer+28 );
+ writeLE( (sal_uInt32)(DisplayWidth(pDisplay,DefaultScreen(pDisplay))*1000/DisplayWidthMM(pDisplay,DefaultScreen(pDisplay))), pBuffer+38);
+ writeLE( (sal_uInt32)(DisplayHeight(pDisplay,DefaultScreen(pDisplay))*1000/DisplayHeightMM(pDisplay,DefaultScreen(pDisplay))), pBuffer+42);
+
+ // done
+
+ return pBuffer;
+}
+
+sal_uInt8* x11::X11_getBmpFromPixmap(
+ Display* pDisplay,
+ Drawable aDrawable,
+ Colormap aColormap,
+ sal_Int32& rOutSize
+ )
+{
+ // get geometry of drawable
+ Window aRoot;
+ int x,y;
+ unsigned int w, h, bw, d;
+ XGetGeometry( pDisplay, aDrawable, &aRoot, &x, &y, &w, &h, &bw, &d );
+
+ // find which screen we are on
+ int nScreenNo = ScreenCount( pDisplay );
+ while( nScreenNo-- )
+ {
+ if( RootWindow( pDisplay, nScreenNo ) == aRoot )
+ break;
+ }
+ if( nScreenNo < 0 )
+ return NULL;
+
+ if( aColormap == None )
+ aColormap = DefaultColormap( pDisplay, nScreenNo );
+
+ // get the image
+ XImage* pImage = XGetImage( pDisplay, aDrawable, 0, 0, w, h, AllPlanes, ZPixmap );
+ if( ! pImage )
+ return NULL;
+
+ sal_uInt8* pBmp = d <= 8 ?
+ X11_getPaletteBmpFromImage( pDisplay, pImage, aColormap, rOutSize ) :
+ X11_getTCBmpFromImage( pDisplay, pImage, rOutSize, nScreenNo );
+ XDestroyImage( pImage );
+
+ return pBmp;
+}
+
+void x11::X11_freeBmp( sal_uInt8* pBmp )
+{
+ rtl_freeMemory( pBmp );
+}
+
+/*
+ * PixmapHolder
+ */
+
+PixmapHolder::PixmapHolder( Display* pDisplay ) :
+ m_pDisplay( pDisplay ),
+ m_aColormap( None ),
+ m_aPixmap( None )
+{
+ /* try to get a 24 bit true color visual, if that fails,
+ * revert to default visual
+ */
+ if( ! XMatchVisualInfo( m_pDisplay, DefaultScreen( m_pDisplay ), 24, TrueColor, &m_aInfo ) )
+ {
+#ifdef DEBUG
+ fprintf( stderr, "PixmapHolder reverting to default visual\n" );
+#endif
+ Visual* pVisual = DefaultVisual( m_pDisplay, DefaultScreen( m_pDisplay ) );
+ m_aInfo.screen = DefaultScreen( m_pDisplay );
+ m_aInfo.visual = pVisual;
+ m_aInfo.visualid = pVisual->visualid;
+ m_aInfo.c_class = pVisual->c_class;
+ m_aInfo.red_mask = pVisual->red_mask;
+ m_aInfo.green_mask = pVisual->green_mask;
+ m_aInfo.blue_mask = pVisual->blue_mask;
+ m_aInfo.depth = DefaultDepth( m_pDisplay, m_aInfo.screen );
+ }
+ m_aColormap = DefaultColormap( m_pDisplay, m_aInfo.screen );
+#ifdef DEBUG
+ static const char* pClasses[] =
+ { "StaticGray", "GrayScale", "StaticColor", "PseudoColor", "TrueColor", "DirectColor" };
+ fprintf( stderr, "PixmapHolder visual: id = 0x%x, class = %s (%d), depth=%d; color map = 0x%x\n",
+ m_aInfo.visualid,
+ (m_aInfo.c_class >= 0 && m_aInfo.c_class < sizeof(pClasses)/sizeof(pClasses[0])) ? pClasses[m_aInfo.c_class] : "<unknown>",
+ m_aInfo.c_class,
+ m_aInfo.depth,
+ m_aColormap );
+#endif
+ if( m_aInfo.c_class == TrueColor )
+ {
+ int nRedSig, nGreenSig, nBlueSig;
+ m_nRedShift = m_nRedShift2 = 0;
+ getShift( m_aInfo.red_mask, m_nRedShift, nRedSig, m_nRedShift2 );
+ m_nGreenShift = m_nGreenShift2 = 0;
+ getShift( m_aInfo.green_mask, m_nGreenShift, nGreenSig, m_nGreenShift2 );
+ m_nBlueShift = m_nBlueShift2 = 0;
+ getShift( m_aInfo.blue_mask, m_nBlueShift, nBlueSig, m_nBlueShift2 );
+
+ m_nBlueShift2Mask = m_nBlueShift2 ? ~((unsigned long)((1<<m_nBlueShift2)-1)) : ~0L;
+ m_nGreenShift2Mask = m_nGreenShift2 ? ~((unsigned long)((1<<m_nGreenShift2)-1)) : ~0L;
+ m_nRedShift2Mask = m_nRedShift2 ? ~((unsigned long)((1<<m_nRedShift2)-1)) : ~0L;
+ }
+}
+
+PixmapHolder::~PixmapHolder()
+{
+ if( m_aPixmap != None )
+ XFreePixmap( m_pDisplay, m_aPixmap );
+ if( m_aBitmap != None )
+ XFreePixmap( m_pDisplay, m_aBitmap );
+}
+
+unsigned long PixmapHolder::getTCPixel( sal_uInt8 r, sal_uInt8 g, sal_uInt8 b ) const
+{
+ unsigned long nPixel = 0;
+ unsigned long nValue = (unsigned long)b;
+ nValue &= m_nBlueShift2Mask;
+ nPixel |= doLeftShift( nValue, m_nBlueShift );
+
+ nValue = (unsigned long)g;
+ nValue &= m_nGreenShift2Mask;
+ nPixel |= doLeftShift( nValue, m_nGreenShift );
+
+ nValue = (unsigned long)r;
+ nValue &= m_nRedShift2Mask;
+ nPixel |= doLeftShift( nValue, m_nRedShift );
+
+ return nPixel;
+}
+
+void PixmapHolder::setBitmapDataPalette( const sal_uInt8* pData, XImage* pImage )
+{
+ // setup palette
+ XColor aPalette[256];
+
+ sal_uInt32 nColors = readLE32( pData+32 );
+ sal_uInt32 nWidth = readLE32( pData+4 );
+ sal_uInt32 nHeight = readLE32( pData+8 );
+ sal_uInt16 nDepth = readLE16( pData+14 );
+
+ for( sal_uInt16 i = 0 ; i < nColors; i++ )
+ {
+ if( m_aInfo.c_class != TrueColor )
+ {
+ aPalette[i].red = ((unsigned short)pData[42 + i*4]) << 8 | ((unsigned short)pData[42 + i*4]);
+ aPalette[i].green = ((unsigned short)pData[41 + i*4]) << 8 | ((unsigned short)pData[41 + i*4]);
+ aPalette[i].blue = ((unsigned short)pData[40 + i*4]) << 8 | ((unsigned short)pData[40 + i*4]);
+ XAllocColor( m_pDisplay, m_aColormap, aPalette+i );
+ }
+ else
+ aPalette[i].pixel = getTCPixel( pData[42+i*4], pData[41+i*4], pData[40+i*4] );
+ }
+ const sal_uInt8* pBMData = pData + readLE32( pData ) + 4*nColors;
+
+ sal_uInt32 nScanlineSize = 0;
+ switch( nDepth )
+ {
+ case 1:
+ nScanlineSize = (nWidth+31)/32;
+ break;
+ case 4:
+ nScanlineSize = (nWidth+1)/2;
+ break;
+ case 8:
+ nScanlineSize = nWidth;
+ break;
+ }
+ // adjust scan lines to begin on %4 boundaries
+ if( nScanlineSize & 3 )
+ {
+ nScanlineSize &= 0xfffffffc;
+ nScanlineSize += 4;
+ }
+
+ // allocate buffer to hold header and scanlines, initialize to zero
+ for( int y = 0; y < nHeight; y++ )
+ {
+ const sal_uInt8* pScanline = pBMData + (nHeight-1-y)*nScanlineSize;
+ for( int x = 0; x < nWidth; x++ )
+ {
+ int nCol = 0;
+ switch( nDepth )
+ {
+ case 1: nCol = (pScanline[ x/8 ] & (0x80 >> (x&7))) != 0 ? 0 : 1; break;
+ case 4:
+ if( x & 1 )
+ nCol = (int)(pScanline[ x/2 ] >> 4);
+ else
+ nCol = (int)(pScanline[ x/2 ] & 0x0f);
+ break;
+ case 8: nCol = (int)pScanline[x];
+ }
+ XPutPixel( pImage, x, y, aPalette[nCol].pixel );
+ }
+ }
+}
+
+void PixmapHolder::setBitmapDataTCDither( const sal_uInt8* pData, XImage* pImage )
+{
+ XColor aPalette[216];
+
+ int nNonAllocs = 0;
+
+ for( int r = 0; r < 6; r++ )
+ {
+ for( int g = 0; g < 6; g++ )
+ {
+ for( int b = 0; b < 6; b++ )
+ {
+ int i = r*36+g*6+b;
+ aPalette[i].red = r == 5 ? 0xffff : r*10922;
+ aPalette[i].green = g == 5 ? 0xffff : g*10922;
+ aPalette[i].blue = b == 5 ? 0xffff : b*10922;
+ aPalette[i].pixel = 0;
+ if( ! XAllocColor( m_pDisplay, m_aColormap, aPalette+i ) )
+ nNonAllocs++;
+ }
+ }
+ }
+
+ if( nNonAllocs )
+ {
+ XColor aRealPalette[256];
+ int nColors = 1 << m_aInfo.depth;
+ int i;
+ for( i = 0; i < nColors; i++ )
+ aRealPalette[i].pixel = (unsigned long)i;
+ XQueryColors( m_pDisplay, m_aColormap, aRealPalette, nColors );
+ for( i = 0; i < nColors; i++ )
+ {
+ sal_uInt8 nIndex =
+ 36*(sal_uInt8)(aRealPalette[i].red/10923) +
+ 6*(sal_uInt8)(aRealPalette[i].green/10923) +
+ (sal_uInt8)(aRealPalette[i].blue/10923);
+ if( aPalette[nIndex].pixel == 0 )
+ aPalette[nIndex] = aRealPalette[i];
+ }
+ }
+
+ sal_uInt32 nWidth = readLE32( pData+4 );
+ sal_uInt32 nHeight = readLE32( pData+8 );
+
+ const sal_uInt8* pBMData = pData + readLE32( pData );
+ sal_uInt32 nScanlineSize = nWidth*3;
+ // adjust scan lines to begin on %4 boundaries
+ if( nScanlineSize & 3 )
+ {
+ nScanlineSize &= 0xfffffffc;
+ nScanlineSize += 4;
+ }
+
+ for( int y = 0; y < (int)nHeight; y++ )
+ {
+ const sal_uInt8* pScanline = pBMData + (nHeight-1-(sal_uInt32)y)*nScanlineSize;
+ for( int x = 0; x < (int)nWidth; x++ )
+ {
+ sal_uInt8 b = pScanline[3*x];
+ sal_uInt8 g = pScanline[3*x+1];
+ sal_uInt8 r = pScanline[3*x+2];
+ sal_uInt8 i = 36*(r/43) + 6*(g/43) + (b/43);
+
+ XPutPixel( pImage, x, y, aPalette[ i ].pixel );
+ }
+ }
+}
+
+void PixmapHolder::setBitmapDataTC( const sal_uInt8* pData, XImage* pImage )
+{
+ sal_uInt32 nWidth = readLE32( pData+4 );
+ sal_uInt32 nHeight = readLE32( pData+8 );
+
+ const sal_uInt8* pBMData = pData + readLE32( pData );
+ sal_uInt32 nScanlineSize = nWidth*3;
+ // adjust scan lines to begin on %4 boundaries
+ if( nScanlineSize & 3 )
+ {
+ nScanlineSize &= 0xfffffffc;
+ nScanlineSize += 4;
+ }
+
+ for( int y = 0; y < (int)nHeight; y++ )
+ {
+ const sal_uInt8* pScanline = pBMData + (nHeight-1-(sal_uInt32)y)*nScanlineSize;
+ for( int x = 0; x < (int)nWidth; x++ )
+ {
+ unsigned long nPixel = getTCPixel( pScanline[3*x+2], pScanline[3*x+1], pScanline[3*x] );
+ XPutPixel( pImage, x, y, nPixel );
+ }
+ }
+}
+
+bool PixmapHolder::needsConversion( const sal_uInt8* pData )
+{
+ if( pData[0] != 'B' || pData[1] != 'M' )
+ return true;
+
+ pData = pData+14;
+ sal_uInt32 nDepth = readLE32( pData+14 );
+ if( nDepth == 24 )
+ {
+ if( m_aInfo.c_class != TrueColor )
+ return true;
+ }
+ else if( nDepth != (sal_uInt32)m_aInfo.depth )
+ {
+ if( m_aInfo.c_class != TrueColor )
+ return true;
+ }
+
+ return false;
+}
+
+Pixmap PixmapHolder::setBitmapData( const sal_uInt8* pData )
+{
+ if( pData[0] != 'B' || pData[1] != 'M' )
+ return None;
+
+ pData = pData+14;
+
+ // reject compressed data
+ if( readLE32( pData + 16 ) != 0 )
+ return None;
+
+ sal_uInt32 nWidth = readLE32( pData+4 );
+ sal_uInt32 nHeight = readLE32( pData+8 );
+
+ m_aPixmap = XCreatePixmap( m_pDisplay,
+ RootWindow( m_pDisplay, m_aInfo.screen ),
+ nWidth, nHeight, m_aInfo.depth );
+
+ if( m_aPixmap != None )
+ {
+ XImage aImage;
+ aImage.width = (int)nWidth;
+ aImage.height = (int)nHeight;
+ aImage.xoffset = 0;
+ aImage.format = ZPixmap;
+ aImage.data = NULL;
+ aImage.byte_order = ImageByteOrder( m_pDisplay );
+ aImage.bitmap_unit = BitmapUnit( m_pDisplay );
+ aImage.bitmap_bit_order = BitmapBitOrder( m_pDisplay );
+ aImage.bitmap_pad = BitmapPad( m_pDisplay );
+ aImage.depth = m_aInfo.depth;
+ aImage.red_mask = m_aInfo.red_mask;
+ aImage.green_mask = m_aInfo.green_mask;
+ aImage.blue_mask = m_aInfo.blue_mask;
+ aImage.bytes_per_line = 0; // filled in by XInitImage
+ if( m_aInfo.depth <= 8 )
+ aImage.bits_per_pixel = m_aInfo.depth;
+ else
+ aImage.bits_per_pixel = 8*((m_aInfo.depth+7)/8);
+ aImage.obdata = NULL;
+
+ XInitImage( &aImage );
+ aImage.data = (char*)rtl_allocateMemory( nHeight*aImage.bytes_per_line );
+
+ if( readLE32( pData+14 ) == 24 )
+ {
+ if( m_aInfo.c_class == TrueColor )
+ setBitmapDataTC( pData, &aImage );
+ else
+ setBitmapDataTCDither( pData, &aImage );
+ }
+ else
+ setBitmapDataPalette( pData, &aImage );
+
+ // put the image
+ XPutImage( m_pDisplay,
+ m_aPixmap,
+ DefaultGC( m_pDisplay, m_aInfo.screen ),
+ &aImage,
+ 0, 0,
+ 0, 0,
+ nWidth, nHeight );
+
+ // clean up
+ rtl_freeMemory( aImage.data );
+
+ // prepare bitmap (mask)
+ m_aBitmap = XCreatePixmap( m_pDisplay,
+ RootWindow( m_pDisplay, m_aInfo.screen ),
+ nWidth, nHeight, 1 );
+ XGCValues aVal;
+ aVal.function = GXcopy;
+ aVal.foreground = 0xffffffff;
+ GC aGC = XCreateGC( m_pDisplay, m_aBitmap, GCFunction | GCForeground, &aVal );
+ XFillRectangle( m_pDisplay, m_aBitmap, aGC, 0, 0, nWidth, nHeight );
+ XFreeGC( m_pDisplay, aGC );
+ }
+
+ return m_aPixmap;
+}
diff --git a/dtrans/source/X11/bmp.hxx b/dtrans/source/X11/bmp.hxx
new file mode 100644
index 000000000000..13ccdb3b3c20
--- /dev/null
+++ b/dtrans/source/X11/bmp.hxx
@@ -0,0 +1,142 @@
+/*************************************************************************
+ *
+ * $RCSfile: bmp.hxx,v $
+ *
+ * $Revision: 1.2 $
+ *
+ * last change: $Author: hr $ $Date: 2003-03-25 14:05:29 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 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
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (the "License"); You may not use this file
+ * except in compliance with the License. You may obtain a copy of the
+ * License at http://www.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRUNTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRUNTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc..
+ *
+ * Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+
+#ifndef _DTRANS_BMP_HXX_
+#define _DTRANS_BMP_HXX_
+
+#include <X11/Xatom.h>
+#include <X11/keysym.h>
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+
+#include <sal/types.h>
+
+#ifndef _COM_SUN_STAR_AWT_XBITMAP_HPP_
+#include <com/sun/star/awt/XBitmap.hpp>
+#endif
+#ifndef _CPPUHELPER_COMPBASE1_HXX_
+#include <cppuhelper/compbase1.hxx>
+#endif
+
+
+
+namespace x11 {
+
+// helper methods
+sal_uInt8* X11_getBmpFromPixmap( Display* pDisplay,
+ Drawable aDrawable,
+ Colormap aColormap,
+ sal_Int32& rOutSize );
+
+void X11_freeBmp( sal_uInt8* pBmp );
+
+class PixmapHolder
+{
+ Display* m_pDisplay;
+ Colormap m_aColormap;
+ Pixmap m_aPixmap;
+ Pixmap m_aBitmap;
+ XVisualInfo m_aInfo;
+
+ int m_nRedShift, m_nRedShift2;
+ int m_nGreenShift, m_nGreenShift2;
+ int m_nBlueShift, m_nBlueShift2;
+ unsigned long m_nBlueShift2Mask, m_nRedShift2Mask, m_nGreenShift2Mask;
+
+ // these expect data pointers to bitmapinfo header
+ void setBitmapDataTC( const sal_uInt8* pData, XImage* pImage );
+ void setBitmapDataTCDither( const sal_uInt8* pData, XImage* pImage );
+ void setBitmapDataPalette( const sal_uInt8* pData, XImage* pImage );
+
+ unsigned long getTCPixel( sal_uInt8 r, sal_uInt8 g, sal_uInt8 b ) const;
+public:
+ PixmapHolder( Display* pDisplay );
+ ~PixmapHolder();
+
+ // accepts bitmap file (including bitmap file header)
+ Pixmap setBitmapData( const sal_uInt8* pData );
+ bool needsConversion( const sal_uInt8* pData );
+
+ Colormap getColormap() const { return m_aColormap; }
+ Pixmap getPixmap() const { return m_aPixmap; }
+ Pixmap getBitmap() const { return m_aBitmap; }
+ VisualID getVisualID() const { return m_aInfo.visualid; }
+ int getClass() const { return m_aInfo.c_class; }
+ int getDepth() const { return m_aInfo.depth; }
+};
+
+class BmpTransporter :
+ public cppu::WeakImplHelper1< com::sun::star::awt::XBitmap >
+{
+ com::sun::star::uno::Sequence<sal_Int8> m_aBM;
+ com::sun::star::awt::Size m_aSize;
+public:
+ BmpTransporter( const com::sun::star::uno::Sequence<sal_Int8>& rBmp );
+ virtual ~BmpTransporter();
+
+ virtual com::sun::star::awt::Size SAL_CALL getSize() throw();
+ virtual com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getDIB() throw();
+ virtual com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getMaskDIB() throw();
+};
+
+}
+
+#endif
diff --git a/dtrans/source/X11/dtransX11.xml b/dtrans/source/X11/dtransX11.xml
index bcfeacfb64f9..77994d5287b5 100644
--- a/dtrans/source/X11/dtransX11.xml
+++ b/dtrans/source/X11/dtransX11.xml
@@ -27,8 +27,6 @@
<type> com.sun.star.datatransfer.dnd.DNDConstants </type>
<type> com.sun.star.datatransfer.dnd.XDragSource </type>
<type> com.sun.star.datatransfer.dnd.XDragSourceContext </type>
- <type> com.sun.star.awt.MouseButton </type>
- <type> com.sun.star.awt.MouseEvent </type>
<type> com.sun.star.awt.XDisplayConnection </type>
<type> com.sun.star.lang.DisposedException </type>
<type> com.sun.star.lang.IllegalArgumentException </type>
diff --git a/dtrans/source/X11/makefile.mk b/dtrans/source/X11/makefile.mk
index 1c3e41b2d411..5d41319b4ea0 100644
--- a/dtrans/source/X11/makefile.mk
+++ b/dtrans/source/X11/makefile.mk
@@ -2,9 +2,9 @@
#
# $RCSfile: makefile.mk,v $
#
-# $Revision: 1.5 $
+# $Revision: 1.6 $
#
-# last change: $Author: pl $ $Date: 2001-12-11 17:48:36 $
+# last change: $Author: hr $ $Date: 2003-03-25 14:05:30 $
#
# The Contents of this file are made available subject to the terms of
# either of the following licenses
@@ -95,7 +95,8 @@ SLOFILES=\
$(SLO)$/X11_clipboard.obj \
$(SLO)$/X11_selection.obj \
$(SLO)$/X11_droptarget.obj \
- $(SLO)$/X11_service.obj
+ $(SLO)$/X11_service.obj \
+ $(SLO)$/bmp.obj
SHL1TARGET= $(TARGET)$(UPD)$(DLLPOSTFIX)
diff --git a/dtrans/source/aqua/dtransaqua.xml b/dtrans/source/aqua/dtransaqua.xml
index 6da3bda336ec..5156b6bf8a91 100644
--- a/dtrans/source/aqua/dtransaqua.xml
+++ b/dtrans/source/aqua/dtransaqua.xml
@@ -1,50 +1,55 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE module-description PUBLIC "-//StarOffice//DTD ComponentDescription 1.0//EN" "module-description.dtd">
-<module-description xmlns:xlink="http://www.w3.org/1999/xlink">
- <module-name> dtransaqua </module-name>
- <component-description>
- <author> Tino Rachui </author>
- <name> com.sun.star.comp.datatransfer.aqua </name>
- <description>
- The Aqua implementation of the datatransfer service.
-</description>
- <loader-name> com.sun.star.loader.SharedLibrary </loader-name>
- <language> c++ </language>
- <status value="beta"/>
- <supported-service> com.sun.star.datatransfer.clipboard.SystemClipboard </supported-service>
- <supported-service> com.sun.star.datatransfer.dnd.AquaDragSource </supported-service>
- <supported-service> com.sun.star.datatransfer.dnd.AquaDropTarget </supported-service>
- <service-dependency> ... </service-dependency>
- <type> com.sun.star.datatransfer.clipboard.XClipboardEx </type>
- <type> com.sun.star.datatransfer.XTransferable </type>
- <type> com.sun.star.datatransfer.clipboard.RenderingCapabilities </type>
- <type> com.sun.star.datatransfer.clipboard.XClipboardOwner </type>
- <type> com.sun.star.datatransfer.clipboard.XClipboardListener </type>
- <type> com.sun.star.datatransfer.clipboard.XClipboardNotifier </type>
- <type> com.sun.star.datatransfer.dnd.XDropTargetDropContext </type>
- <type> com.sun.star.datatransfer.dnd.XDropTargetDragContext </type>
- <type> com.sun.star.datatransfer.dnd.XDropTarget </type>
- <type> com.sun.star.datatransfer.dnd.DNDConstants </type>
- <type> com.sun.star.datatransfer.dnd.XDragSource </type>
- <type> com.sun.star.datatransfer.dnd.XDragSourceContext </type>
- <type> com.sun.star.awt.XDisplayConnection </type>
- <type> com.sun.star.lang.DisposedException </type>
- <type> com.sun.star.lang.IllegalArgumentException </type>
- <type> com.sun.star.lang.XComponent </type>
- <type> com.sun.star.lang.XMultiServiceFactory </type>
- <type> com.sun.star.lang.XSingleServiceFactory </type>
- <type> com.sun.star.lang.XServiceInfo </type>
- <type> com.sun.star.lang.XTypeProvider </type>
- <type> com.sun.star.uno.TypeClass </type>
- <type> com.sun.star.uno.XWeak </type>
- <type> com.sun.star.uno.XAggregation </type>
- <type> com.sun.star.registry.XRegistryKey </type>
- <type> com.sun.star.container.XSet </type>
- </component-description>
- <project-build-dependency> cppuhelper </project-build-dependency>
- <project-build-dependency> cppu </project-build-dependency>
- <project-build-dependency> sal </project-build-dependency>
- <runtime-module-dependency> cppuhelper </runtime-module-dependency>
- <runtime-module-dependency> cppu2 </runtime-module-dependency>
- <runtime-module-dependency> sal2 </runtime-module-dependency>
-</module-description>
+<!DOCTYPE COMPONENTDESCRIPTION PUBLIC "-//StarOffice//DTD ComponentDescription 1.0//EN" "componentdescription.dtd">
+
+<COMPONENTDESCRIPTION
+ xmlns:xlink="http://www.w3.org/1999/xlink/Namespace" >
+
+<Author> Tino Rachui </Author>
+
+<Name> com.sun.star.comp.datatransfer.clipboard </Name>
+
+<Description>
+ The win32 implementation of the datatransfer service.
+</Description>
+
+<ModuleName> sysdtrans </ModuleName>
+
+<LoaderName> com.sun.star.loader.SharedLibrary </LoaderName>
+
+<Language> c++ </Language>
+
+<Status StatusValue="experimental"/>
+
+<SupportedService> com.sun.star.datatransfer.clipboard.SystemClipboard </SupportedService>
+
+<ServiceDependency> ... </ServiceDependency>
+
+<ProjectBuildDependency> cppuhelper </ProjectBuildDependency>
+<ProjectBuildDependency> cppu </ProjectBuildDependency>
+<ProjectBuildDependency> sal </ProjectBuildDependency>
+
+<RuntimeModuleDependency> cppuhelper </RuntimeModuleDependency>
+<RuntimeModuleDependency> cppu2 </RuntimeModuleDependency>
+<RuntimeModuleDependency> sal2 </RuntimeModuleDependency>
+
+<Type> com.sun.star.datatransfer.clipboard.XClipboardEx </Type>
+<Type> com.sun.star.datatransfer.XTransferable </Type>
+<Type> com.sun.star.datatransfer.XTransferableEx </Type>
+<Type> com.sun.star.datatransfer.clipboard.XClipboardOwner</Type>
+<Type> com.sun.star.datatransfer.clipboard.XClipboardListener</Type>
+<Type> com.sun.star.datatransfer.clipboard.XClipboardNotifier</Type>
+<Type> com.sun.star.datatransfer.XTransferDataAccess </Type>
+<Type> com.sun.star.lang.XComponent </Type>
+<Type> com.sun.star.lang.XMultiServiceFactory </Type>
+<Type> com.sun.star.lang.XSingleServiceFactory </Type>
+<Type> com.sun.star.lang.XServiceInfo </Type>
+<Type> com.sun.star.lang.XTypeProvider </Type>
+<Type> com.sun.star.lang.IllegalArgumentException </Type>
+<Type> com.sun.star.uno.TypeClass </Type>
+<Type> com.sun.star.uno.XWeak </Type>
+<Type> com.sun.star.uno.XAggregation </Type>
+<Type> com.sun.star.registry.XRegistryKey </Type>
+<Type> com.sun.star.container.XSet </Type>
+
+</COMPONENTDESCRIPTION>
+
diff --git a/dtrans/source/cnttype/mcnttype.hxx b/dtrans/source/cnttype/mcnttype.hxx
index f0a893415cc8..95edd7e6c0b2 100644
--- a/dtrans/source/cnttype/mcnttype.hxx
+++ b/dtrans/source/cnttype/mcnttype.hxx
@@ -2,9 +2,9 @@
*
* $RCSfile: mcnttype.hxx,v $
*
- * $Revision: 1.3 $
+ * $Revision: 1.4 $
*
- * last change: $Author: mh $ $Date: 2001-08-23 09:07:21 $
+ * last change: $Author: hr $ $Date: 2003-03-25 14:05:33 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -67,8 +67,8 @@
// includes
//------------------------------------------------------------------------
-#ifndef _CPPUHELPER_IMPLBASE1_HXX_
-#include <cppuhelper/implbase1.hxx>
+#ifndef _CPPUHELPER_COMPBASE1_HXX_
+#include <cppuhelper/compbase1.hxx>
#endif
#ifndef _RTL_USTRING_
diff --git a/dtrans/source/win32/clipb/APNDataObject.hxx b/dtrans/source/win32/clipb/APNDataObject.hxx
new file mode 100644
index 000000000000..7bee367a59cc
--- /dev/null
+++ b/dtrans/source/win32/clipb/APNDataObject.hxx
@@ -0,0 +1,127 @@
+/*************************************************************************
+ *
+ * $RCSfile: APNDataObject.hxx,v $
+ *
+ * $Revision: 1.3 $
+ *
+ * last change: $Author: hr $ $Date: 2003-03-25 14:05:33 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 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
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (the "License"); You may not use this file
+ * except in compliance with the License. You may obtain a copy of the
+ * License at http://www.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ * Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+
+
+#ifndef _APNDATAOBJECT_HXX_
+#define _APNDATAOBJECT_HXX_
+
+//------------------------------------------------------------------------
+// includes
+//------------------------------------------------------------------------
+
+#include <comdef.h>
+
+//------------------------------------------------------------------------
+// deklarations
+//------------------------------------------------------------------------
+
+/*
+ an APartment Neutral dataobject wrapper; this wrapper of a IDataObject
+ pointer can be used from any apartment without RPC_E_WRONG_THREAD
+ which normally occurs if an apartment tries to use an interface
+ pointer of another apartment; we use containment to hold the original
+ DataObject
+*/
+class CAPNDataObject : public IDataObject
+{
+public:
+ CAPNDataObject( IDataObjectPtr rIDataObject );
+ ~CAPNDataObject( );
+
+ //-----------------------------------------------------------------
+ //IUnknown interface methods
+ //-----------------------------------------------------------------
+
+ STDMETHODIMP QueryInterface(REFIID iid, LPVOID* ppvObject);
+ STDMETHODIMP_( ULONG ) AddRef( );
+ STDMETHODIMP_( ULONG ) Release( );
+
+ //-----------------------------------------------------------------
+ // IDataObject interface methods
+ //-----------------------------------------------------------------
+
+ STDMETHODIMP GetData( LPFORMATETC pFormatetc, LPSTGMEDIUM pmedium );
+ STDMETHODIMP GetDataHere( LPFORMATETC pFormatetc, LPSTGMEDIUM pmedium );
+ STDMETHODIMP QueryGetData( LPFORMATETC pFormatetc );
+ STDMETHODIMP GetCanonicalFormatEtc( LPFORMATETC pFormatectIn, LPFORMATETC pFormatetcOut );
+ STDMETHODIMP SetData( LPFORMATETC pFormatetc, LPSTGMEDIUM pmedium, BOOL fRelease );
+ STDMETHODIMP EnumFormatEtc( DWORD dwDirection, IEnumFORMATETC** ppenumFormatetc );
+ STDMETHODIMP DAdvise( LPFORMATETC pFormatetc, DWORD advf, LPADVISESINK pAdvSink, DWORD* pdwConnection );
+ STDMETHODIMP DUnadvise( DWORD dwConnection );
+ STDMETHODIMP EnumDAdvise( LPENUMSTATDATA* ppenumAdvise );
+
+ operator IDataObject*( );
+
+private:
+ HRESULT MarshalIDataObjectIntoCurrentApartment( IDataObject** ppIDataObj );
+
+private:
+ IDataObjectPtr m_rIDataObjectOrg;
+ HGLOBAL m_hGlobal;
+ LONG m_nRefCnt;
+
+// prevent copy and assignment
+private:
+ CAPNDataObject( const CAPNDataObject& theOther );
+ CAPNDataObject& operator=( const CAPNDataObject& theOther );
+};
+
+#endif \ No newline at end of file
diff --git a/dtrans/source/win32/clipb/makefile.mk b/dtrans/source/win32/clipb/makefile.mk
index 66e23d8929db..096b803a0d2f 100644
--- a/dtrans/source/win32/clipb/makefile.mk
+++ b/dtrans/source/win32/clipb/makefile.mk
@@ -2,9 +2,9 @@
#
# $RCSfile: makefile.mk,v $
#
-# $Revision: 1.4 $
+# $Revision: 1.5 $
#
-# last change: $Author: jbu $ $Date: 2002-10-01 07:33:38 $
+# last change: $Author: hr $ $Date: 2003-03-25 14:05:34 $
#
# The Contents of this file are made available subject to the terms of
# either of the following licenses
@@ -82,7 +82,7 @@ stoponerror=tr
.INCLUDE : ..$/..$/cppumaker.mk
-CFLAGS+=/GR -DUNICODE -D_UNICODE
+CFLAGS+=-GR -DUNICODE -D_UNICODE
SLOFILES=$(SLO)$/WinClipboard.obj \
$(SLO)$/WinClipbImpl.obj \
diff --git a/dtrans/source/win32/dnd/makefile.mk b/dtrans/source/win32/dnd/makefile.mk
index b0f0e8602398..3be905c595b4 100644
--- a/dtrans/source/win32/dnd/makefile.mk
+++ b/dtrans/source/win32/dnd/makefile.mk
@@ -2,9 +2,9 @@
#
# $RCSfile: makefile.mk,v $
#
-# $Revision: 1.9 $
+# $Revision: 1.10 $
#
-# last change: $Author: jbu $ $Date: 2002-10-01 07:33:39 $
+# last change: $Author: hr $ $Date: 2003-03-25 14:05:35 $
#
# The Contents of this file are made available subject to the terms of
# either of the following licenses
@@ -82,7 +82,7 @@ stoponerror=tr
.INCLUDE : ..$/..$/cppumaker.mk
-#CFLAGS+=/GR -DUNICODE -D_UNICODE
+#CFLAGS+=-GR -DUNICODE -D_UNICODE
#DBG_CONSOLE_OUT: when IDropTarget or IDropSource are called we write to a console
#DBG_CLIPBOARD_DATA: To provide DoDragDrop with an data object we call OleGetClipboard
diff --git a/dtrans/source/win32/dtobj/DOTransferable.cxx b/dtrans/source/win32/dtobj/DOTransferable.cxx
index a262895ef3e2..f712db05b714 100644
--- a/dtrans/source/win32/dtobj/DOTransferable.cxx
+++ b/dtrans/source/win32/dtobj/DOTransferable.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: DOTransferable.cxx,v $
*
- * $Revision: 1.16 $
+ * $Revision: 1.17 $
*
- * last change: $Author: ka $ $Date: 2002-07-20 10:35:05 $
+ * last change: $Author: hr $ $Date: 2003-03-25 14:05:36 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -455,15 +455,15 @@ OUString SAL_CALL CDOTransferable::synthesizeUnicodeText( )
// convert the text
sal_Int32 lStr = MultiByteToWideCharEx(
cpForTxtCnvt,
- reinterpret_cast< char* >( aTextSequence.getArray( ) ),
- aTextSequence.getLength(),
+ reinterpret_cast<char*>( aTextSequence.getArray( ) ),
+ -1,
stgTransferHelper,
sal_False);
CRawHGlobalPtr ptrHGlob(stgTransferHelper);
sal_Unicode* pWChar = reinterpret_cast<sal_Unicode*>(ptrHGlob.GetMemPtr());
- return OUString(pWChar, lStr);
+ return OUString(pWChar);
}
//------------------------------------------------------------------------
diff --git a/dtrans/source/win32/dtobj/DTransHelper.cxx b/dtrans/source/win32/dtobj/DTransHelper.cxx
index a48a1f3f02f2..832883b2ccd6 100644
--- a/dtrans/source/win32/dtobj/DTransHelper.cxx
+++ b/dtrans/source/win32/dtobj/DTransHelper.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: DTransHelper.cxx,v $
*
- * $Revision: 1.7 $
+ * $Revision: 1.8 $
*
- * last change: $Author: tra $ $Date: 2001-11-05 09:38:17 $
+ * last change: $Author: hr $ $Date: 2003-03-25 14:05:36 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -253,7 +253,7 @@ sal_uInt32 SAL_CALL CStgTransferHelper::memSize( CLIPFORMAT cf ) const
sal_Char* pText = static_cast< sal_Char* >( GlobalLock( hGlob ) );
if ( pText )
{
- dwSize = strlen( pText );// + 1; // strlen + trailing '\0'
+ dwSize = strlen(pText) + 1; // strlen + trailing '\0'
GlobalUnlock( hGlob );
}
}
diff --git a/dtrans/source/win32/dtobj/TxtCnvtHlp.cxx b/dtrans/source/win32/dtobj/TxtCnvtHlp.cxx
index 697158947494..7a123c3525a7 100644
--- a/dtrans/source/win32/dtobj/TxtCnvtHlp.cxx
+++ b/dtrans/source/win32/dtobj/TxtCnvtHlp.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: TxtCnvtHlp.cxx,v $
*
- * $Revision: 1.2 $
+ * $Revision: 1.3 $
*
- * last change: $Author: tra $ $Date: 2001-03-20 09:26:01 $
+ * last change: $Author: hr $ $Date: 2003-03-25 14:05:37 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -86,9 +86,9 @@ using namespace ::com::sun::star::uno;
// assuming a '\0' terminated string if no length specified
//------------------------------------------------------------------
-int CalcBuffSizeForTextConversion( LPCSTR lpMultiByteString, int nLen = -1 )
+int CalcBuffSizeForTextConversion( UINT code_page, LPCSTR lpMultiByteString, int nLen = -1 )
{
- return ( MultiByteToWideChar( CP_ACP,
+ return ( MultiByteToWideChar( code_page,
0,
lpMultiByteString,
nLen,
@@ -100,9 +100,9 @@ int CalcBuffSizeForTextConversion( LPCSTR lpMultiByteString, int nLen = -1 )
// assuming a '\0' terminated string if no length specified
//------------------------------------------------------------------
-int CalcBuffSizeForTextConversion( LPCWSTR lpWideCharString, int nLen = -1 )
+int CalcBuffSizeForTextConversion( UINT code_page, LPCWSTR lpWideCharString, int nLen = -1 )
{
- return WideCharToMultiByte( CP_ACP,
+ return WideCharToMultiByte( code_page,
0,
lpWideCharString,
nLen,
@@ -128,7 +128,7 @@ int MultiByteToWideCharEx( UINT cp_src,
OSL_ASSERT( NULL != lpMultiByteString );
// calculate the required buff size
- int reqSize = CalcBuffSizeForTextConversion( lpMultiByteString, lenStr );
+ int reqSize = CalcBuffSizeForTextConversion( cp_src, lpMultiByteString, lenStr );
if ( bEnsureTrailingZero )
reqSize += sizeof( sal_Unicode );
@@ -164,7 +164,7 @@ int WideCharToMultiByteEx( UINT cp_dest,
OSL_ASSERT( NULL != lpWideCharString );
// calculate the required buff size
- int reqSize = CalcBuffSizeForTextConversion( lpWideCharString, lenStr );
+ int reqSize = CalcBuffSizeForTextConversion( cp_dest, lpWideCharString, lenStr );
if ( bEnsureTrailingZero )
reqSize += sizeof( sal_Int8 );
diff --git a/dtrans/source/win32/dtobj/makefile.mk b/dtrans/source/win32/dtobj/makefile.mk
index 84e6dd0c58c4..abca0a5bd45c 100644
--- a/dtrans/source/win32/dtobj/makefile.mk
+++ b/dtrans/source/win32/dtobj/makefile.mk
@@ -2,9 +2,9 @@
#
# $RCSfile: makefile.mk,v $
#
-# $Revision: 1.8 $
+# $Revision: 1.9 $
#
-# last change: $Author: jl $ $Date: 2001-08-07 11:13:32 $
+# last change: $Author: hr $ $Date: 2003-03-25 14:05:37 $
#
# The Contents of this file are made available subject to the terms of
# either of the following licenses
@@ -75,7 +75,7 @@ LIBTARGET=NO
.INCLUDE : ..$/..$/cppumaker.mk
-#CFLAGS+=/GR -DUNICODE -D_UNICODE
+#CFLAGS+=-GR -DUNICODE -D_UNICODE
UNOTYPES= \
com.sun.star.datatransfer.XSystemTransferable
diff --git a/dtrans/source/win32/ftransl/ftransl.cxx b/dtrans/source/win32/ftransl/ftransl.cxx
index c05d866ac032..dbd24f999ee5 100644
--- a/dtrans/source/win32/ftransl/ftransl.cxx
+++ b/dtrans/source/win32/ftransl/ftransl.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: ftransl.cxx,v $
*
- * $Revision: 1.12 $
+ * $Revision: 1.13 $
*
- * last change: $Author: ka $ $Date: 2002-11-21 12:06:56 $
+ * last change: $Author: hr $ $Date: 2003-03-25 14:05:38 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -94,10 +94,11 @@
#define OUSTR( str ) OUString::createFromAscii( #str )
#define OUSTR_( str ) OUString::createFromAscii( str )
#define EMPTY_OUSTR OUString::createFromAscii( "" )
-#define _PARAM_WINFORMATNAME "windows_formatname"
+//#define PRIVATE_OO OUString::createFromAscii( "application/x-openoffice;" "windows_formatname=" )
-#define PRIVATE_OO OUString::createFromAscii( "application/x-openoffice;" _PARAM_WINFORMATNAME "=" )
-#define PARAM_WINFORMATNAME OUString::createFromAscii( _PARAM_WINFORMATNAME )
+const rtl::OUString Windows_FormatName = rtl::OUString::createFromAscii("windows_formatname");
+const com::sun::star::uno::Type CppuType_ByteSequence = ::getCppuType((const com::sun::star::uno::Sequence<sal_Int8>*)0);
+const com::sun::star::uno::Type CppuType_String = ::getCppuType((const ::rtl::OUString*)0);
//------------------------------------------------------------------------
// namespace directives
@@ -171,9 +172,9 @@ Any SAL_CALL CDataFormatTranslator::getSystemDataTypeFromDataFlavor( const DataF
}
else
{
- if ( refXMimeCntType->hasParameter( PARAM_WINFORMATNAME ) )
+ if (refXMimeCntType->hasParameter(Windows_FormatName))
{
- OUString winfmtname = refXMimeCntType->getParameterValue( PARAM_WINFORMATNAME );
+ OUString winfmtname = refXMimeCntType->getParameterValue(Windows_FormatName);
aAny <<= winfmtname;
setStandardFormatIdForNativeFormatName( winfmtname, aAny );
@@ -275,130 +276,245 @@ Sequence< OUString > SAL_CALL CDataFormatTranslator::getSupportedServiceNames( )
// CF_INVALID
// -------------------------------------------------
-void SAL_CALL CDataFormatTranslator::initTranslationTable( )
+void SAL_CALL CDataFormatTranslator::initTranslationTable()
{
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(DIF), CF_DIF ) );//SOT_FORMATSTR_ID_DIF
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(Bitmap), CF_DIB ) );// SOT_FORMAT_BITMAP
- m_TranslTable.push_back( mkPublicFormatEntry( OUSTR(text/plain;charset=utf-16), EMPTY_OUSTR, CF_UNICODETEXT, OUSTR(Unicode-Text), CPPUTYPE_OUSTR) );
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(Locale), CF_LOCALE ) );
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(Image WMF), CF_METAFILEPICT ) );// SOT_FORMAT_WMF
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(Image EMF), CF_ENHMETAFILE ) );// SOT_FORMAT_EMF
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(FileList), CF_HDROP ) );// SOT_FORMAT_FILE_LIST
-
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(GDIMetaFile) ) );// SOT_FORMAT_GDIMETAFILE
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(Private) ) );// SOT_FORMAT_PRIVATE
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(FileName) ) );// SOT_FORMAT_FILE
-
- m_TranslTable.push_back( mkPublicFormatEntry( OUSTR(text/richtext), OUSTR(Rich Text Format) ) );// SOT_FORMAT_RTF
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(Drawing Format) ) ); // SOT_FORMATSTR_ID_DRAWING
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(SVXB (StarView Bitmap/Animation)) ) );// SOT_FORMATSTR_ID_SVXB
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(SVIM (StarView ImageMap)) ) );// SOT_FORMATSTR_ID_SVIM
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(XFA (XOutDev FillAttr)) ) ); // SOT_FORMATSTR_ID_XFA
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(EditEngineFormat) ) ); // SOT_FORMATSTR_ID_EDITENGINE
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(StatusInfo vom SvxInternalLink) ) ); // SOT_FORMATSTR_ID_INTERNALLINK_STATE
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(SOLK (StarOffice Link)) ) ); // SOT_FORMATSTR_ID_SOLK
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(Netscape Bookmark) ) );// SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(SV_LBOX_DD_FORMAT) ) );// SOT_FORMATSTR_ID_TREELISTBOX
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(Native) ) );// SOT_FORMATSTR_ID_NATIVE
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(OwnerLink) ) ); // SOT_FORMATSTR_ID_OWNERLINK
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(StarServerFormat) ) );// SOT_FORMATSTR_ID_STARSERVER
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(StarObjectFormat) ) );// SOT_FORMATSTR_ID_STAROBJECT
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(Applet Object) ) );// SOT_FORMATSTR_ID_APPLETOBJECT
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(PlugIn Object) ) );// SOT_FORMATSTR_ID_PLUGIN_OBJECT
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(StarWriter 3.0) ) );// SOT_FORMATSTR_ID_STARWRITER_30
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(StarWriter 4.0) ) );//SOT_FORMATSTR_ID_STARWRITER_40
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(StarWriter 5.0) ) );//SOT_FORMATSTR_ID_STARWRITER_50
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(StarWriter/Web 4.0) ) );//SOT_FORMATSTR_ID_STARWRITERWEB_40
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(StarWriter/Web 5.0) ) );//SOT_FORMATSTR_ID_STARWRITERWEB_50
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(StarWriter/Global 4.0) ) );//SOT_FORMATSTR_ID_STARWRITERGLOB_40
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(StarWriter/Global 5.0) ) );// SOT_FORMATSTR_ID_STARWRITERGLOB_50
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(StarDrawDocument) ) );//SOT_FORMATSTR_ID_STARDRAW
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(StarDrawDocument 4.0) ) );//SOT_FORMATSTR_ID_STARDRAW_40
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(StarImpress 5.0) ) );//SOT_FORMATSTR_ID_STARIMPRESS_50
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(StarDraw 5.0) ) );// SOT_FORMATSTR_ID_STARDRAW_50
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(StarCalcDocument) ) );//SOT_FORMATSTR_ID_STARCALC
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(StarCalc 4.0) ) );//SOT_FORMATSTR_ID_STARCALC_40
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(StarCalc 5.0) ) );// SOT_FORMATSTR_ID_STARCALC_50
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(StarChartDocument) ) );// SOT_FORMATSTR_ID_STARCHART
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(StarChartDocument) ) ); // SOT_FORMATSTR_ID_STARCHART_40
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(StarChart 5.0) ) );// SOT_FORMATSTR_ID_STARCHART_50
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(StarImageDocument) ) );//SOT_FORMATSTR_ID_STARIMAGE
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(StarImageDocument 4.0) ) );//SOT_FORMATSTR_ID_STARIMAGE_40
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(StarImage 5.0) ) ); //SOT_FORMATSTR_ID_STARIMAGE_50
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(StarMath) ) );//SOT_FORMATSTR_ID_STARMATH
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(StarMathDocument 4.0) ) );//SOT_FORMATSTR_ID_STARMATH_40
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(StarMath 5.0) ) );//SOT_FORMATSTR_ID_STARMATH_50
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(StarObjectPaintDocument) ) ); //SOT_FORMATSTR_ID_STAROBJECT_PAINTDOC
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(FilledArea) ) );//SOT_FORMATSTR_ID_FILLED_AREA
- m_TranslTable.push_back( mkPublicFormatEntry( OUSTR(text/html), OUSTR(HTML (HyperText Markup Language)) ) );//SOT_FORMATSTR_ID_HTML
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(HTML Format) ) );//SOT_FORMATSTR_ID_HTML_SIMPLE
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(FORMAT_CHAOS) ) );//SOT_FORMATSTR_ID_CHAOS
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(CNT_MSGATTACHFILE_FORMAT) ) );//SOT_FORMATSTR_ID_CNT_MSGATTACHFILE
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(Biff5) ) ); //SOT_FORMATSTR_ID_BIFF_5
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(Biff 5) ) ); //SOT_FORMATSTR_ID_BIFF__5
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(Biff8) ) ); //SOT_FORMATSTR_ID_BIFF_8
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(Sylk) ) ); //SOT_FORMATSTR_ID_SYLK
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(SYLK) ) ); //SOT_FORMATSTR_ID_SYLK_BIGCAPS
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(Link) ) );//SOT_FORMATSTR_ID_LINK
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(StarDraw TabBar) ) ); //SOT_FORMATSTR_ID_STARDRAW_TABBAR
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(SONLK (StarOffice Navi Link)) ) );//SOT_FORMATSTR_ID_SONLK
- m_TranslTable.push_back( mkPublicFormatEntry( OUSTR(application/msword), OUSTR(MSWordDoc) ) ); //SOT_FORMATSTR_ID_MSWORD_DOC
- //m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(MSWordDoc) ) ); //SOT_FORMATSTR_ID_MSWORD_DOC
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(StarFrameSetDocument) ) );//SOT_FORMATSTR_ID_STAR_FRAMESET_DOC
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(OfficeDocument) ) );//SOT_FORMATSTR_ID_OFFICE_DOC
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(NotesDocInfo) ) ); //SOT_FORMATSTR_ID_NOTES_DOCINFO
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(NoteshNote) ) );//SOT_FORMATSTR_ID_NOTES_HNOTE
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(Native) ) ); //SOT_FORMATSTR_ID_NOTES_NATIVE
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(SfxDocument) ) );//SOT_FORMATSTR_ID_SFX_DOC
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(EVDF (Explorer View Dummy Format)) ) );//SOT_FORMATSTR_ID_EVDF
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(ESDF (Explorer Search Dummy Format) ) ) );//SOT_FORMATSTR_ID_ESDF
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(IDF (Iconview Dummy Format)) ) );//SOT_FORMATSTR_ID_IDF
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(EFTP (Explorer Ftp File) ) ) ); //SOT_FORMATSTR_ID_EFTP
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(EFD (Explorer Ftp Dir) ) ) ); //SOT_FORMATSTR_ID_EFD
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(SvxFormFieldExch) ) );//SOT_FORMATSTR_ID_SVX_FORMFIELDEXCH
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(ExtendedTabBar) ) );//SOT_FORMATSTR_ID_EXTENDED_TABBAR
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(SBA-DATAFORMAT) ) );//SOT_FORMATSTR_ID_SBA_DATAEXCHANGE
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(SBA-FIELDFORMAT) ) ); //SOT_FORMATSTR_ID_SBA_FIELDDATAEXCHANGE
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(SBA-PRIVATEURLFORMAT) ) );//SOT_FORMATSTR_ID_SBA_PRIVATE_URL
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(Tabed) ) ); //SOT_FORMATSTR_ID_SBA_TABED
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(Tabid) ) ); //SOT_FORMATSTR_ID_SBA_TABID
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(SBA-JOINFORMAT) ) );//SOT_FORMATSTR_ID_SBA_JOIN
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(Star Object Descriptor (XML)) ) );//SOT_FORMATSTR_ID_OBJECTDESCRIPTOR
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(Star Link Source Descriptor (XML)) ) );//SOT_FORMATSTR_ID_LINKSRCDESCRIPTOR
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(Star Embed Source (XML)) ) );//SOT_FORMATSTR_ID_EMBED_SOURCE
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(Star Link Source (XML)) ) );//SOT_FORMATSTR_ID_LINK_SOURCE
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(Star Embedded Object (XML)) ) );//SOT_FORMATSTR_ID_EMBEDDED_OBJ
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR_(CFSTR_FILECONTENTS) ) ); //SOT_FORMATSTR_ID_FILECONTENT
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR_(CFSTR_FILEDESCRIPTOR) ) );//SOT_FORMATSTR_ID_FILEGRPDESCRIPTOR
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR_(CFSTR_FILENAME) ) ); //SOT_FORMATSTR_ID_FILENAME
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(SD-OLE) ) );//SOT_FORMATSTR_ID_SD_OLE
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(Embedded Object) ) ); //SOT_FORMATSTR_ID_EMBEDDED_OBJ_OLE
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(Embed Source) ) );//SOT_FORMATSTR_ID_EMBED_SOURCE_OLE
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(Object Descriptor) ) ); //SOT_FORMATSTR_ID_OBJECTDESCRIPTOR_OLE
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(Link Source Descriptor) ) );//SOT_FORMATSTR_ID_LINKSRCDESCRIPTOR_OLE
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(Link Source) ) ); //SOT_FORMATSTR_ID_LINK_SOURCE_OLE
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(SBA-CTRLFORMAT) ) );//SOT_FORMATSTR_ID_SBA_CTRLDATAEXCHANGE
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(OutPlace Object) ) ); //SOT_FORMATSTR_ID_OUTPLACE_OBJ
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(CntOwnClipboard) ) );//SOT_FORMATSTR_ID_CNT_OWN_CLIP
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(SO-INet-Image) ) );//SOT_FORMATSTR_ID_INET_IMAGE
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(Netscape Image Format) ) );//SOT_FORMATSTR_ID_NETSCAPE_IMAGE
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(SBA_FORMEXCHANGE) ) ); //SOT_FORMATSTR_ID_SBA_FORMEXCHANGE
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(SBA_REPORTEXCHANGE) ) );//SOT_FORMATSTR_ID_SBA_REPORTEXCHANGE
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(UniformResourceLocator) ) );//SOT_FORMATSTR_ID_UNIFORMRESOURCELOCATOR
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(StarChartDocument 5.0) ) );//SOT_FORMATSTR_ID_STARCHARTDOCUMENT_50
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(Graphic Object) ) ); //SOT_FORMATSTR_ID_GRAPHOBJ
- m_TranslTable.push_back( mkPublicFormatEntry( OUSTR(application/vnd.sun.xml.writer), OUSTR(Writer 6.0) ) );//SOT_FORMATSTR_ID_STARWRITER_60
- m_TranslTable.push_back( mkPublicFormatEntry( OUSTR(application/vnd.sun.xml.writer.web), OUSTR(Writer/Web 6.0) ) );//SOT_FORMATSTR_ID_STARWRITERWEB_60
- m_TranslTable.push_back( mkPublicFormatEntry( OUSTR(application/vnd.sun.xml.writer.global), OUSTR(Writer/Global 6.0) ) );//SOT_FORMATSTR_ID_STARWRITERGLOB_60
- m_TranslTable.push_back( mkPublicFormatEntry( OUSTR(application/vnd.sun.xml.draw), OUSTR(Draw 6.0) ) );//SOT_FORMATSTR_ID_STARWDRAW_60
- m_TranslTable.push_back( mkPublicFormatEntry( OUSTR(application/vnd.sun.xml.impress), OUSTR(Impress 6.0) ) );//SOT_FORMATSTR_ID_STARIMPRESS_60
- m_TranslTable.push_back( mkPublicFormatEntry( OUSTR(application/vnd.sun.xml.calc), OUSTR(Calc 6.0) ) );//SOT_FORMATSTR_ID_STARCALC_60
- m_TranslTable.push_back( mkPublicFormatEntry( OUSTR(application/vnd.sun.xml.chart), OUSTR(Chart 6.0) ) );//SOT_FORMATSTR_ID_STARCHART_60
- m_TranslTable.push_back( mkPublicFormatEntry( OUSTR(application/vnd.sun.xml.math), OUSTR(Math 6.0) ) );//SOT_FORMATSTR_ID_STARMATH_60
- m_TranslTable.push_back( mkPublicFormatEntry( OUSTR(application/vnd.sun.xml.dialog), OUSTR(Dialog 6.0) ) );//SOT_FORMATSTR_ID_DIALOG_60
- m_TranslTable.push_back( mkPublicFormatEntry( OUSTR(image/bmp), OUSTR(Windows Bitmap) ) );//SOT_FORMATSTR_ID_BMP
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(SO_DUMMYFORMAT_3) ) );//SOT_FORMATSTR_ID_DUMMY3
- m_TranslTable.push_back( mkPrivateFormatEntry( OUSTR(SO_DUMMYFORMAT_4) ) );//SOT_FORMATSTR_ID_DUMMY4
+ //SOT_FORMATSTR_ID_DIF
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-dif;windows_formatname=\"DIF\"", "DIF", "DIF", CF_DIF));
+ // SOT_FORMAT_BITMAP
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-bitmap;windows_formatname=\"Bitmap\"", "Bitmap", "Bitmap", CF_DIB));
+ // SOT_FORMAT_STRING
+ m_TranslTable.push_back(FormatEntry("text/plain;charset=utf-16", "Unicode-Text", "", CF_UNICODETEXT, CppuType_String));
+ // Format Locale - for internal use
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-locale;windows_formatname=\"Locale\"", "Locale", "Locale", CF_LOCALE));
+ // SOT_FORMAT_WMF
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-wmf;windows_formatname=\"Image WMF\"", "Windows MetaFile", "Image WMF", CF_METAFILEPICT));
+ // SOT_FORMAT_EMF
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-emf;windows_formatname=\"Image EMF\"", "Windows Enhanced MetaFile", "Image EMF", CF_ENHMETAFILE));
+ // SOT_FORMAT_FILE_LIST
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-filelist;windows_formatname=\"FileList\"", "FileList", "FileList", CF_HDROP));
+ //SOT_FORMATSTR_ID_SYLK
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-sylk;windows_formatname=\"Sylk\"", "Sylk", "Sylk", CF_SYLK ) );
+ // SOT_FORMAT_GDIMETAFILE
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-gdimetafile;windows_formatname=\"GDIMetaFile\"", "GDIMetaFile"));
+ // SOT_FORMAT_PRIVATE
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-private;windows_formatname=\"Private\"", "Private"));
+ // SOT_FORMAT_FILE
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-file;windows_formatname=\"FileName\"", "FileName"));
+ // SOT_FORMAT_RTF
+ m_TranslTable.push_back(FormatEntry("text/richtext", "Rich Text Format"));
+ // SOT_FORMATSTR_ID_DRAWING
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-drawing;windows_formatname=\"Drawing Format\"", "Drawing Format"));
+ // SOT_FORMATSTR_ID_SVXB
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-svbx;windows_formatname=\"SVXB (StarView Bitmap/Animation)\"", "SVXB (StarView Bitmap/Animation)"));
+ // SOT_FORMATSTR_ID_SVIM
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-svim;windows_formatname=\"SVIM (StarView ImageMap)\"", "SVIM (StarView ImageMap)"));
+ // SOT_FORMATSTR_ID_XFA
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-xfa;windows_formatname=\"XFA (XOutDev FillAttr)\"", "XFA (XOutDev FillAttr)"));
+ // SOT_FORMATSTR_ID_EDITENGINE
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-editengine;windows_formatname=\"EditEngineFormat\"", "EditEngineFormat"));
+ // SOT_FORMATSTR_ID_INTERNALLINK_STATE
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-internallink-state;windows_formatname=\"StatusInfo vom SvxInternalLink\"", "StatusInfo vom SvxInternalLink"));
+ // SOT_FORMATSTR_ID_SOLK
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-solk;windows_formatname=\"SOLK (StarOffice Link)\"", "SOLK (StarOffice Link)"));
+ // SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-netscape-bookmark;windows_formatname=\"Netscape Bookmark\"", "Netscape Bookmark"));
+ // SOT_FORMATSTR_ID_TREELISTBOX
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-treelistbox;windows_formatname=\"SV_LBOX_DD_FORMAT\"", "SV_LBOX_DD_FORMAT"));
+ // SOT_FORMATSTR_ID_NATIVE
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-native;windows_formatname=\"Native\"", "Native"));
+ // SOT_FORMATSTR_ID_OWNERLINK
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-ownerlink;windows_formatname=\"OwnerLink\"", "OwnerLink"));
+ // SOT_FORMATSTR_ID_STARSERVER
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-starserver;windows_formatname=\"StarServerFormat\"", "StarServerFormat"));
+ // SOT_FORMATSTR_ID_STAROBJECT
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-starobject;windows_formatname=\"StarObjectFormat\"", "StarObjectFormat"));
+ // SOT_FORMATSTR_ID_APPLETOBJECT
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-appletobject;windows_formatname=\"Applet Object\"", "Applet Object"));
+ // SOT_FORMATSTR_ID_PLUGIN_OBJECT
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-plugin-object;windows_formatname=\"PlugIn Object\"", "PlugIn Object"));
+ // SOT_FORMATSTR_ID_STARWRITER_30
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-starwriter-30;windows_formatname=\"StarWriter 3.0\"", "StarWriter 3.0"));
+ //SOT_FORMATSTR_ID_STARWRITER_40
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-starwriter-40;windows_formatname=\"StarWriter 4.0\"", "StarWriter 4.0"));
+ //SOT_FORMATSTR_ID_STARWRITER_50
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-starwriter-50;windows_formatname=\"StarWriter 5.0\"", "StarWriter 5.0"));
+ //SOT_FORMATSTR_ID_STARWRITERWEB_40
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-starwriterweb-40;windows_formatname=\"StarWriter/Web 4.0\"", "StarWriter/Web 4.0"));
+ //SOT_FORMATSTR_ID_STARWRITERWEB_50
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-starwriterweb-50;windows_formatname=\"StarWriter/Web 5.0\"", "StarWriter/Web 5.0"));
+ //SOT_FORMATSTR_ID_STARWRITERGLOB_40
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-starwriterglob-40;windows_formatname=\"StarWriter/Global 4.0\"", "StarWriter/Global 4.0"));
+ // SOT_FORMATSTR_ID_STARWRITERGLOB_50
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-starwriterglob-50;windows_formatname=\"StarWriter/Global 5.0\"", "StarWriter/Global 5.0"));
+ //SOT_FORMATSTR_ID_STARDRAW
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-stardraw;windows_formatname=\"StarDrawDocument\"", "StarDrawDocument"));
+ //SOT_FORMATSTR_ID_STARDRAW_40
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-stardraw-40;windows_formatname=\"StarDrawDocument 4.0\"", "StarDrawDocument 4.0"));
+ //SOT_FORMATSTR_ID_STARIMPRESS_50
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-starimpress-50;windows_formatname=\"StarImpress 5.0\"", "StarImpress 5.0"));
+ // SOT_FORMATSTR_ID_STARDRAW_50
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-stardraw-50;windows_formatname=\"StarDraw 5.0\"", "StarDraw 5.0"));
+ //SOT_FORMATSTR_ID_STARCALC
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-starcalc;windows_formatname=\"StarCalcDocument\"", "StarCalcDocument"));
+ //SOT_FORMATSTR_ID_STARCALC_40
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-starcalc-40;windows_formatname=\"StarCalc 4.0\"", "StarCalc 4.0"));
+ // SOT_FORMATSTR_ID_STARCALC_50
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-starcalc-50;windows_formatname=\"StarCalc 5.0\"", "StarCalc 5.0"));
+ // SOT_FORMATSTR_ID_STARCHART
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-starchart;windows_formatname=\"StarChartDocument\"", "StarChartDocument"));
+ // SOT_FORMATSTR_ID_STARCHART_40
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-starchart-40;windows_formatname=\"StarChartDocument 4.0\"", "StarChartDocument 4.0"));
+ // SOT_FORMATSTR_ID_STARCHART_50
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-starchart-50;windows_formatname=\"StarChart 5.0\"", "StarChart 5.0"));
+ //SOT_FORMATSTR_ID_STARIMAGE
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-starimage;windows_formatname=\"StarImageDocument\"", "StarImageDocument"));
+ //SOT_FORMATSTR_ID_STARIMAGE_40
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-starimage-40;windows_formatname=\"StarImageDocument 4.0\"", "StarImageDocument 4.0"));
+ //SOT_FORMATSTR_ID_STARIMAGE_50
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-starimage-50;windows_formatname=\"StarImage 5.0\"", "StarImage 5.0"));
+ //SOT_FORMATSTR_ID_STARMATH
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-starmath;windows_formatname=\"StarMath\"", "StarMath"));
+ //SOT_FORMATSTR_ID_STARMATH_40
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-starmath-40;windows_formatname=\"StarMathDocument 4.0\"", "StarMathDocument 4.0"));
+ //SOT_FORMATSTR_ID_STARMATH_50
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-starmath-50;windows_formatname=\"StarMath 5.0\"", "StarMath 5.0"));
+ //SOT_FORMATSTR_ID_STAROBJECT_PAINTDOC
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-starobject-paintdoc;windows_formatname=\"StarObjectPaintDocument\"", "StarObjectPaintDocument"));
+ //SOT_FORMATSTR_ID_FILLED_AREA
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-filled-area;windows_formatname=\"FilledArea\"", "FilledArea"));
+ //SOT_FORMATSTR_ID_HTML
+ m_TranslTable.push_back(FormatEntry("text/html", "HTML (HyperText Markup Language)"));
+ //SOT_FORMATSTR_ID_HTML_SIMPLE
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-html-simple;windows_formatname=\"HTML Format\"", "HTML Format"));
+ //SOT_FORMATSTR_ID_CHAOS
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-chaos;windows_formatname=\"FORMAT_CHAOS\"", "FORMAT_CHAOS"));
+ //SOT_FORMATSTR_ID_CNT_MSGATTACHFILE
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-msgattachfile;windows_formatname=\"CNT_MSGATTACHFILE_FORMAT\"", "CNT_MSGATTACHFILE_FORMAT"));
+ //SOT_FORMATSTR_ID_BIFF_5
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-biff5;windows_formatname=\"Biff5\"", "Biff5"));
+ //SOT_FORMATSTR_ID_BIFF__5
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-biff-5;windows_formatname=\"Biff 5\"", "Biff 5"));
+ //SOT_FORMATSTR_ID_BIFF_8
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-biff-8;windows_formatname=\"Biff8\"", "Biff8"));
+ //SOT_FORMATSTR_ID_SYLK_BIGCAPS
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-sylk-bigcaps;windows_formatname=\"SYLK\"", "SYLK"));
+ //SOT_FORMATSTR_ID_LINK
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-link;windows_formatname=\"Link\"", "Link"));
+ //SOT_FORMATSTR_ID_STARDRAW_TABBAR
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-stardraw-tabbar;windows_formatname=\"StarDraw TabBar\"", "StarDraw TabBar"));
+ //SOT_FORMATSTR_ID_SONLK
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-sonlk;windows_formatname=\"SONLK (StarOffice Navi Link)\"", "SONLK (StarOffice Navi Link)"));
+ //SOT_FORMATSTR_ID_MSWORD_DOC
+ m_TranslTable.push_back(FormatEntry("application/msword", "MSWordDoc"));
+ //SOT_FORMATSTR_ID_STAR_FRAMESET_DOC
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-star-frameset-doc;windows_formatname=\"StarFrameSetDocument\"", "StarFrameSetDocument"));
+ //SOT_FORMATSTR_ID_OFFICE_DOC
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-office-doc;windows_formatname=\"OfficeDocument\"", "OfficeDocument"));
+ //SOT_FORMATSTR_ID_NOTES_DOCINFO
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-notes-docinfo;windows_formatname=\"NotesDocInfo\"", "NotesDocInfo"));
+ //SOT_FORMATSTR_ID_NOTES_HNOTE
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-notes-hnote;windows_formatname=\"NoteshNote\"", "NoteshNote"));
+ //SOT_FORMATSTR_ID_NOTES_NATIVE
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-notes-native;windows_formatname=\"Native\"", "Native"));
+ //SOT_FORMATSTR_ID_SFX_DOC
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-sfx-doc;windows_formatname=\"SfxDocument\"", "SfxDocument"));
+ //SOT_FORMATSTR_ID_EVDF
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-evdf;windows_formatname=\"EVDF (Explorer View Dummy Format)\"", "EVDF (Explorer View Dummy Format)"));
+ //SOT_FORMATSTR_ID_ESDF
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-esdf;windows_formatname=\"ESDF (Explorer Search Dummy Format)\"", "ESDF (Explorer Search Dummy Format)"));
+ //SOT_FORMATSTR_ID_IDF
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-idf;windows_formatname=\"IDF (Iconview Dummy Format)\"", "IDF (Iconview Dummy Format)"));
+ //SOT_FORMATSTR_ID_EFTP
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-eftp;windows_formatname=\"EFTP (Explorer Ftp File)\"", "EFTP (Explorer Ftp File)"));
+ //SOT_FORMATSTR_ID_EFD
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-efd;windows_formatname=\"EFD (Explorer Ftp Dir)\"", "EFD (Explorer Ftp Dir)"));
+ //SOT_FORMATSTR_ID_SVX_FORMFIELDEXCH
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-svx-formfieldexch;windows_formatname=\"SvxFormFieldExch\"", "SvxFormFieldExch"));
+ //SOT_FORMATSTR_ID_EXTENDED_TABBAR
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-extended-tabbar;windows_formatname=\"ExtendedTabBar\"", "ExtendedTabBar"));
+ //SOT_FORMATSTR_ID_SBA_DATAEXCHANGE
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-sba-dataexchange;windows_formatname=\"SBA-DATAFORMAT\"", "SBA-DATAFORMAT"));
+ //SOT_FORMATSTR_ID_SBA_FIELDDATAEXCHANGE
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-sba-fielddataexchange;windows_formatname=\"SBA-FIELDFORMAT\"", "SBA-FIELDFORMAT"));
+ //SOT_FORMATSTR_ID_SBA_PRIVATE_URL
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-sba-private-url;windows_formatname=\"SBA-PRIVATEURLFORMAT\"", "SBA-PRIVATEURLFORMAT"));
+ //SOT_FORMATSTR_ID_SBA_TABED
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-sba-tabed;windows_formatname=\"Tabed\"", "Tabed"));
+ //SOT_FORMATSTR_ID_SBA_TABID
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-sba-tabid;windows_formatname=\"Tabid\"", "Tabid"));
+ //SOT_FORMATSTR_ID_SBA_JOIN
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-sba-join;windows_formatname=\"SBA-JOINFORMAT\"", "SBA-JOINFORMAT"));
+ //SOT_FORMATSTR_ID_OBJECTDESCRIPTOR
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-objectdescriptor-xml;windows_formatname=\"Star Object Descriptor (XML)\"", "Star Object Descriptor (XML)"));
+ //SOT_FORMATSTR_ID_LINKSRCDESCRIPTOR
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-linksrcdescriptor-xml;windows_formatname=\"Star Link Source Descriptor (XML)\"", "Star Link Source Descriptor (XML)"));
+ //SOT_FORMATSTR_ID_EMBED_SOURCE
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-embed-source-xml;windows_formatname=\"Star Embed Source (XML)\"", "Star Embed Source (XML)"));
+ //SOT_FORMATSTR_ID_LINK_SOURCE
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-link-source-xml;windows_formatname=\"Star Link Source (XML)\"", "Star Link Source (XML)"));
+ //SOT_FORMATSTR_ID_EMBEDDED_OBJ
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-embedded-obj-xml;windows_formatname=\"Star Embedded Object (XML)\"", "Star Embedded Object (XML)"));
+ //SOT_FORMATSTR_ID_FILECONTENT
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-filecontent;windows_formatname=\"" CFSTR_FILECONTENTS "\"", CFSTR_FILECONTENTS));
+ //SOT_FORMATSTR_ID_FILEGRPDESCRIPTOR
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-filegrpdescriptor;windows_formatname=\"" CFSTR_FILEDESCRIPTOR "\"", CFSTR_FILEDESCRIPTOR));
+ //SOT_FORMATSTR_ID_FILENAME
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-filename;windows_formatname=\"" CFSTR_FILENAME "\"", CFSTR_FILENAME));
+ //SOT_FORMATSTR_ID_SD_OLE
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-sd-ole;windows_formatname=\"SD-OLE\"", "SD-OLE"));
+ //SOT_FORMATSTR_ID_EMBEDDED_OBJ_OLE
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-embedded-obj-ole;windows_formatname=\"Embedded Object\"", "Embedded Object"));
+ //SOT_FORMATSTR_ID_EMBED_SOURCE_OLE
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-embed-source-ole;windows_formatname=\"Embed Source\"", "Embed Source"));
+ //SOT_FORMATSTR_ID_OBJECTDESCRIPTOR_OLE
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-objectdescriptor-ole;windows_formatname=\"Object Descriptor\"", "Object Descriptor"));
+ //SOT_FORMATSTR_ID_LINKSRCDESCRIPTOR_OLE
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-linkdescriptor-ole;windows_formatname=\"Link Source Descriptor\"", "Link Source Descriptor"));
+ //SOT_FORMATSTR_ID_LINK_SOURCE_OLE
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-link-source-ole;windows_formatname=\"Link Source\"", "Link Source"));
+ //SOT_FORMATSTR_ID_SBA_CTRLDATAEXCHANGE
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-sba-ctrldataexchange;windows_formatname=\"SBA-CTRLFORMAT\"", "SBA-CTRLFORMAT"));
+ //SOT_FORMATSTR_ID_OUTPLACE_OBJ
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-outplace-obj;windows_formatname=\"OutPlace Object\"", "OutPlace Object"));
+ //SOT_FORMATSTR_ID_CNT_OWN_CLIP
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-cnt-own-clip;windows_formatname=\"CntOwnClipboard\"", "CntOwnClipboard"));
+ //SOT_FORMATSTR_ID_INET_IMAGE
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-inet-image;windows_formatname=\"SO-INet-Image\"", "SO-INet-Image"));
+ //SOT_FORMATSTR_ID_NETSCAPE_IMAGE
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-netscape-image;windows_formatname=\"Netscape Image Format\"", "Netscape Image Format"));
+ //SOT_FORMATSTR_ID_SBA_FORMEXCHANGE
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-sba-formexchange;windows_formatname=\"SBA_FORMEXCHANGE\"", "SBA_FORMEXCHANGE")); //SOT_FORMATSTR_ID_SBA_REPORTEXCHANGE
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-sba-reportexchange;windows_formatname=\"SBA_REPORTEXCHANGE\"", "SBA_REPORTEXCHANGE"));
+ //SOT_FORMATSTR_ID_UNIFORMRESOURCELOCATOR
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-uniformresourcelocator;windows_formatname=\"UniformResourceLocator\"", "UniformResourceLocator"));
+ //SOT_FORMATSTR_ID_STARCHARTDOCUMENT_50
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-starchartdocument-50;windows_formatname=\"StarChartDocument 5.0\"", "StarChartDocument 5.0"));
+ //SOT_FORMATSTR_ID_GRAPHOBJ
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-graphobj;windows_formatname=\"Graphic Object\"", "Graphic Object"));
+ //SOT_FORMATSTR_ID_STARWRITER_60
+ m_TranslTable.push_back(FormatEntry("application/vnd.sun.xml.writer", "Writer 6.0"));
+ //SOT_FORMATSTR_ID_STARWRITERWEB_60
+ m_TranslTable.push_back(FormatEntry("application/vnd.sun.xml.writer.web", "Writer/Web 6.0"));
+ //SOT_FORMATSTR_ID_STARWRITERGLOB_60
+ m_TranslTable.push_back(FormatEntry("application/vnd.sun.xml.writer.global", "Writer/Global 6.0"));
+ //SOT_FORMATSTR_ID_STARWDRAW_60
+ m_TranslTable.push_back(FormatEntry("application/vnd.sun.xml.draw", "Draw 6.0"));
+ //SOT_FORMATSTR_ID_STARIMPRESS_60
+ m_TranslTable.push_back(FormatEntry("application/vnd.sun.xml.impress", "Impress 6.0"));
+ //SOT_FORMATSTR_ID_STARCALC_60
+ m_TranslTable.push_back(FormatEntry("application/vnd.sun.xml.calc", "Calc 6.0"));
+ //SOT_FORMATSTR_ID_STARCHART_60
+ m_TranslTable.push_back(FormatEntry("application/vnd.sun.xml.chart", "Chart 6.0"));
+ //SOT_FORMATSTR_ID_STARMATH_60
+ m_TranslTable.push_back(FormatEntry("application/vnd.sun.xml.math", "Math 6.0"));
+ //SOT_FORMATSTR_ID_DIALOG_60
+ m_TranslTable.push_back(FormatEntry("application/vnd.sun.xml.dialog", "Dialog 6.0"));
+ //SOT_FORMATSTR_ID_BMP
+ m_TranslTable.push_back(FormatEntry("image/bmp", "Windows Bitmap"));
+ //SOT_FORMATSTR_ID_DUMMY3
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-dummy3;windows_formatname=\"SO_DUMMYFORMAT_3\"", "SO_DUMMYFORMAT_3"));
+ //SOT_FORMATSTR_ID_DUMMY4
+ m_TranslTable.push_back(FormatEntry("application/x-openoffice-dummy4;windows_formatname=\"SO_DUMMYFORMAT_4\"", "SO_DUMMYFORMAT_4"));
}
// -------------------------------------------------
@@ -514,74 +630,20 @@ void SAL_CALL CDataFormatTranslator::findStdFormatIdOrNativeFormatNameForFullMed
//
// -------------------------------------------------
-inline
-sal_Bool CDataFormatTranslator::isTextPlainMediaType( const OUString& fullMediaType ) const
+inline sal_Bool CDataFormatTranslator::isTextPlainMediaType( const OUString& fullMediaType ) const
{
- return ( fullMediaType.equalsIgnoreAsciiCase( OUSTR( text/plain ) ) );
+ return (fullMediaType.equalsIgnoreAsciiCase(OUSTR(text/plain)));
}
// -------------------------------------------------
//
// -------------------------------------------------
-DataFlavor SAL_CALL CDataFormatTranslator::mkDataFlv( const OUString& cnttype, const OUString& hpname, Type dtype )
+DataFlavor SAL_CALL CDataFormatTranslator::mkDataFlv(const OUString& cnttype, const OUString& hpname, Type dtype)
{
DataFlavor dflv;
-
dflv.MimeType = cnttype;
dflv.HumanPresentableName = hpname;
dflv.DataType = dtype;
-
return dflv;
}
-
-// -------------------------------------------------
-//
-// -------------------------------------------------
-
-FormatEntry CDataFormatTranslator::mkFormatEntry( const DataFlavor& aDataFlavor, const OUString& aNativeFormatName, sal_Int32 aStandardFormatId )
-{
- FormatEntry fmtDescr;
-
- fmtDescr.aDataFlavor = aDataFlavor;
- fmtDescr.aNativeFormatName = aNativeFormatName;
- fmtDescr.aStandardFormatId = aStandardFormatId;
-
- return fmtDescr;
-}
-
-// -------------------------------------------------
-//
-// -------------------------------------------------
-
-FormatEntry CDataFormatTranslator::mkPrivateFormatEntry( const OUString& aNativeFormatName, CLIPFORMAT aClipformat, const OUString& aHpName, Type aCppuType )
-{
- DataFlavor aDFlv;
- OUString quotedFName = OUString::createFromAscii( "\"" ) + aNativeFormatName + OUString::createFromAscii( "\"" );
-
- if ( aHpName.getLength( ) )
- aDFlv = mkDataFlv( PRIVATE_OO + quotedFName, aHpName, aCppuType );
- else
- aDFlv = mkDataFlv( PRIVATE_OO + quotedFName, aNativeFormatName, aCppuType );
-
- FormatEntry fmtentry = mkFormatEntry( aDFlv, aNativeFormatName, aClipformat );
-
- return fmtentry;
-}
-
-// -------------------------------------------------
-//
-// -------------------------------------------------
-
-FormatEntry CDataFormatTranslator::mkPublicFormatEntry( const OUString& aContentType, const OUString& aNativeFormatName, CLIPFORMAT aClipformat, const OUString& aHpName, Type aCppuType )
-{
- DataFlavor aDFlv;
- OUString quotedFName = OUString::createFromAscii( "\"" ) + aNativeFormatName + OUString::createFromAscii( "\"" );
-
- if ( aHpName.getLength( ) )
- aDFlv = mkDataFlv( aContentType, aHpName, aCppuType );
- else
- aDFlv = mkDataFlv( aContentType, quotedFName, aCppuType );
-
- return mkFormatEntry( aDFlv, aNativeFormatName, aClipformat );
-}
diff --git a/dtrans/source/win32/ftransl/ftransl.hxx b/dtrans/source/win32/ftransl/ftransl.hxx
index 2f0f92defee0..aef310ff6645 100644
--- a/dtrans/source/win32/ftransl/ftransl.hxx
+++ b/dtrans/source/win32/ftransl/ftransl.hxx
@@ -2,9 +2,9 @@
*
* $RCSfile: ftransl.hxx,v $
*
- * $Revision: 1.2 $
+ * $Revision: 1.3 $
*
- * last change: $Author: tra $ $Date: 2001-02-27 07:38:03 $
+ * last change: $Author: hr $ $Date: 2003-03-25 14:05:38 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -99,16 +99,52 @@
#include <windows.h>
//------------------------------------------------------------------------
-// deklarations
+// declarations
//------------------------------------------------------------------------
struct FormatEntry
{
+ FormatEntry(){};
+
+#if (defined(_MSC_VER) && (_MSC_VER < 1300))
+ FormatEntry(
+ const char* mime_content_type,
+ const char* human_presentable_name,
+ const char* native_format_name = NULL,
+ CLIPFORMAT std_clipboard_format_id = CF_INVALID,
+ com::sun::star::uno::Type const & cppu_type = getCppuType((const com::sun::star::uno::Sequence<sal_Int8> *) 0 )
+ )
+#else
+ FormatEntry(
+ const char* mime_content_type,
+ const char* human_presentable_name,
+ const char* native_format_name = NULL,
+ CLIPFORMAT std_clipboard_format_id = CF_INVALID,
+ ::com::sun::star::uno::Type const & cppu_type = ::getCppuType((const ::com::sun::star::uno::Sequence<sal_Int8> *) 0 )
+ )
+#endif
+ {
+ aDataFlavor.MimeType = rtl::OUString::createFromAscii(mime_content_type);
+ aDataFlavor.HumanPresentableName = rtl::OUString::createFromAscii(human_presentable_name);
+ aDataFlavor.DataType = cppu_type;
+
+ if (native_format_name)
+ aNativeFormatName = rtl::OUString::createFromAscii(native_format_name);
+ else
+ aNativeFormatName = rtl::OUString::createFromAscii(human_presentable_name);
+
+ aStandardFormatId = std_clipboard_format_id;
+ }
+
com::sun::star::datatransfer::DataFlavor aDataFlavor;
rtl::OUString aNativeFormatName;
sal_Int32 aStandardFormatId;
};
+//------------------------------------------------
+// CDataFormatTranslator
+//------------------------------------------------
+
class CDataFormatTranslator : public
cppu::WeakImplHelper2< com::sun::star::datatransfer::XDataFormatTranslator, \
com::sun::star::lang::XServiceInfo >
@@ -151,24 +187,9 @@ private:
const com::sun::star::uno::Reference< com::sun::star::datatransfer::XMimeContentTypeFactory >& aRefXMimeFactory,
const rtl::OUString& aFullMediaType, com::sun::star::uno::Any& aAny ) const;
- com::sun::star::datatransfer::DataFlavor SAL_CALL mkDataFlv( const rtl::OUString& cnttype, const rtl::OUString& hpname, ::com::sun::star::uno::Type dtype );
-
sal_Bool isTextPlainMediaType( const rtl::OUString& fullMediaType ) const;
- FormatEntry SAL_CALL mkFormatEntry( const com::sun::star::datatransfer::DataFlavor& aDataFlavor,
- const rtl::OUString& aNativeFormatName,
- sal_Int32 aStandardFormatId );
-
- FormatEntry mkPrivateFormatEntry( const rtl::OUString& aNativeFormatName,
- CLIPFORMAT aClipformat = CF_INVALID,
- const rtl::OUString& aHpName = rtl::OUString::createFromAscii( "" ),
- com::sun::star::uno::Type aCppuType = ::getCppuType( (const com::sun::star::uno::Sequence< sal_Int8 >*) 0 ));
-
- FormatEntry mkPublicFormatEntry( const rtl::OUString& aContentType,
- const rtl::OUString& aNativeFormatName = rtl::OUString::createFromAscii( "" ),
- CLIPFORMAT aClipformat = CF_INVALID,
- const rtl::OUString& aHpName = rtl::OUString::createFromAscii( "" ),
- com::sun::star::uno::Type aCppuType = ::getCppuType( (const com::sun::star::uno::Sequence< sal_Int8 >*) 0 ));
+ com::sun::star::datatransfer::DataFlavor SAL_CALL mkDataFlv( const rtl::OUString& cnttype, const rtl::OUString& hpname, ::com::sun::star::uno::Type dtype );
private:
std::vector< FormatEntry > m_TranslTable;
diff --git a/dtrans/source/win32/workbench/test_wincb.cxx b/dtrans/source/win32/workbench/test_wincb.cxx
index 3db4b5760c79..33139f3b537d 100644
--- a/dtrans/source/win32/workbench/test_wincb.cxx
+++ b/dtrans/source/win32/workbench/test_wincb.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: test_wincb.cxx,v $
*
- * $Revision: 1.6 $
+ * $Revision: 1.7 $
*
- * last change: $Author: tra $ $Date: 2001-09-28 12:28:09 $
+ * last change: $Author: hr $ $Date: 2003-03-25 14:05:40 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -59,12 +59,18 @@
*
************************************************************************/
-//----------------------------------
+
+//_________________________________________________________________________________________________________________________
// interface includes
-//----------------------------------
+//_________________________________________________________________________________________________________________________
+
#include "..\misc\ImplHelper.hxx"
+//_________________________________________________________________________________________________________________________
+// other includes
+//_________________________________________________________________________________________________________________________
+
#ifndef _CPPUHELPER_SERVICEFACTORY_HXX_
#include <cppuhelper/servicefactory.hxx>
#endif
@@ -121,6 +127,18 @@
#include <process.h>
+//-------------------------------------------------------------
+// my defines
+//-------------------------------------------------------------
+
+#define TEST_CLIPBOARD
+#define RDB_SYSPATH "d:\\projects\\src623\\dtrans\\wntmsci7\\bin\\applicat.rdb"
+#define WINCLIPBOARD_SERVICE_NAME L"com.sun.star.datatransfer.clipboard.SystemClipboard"
+#define WRITE_CB
+#define EVT_MANUAL_RESET TRUE
+#define EVT_INIT_NONSIGNALED FALSE
+#define EVT_NONAME ""
+
//------------------------------------------------------------
// namesapces
//------------------------------------------------------------
@@ -134,38 +152,12 @@ using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::io;
using namespace ::com::sun::star::lang;
-//-------------------------------------------------------------
-// my defines
-//-------------------------------------------------------------
-
-#define TEST_CLIPBOARD
-#define WRITE_CB
-
-const char RDB_SYSPATH[] = "d:\\projects\\src638\\dtrans\\wntmsci7\\bin\\applicat.rdb";
-const OUString WINCLIPBOARD_SERVICE_NAME = OUString::createFromAscii( "com.sun.star.datatransfer.clipboard.SystemClipboard" );
-
-const bool EVT_MANUAL_RESET = true;
-const bool EVT_AUTO_RESET = false;
-const bool EVT_INIT_NONSIGNALED = false;
-const bool EVT_INIT_SIGNALED = true;
-const sal_Int32 MAX_LOOP = 1;//000;
-
-char EVT_NONAME[] = "";
-
-enum APARTMENT_MODEL
-{
- STA = 0,
- MTA
-};
-
//------------------------------------------------------------
// globales
//------------------------------------------------------------
-Reference< XTransferable > g_xTransferable;
-HANDLE g_HandleArray[2];
-HANDLE g_hEvtThreadWakeup;
-Reference< XClipboard > g_xClipboard;
+Reference< XTransferable > rXTransfRead;
+HANDLE g_hEvtThreadWakeup;
//------------------------------------------------------------
//
@@ -174,24 +166,30 @@ Reference< XClipboard > g_xClipboard;
class CClipboardListener : public WeakImplHelper1 < XClipboardListener >
{
public:
- virtual void SAL_CALL disposing( const EventObject& Source )
- throw(RuntimeException)
- {
- }
+ ~CClipboardListener( );
//-------------------------------------------------
// XClipboardListener
//-------------------------------------------------
- virtual void SAL_CALL changedContents( const ClipboardEvent& event )
- throw( RuntimeException )
- {
- //OSL_ENSURE( sal_False, "clipboard content changed" );
- g_xTransferable = event.Contents;
- SetEvent( g_hEvtThreadWakeup );
- }
+ virtual void SAL_CALL disposing( const EventObject& Source ) throw(RuntimeException);
+ virtual void SAL_CALL changedContents( const ClipboardEvent& event ) throw( RuntimeException );
};
+CClipboardListener::~CClipboardListener( )
+{
+}
+
+void SAL_CALL CClipboardListener::disposing( const EventObject& Source ) throw(RuntimeException)
+{
+
+}
+
+void SAL_CALL CClipboardListener::changedContents( const ClipboardEvent& event ) throw( RuntimeException )
+{
+ //MessageBox( NULL, TEXT("Clipboard content changed"), TEXT("Info"), MB_OK | MB_ICONINFORMATION );
+}
+
//------------------------------------------------------------
//
//------------------------------------------------------------
@@ -208,18 +206,15 @@ public:
virtual Any SAL_CALL getTransferData( const DataFlavor& aFlavor )
throw(UnsupportedFlavorException, IOException, RuntimeException);
- virtual Sequence< DataFlavor > SAL_CALL getTransferDataFlavors( )
- throw(RuntimeException);
+ virtual Sequence< DataFlavor > SAL_CALL getTransferDataFlavors( ) throw(RuntimeException);
- virtual sal_Bool SAL_CALL isDataFlavorSupported( const DataFlavor& aFlavor )
- throw(RuntimeException);
+ virtual sal_Bool SAL_CALL isDataFlavorSupported( const DataFlavor& aFlavor ) throw(RuntimeException);
//-------------------------------------------------
// XClipboardOwner
//-------------------------------------------------
- virtual void SAL_CALL lostOwnership(
- const Reference< XClipboard >& xClipboard, const Reference< XTransferable >& xTransferable )
+ virtual void SAL_CALL lostOwnership( const Reference< XClipboard >& xClipboard, const Reference< XTransferable >& xTrans )
throw(RuntimeException);
private:
@@ -237,8 +232,11 @@ CTransferable::CTransferable( ) :
{
DataFlavor df;
- df.MimeType = L"text/plain;charset=utf-16";
- df.DataType = getCppuType( ( OUString* )0 );
+ //df.MimeType = L"text/plain;charset=utf-16";
+ //df.DataType = getCppuType( ( OUString* )0 );
+
+ df.MimeType = L"text/plain;charset=Windows1252";
+ df.DataType = getCppuType( (Sequence< sal_Int8 >*)0 );
m_FlavorList[0] = df;
}
@@ -252,8 +250,23 @@ Any SAL_CALL CTransferable::getTransferData( const DataFlavor& aFlavor )
{
Any anyData;
+ /*
if ( aFlavor.MimeType == m_FlavorList[0].MimeType )
- anyData <<= m_Data;
+ anyData = makeAny( m_Data );
+ */
+ if ( aFlavor.MimeType.equalsIgnoreCase( m_FlavorList[0].MimeType ) )
+ {
+ OString text(
+ m_Data.getStr( ),
+ m_Data.getLength( ),
+ RTL_TEXTENCODING_ASCII_US );
+
+ Sequence< sal_Int8 > textStream( text.getLength( ) + 1 );
+
+ rtl_copyMemory( textStream.getArray( ), text.getStr( ), textStream.getLength( ) );
+
+ anyData = makeAny( textStream );
+ }
else
throw UnsupportedFlavorException( );
@@ -291,108 +304,10 @@ sal_Bool SAL_CALL CTransferable::isDataFlavorSupported( const DataFlavor& aFlavo
//----------------------------------------------------------------
void SAL_CALL CTransferable::lostOwnership(
- const Reference< XClipboard >& xClipboard, const Reference< XTransferable >& xTransferable )
+ const Reference< XClipboard >& xClipboard, const Reference< XTransferable >& xTrans )
throw(RuntimeException)
{
- OSL_ENSURE( sal_False, "lostOwnership" );
-}
-
-//------------------------------------------------------------
-//
-//------------------------------------------------------------
-
-void SetupCOMApartment( APARTMENT_MODEL apm )
-{
- // setup another apartment
- HRESULT hr;
-
- switch ( apm )
- {
- case STA:
- hr = CoInitializeEx( NULL, COINIT_APARTMENTTHREADED );
- OSL_ENSURE( SUCCEEDED( hr ), "CoInitialize Sta failed" );
- break;
-
- case MTA:
- hr = CoInitializeEx( NULL, COINIT_MULTITHREADED );
- OSL_ENSURE( SUCCEEDED( hr ), "CoInitialize Mta failed" );
- break;
-
- default:
- CoUninitialize( );
- OSL_ENSURE( false, "invalid apartment model" );
- }
-}
-
-//------------------------------------------------------------
-//
-//------------------------------------------------------------
-
-unsigned int _stdcall ThreadProc(LPVOID pParam)
-{
- APARTMENT_MODEL* apm = reinterpret_cast< APARTMENT_MODEL* >( pParam );
-
- SetupCOMApartment( *apm );
-
- sal_Int32 n = MAX_LOOP;
-
- for ( sal_Int32 i = 0; i < n; i++ )
- {
- WaitForSingleObject( g_hEvtThreadWakeup, INFINITE );
-
- try
- {
- if ( g_xTransferable.is( ) )
- {
- Sequence< DataFlavor > aFlavorList = g_xTransferable->getTransferDataFlavors( );
- sal_Int32 nFlavors = aFlavorList.getLength( );
-
- OSL_ENSURE( nFlavors > 0, "clipboard empty" );
-
- for ( sal_Int32 i = 0; i < nFlavors; i++ )
- {
- DataFlavor aFlavor = aFlavorList[i];
- Any aAny = g_xTransferable->getTransferData( aFlavor );
- OSL_ENSURE( aAny.hasValue( ), "empty clipboard" );
- }
- }
- }
- catch( UnsupportedFlavorException& )
- {
- OSL_ENSURE( sal_False, "unsupported flavor exception" );
- }
- catch( ... )
- {
- OSL_ENSURE( sal_False, "exception caught" );
- }
-
- if ( i < ( n - 1 ) )
- SetEvent( g_HandleArray[0] );
- }
-
- if ( (STA == *apm) || (MTA == *apm) )
- CoUninitialize( );
-
- return 0;
-}
-
-//----------------------------------------------------------------
-//
-//----------------------------------------------------------------
-
-void GetFileName( )
-{
- OPENFILENAME ofn;
- TCHAR aFileNameBuffer[MAX_PATH];
-
- ZeroMemory( &ofn, sizeof( ofn ) );
-
- ofn.lStructSize = sizeof( ofn );
- ofn.lpstrFile = aFileNameBuffer;
- ofn.nMaxFile = MAX_PATH;
- ofn.Flags = OFN_EXPLORER;
-
- GetOpenFileName( &ofn );
+ //MessageBox( NULL, TEXT("No longer clipboard owner"), TEXT("Info"), MB_OK | MB_ICONINFORMATION );
}
//----------------------------------------------------------------
@@ -401,93 +316,75 @@ void GetFileName( )
int SAL_CALL main( int nArgc, char* Argv[] )
{
- if ( nArgc < 4 )
- {
- printf( "Use 0|1 [sta, mta] 0|1 [sta,mta] 0|1 [release XTransferable before|after CoUninitialize]\n" );
- Sleep( 3000 );
- return 0;
- }
-
- // read parameter
- APARTMENT_MODEL apm = (APARTMENT_MODEL)atoi( Argv[1] );
- SetupCOMApartment( apm );
-
- g_hEvtThreadWakeup = CreateEventA(
- 0, EVT_AUTO_RESET, EVT_INIT_NONSIGNALED, EVT_NONAME );
-
- OSL_ENSURE( g_hEvtThreadWakeup, "can't create thread wakeup event" );
-
- g_HandleArray[0] = CreateEventA(
- 0, EVT_AUTO_RESET, EVT_INIT_SIGNALED, EVT_NONAME );
+ // create a multi-threaded apartment; we can test only
+ // with a multithreaded apartment because for a single
+ // threaded apartment we need a message loop to deliver
+ // messages to our XTDataObject
+ //HRESULT hr = CoInitializeEx( NULL, COINIT_MULTITHREADED );
+ HRESULT hr = CoInitialize( NULL );
- OSL_ENSURE( g_HandleArray[0], "can't create clipboard thread ready event" );
+ char buff[6];
- apm = (APARTMENT_MODEL)atoi( Argv[2] );
+ LCID lcid = MAKELCID( MAKELANGID( LANG_GERMAN, SUBLANG_GERMAN ), SORT_DEFAULT );
- unsigned uThreadId;
- g_HandleArray[1] = (HANDLE)_beginthreadex( NULL, 0, ThreadProc, &apm, 0, &uThreadId );
- OSL_ENSURE( g_HandleArray[1], "cannot create thread" );
+ BOOL bValid = IsValidLocale( lcid, LCID_SUPPORTED );
+ GetLocaleInfoA( lcid, LOCALE_IDEFAULTANSICODEPAGE, buff, sizeof( buff ) );
//-------------------------------------------------
// get the global service-manager
//-------------------------------------------------
- OUString rdbName = OUString::createFromAscii( RDB_SYSPATH );
+
+ OUString rdbName = OUString( RTL_CONSTASCII_USTRINGPARAM( RDB_SYSPATH ) );
Reference< XMultiServiceFactory > g_xFactory( createRegistryServiceFactory( rdbName ) );
- OSL_ENSURE( g_xFactory.is( ), "can't create RegistryServiceFactory");
+
+ // Print a message if an error occured.
+ if ( !g_xFactory.is( ) )
+ {
+ OSL_ENSURE(sal_False, "Can't create RegistryServiceFactory");
+ return(-1);
+ }
//-------------------------------------------------
// try to get an Interface to a XFilePicker Service
//-------------------------------------------------
- g_xClipboard = Reference< XClipboard >( g_xFactory->createInstance( OUString( WINCLIPBOARD_SERVICE_NAME ) ), UNO_QUERY );
- OSL_ENSURE( g_xClipboard.is( ), "error creating clipboard service" );
+ Reference< XTransferable > rXTransf( static_cast< XTransferable* >( new CTransferable ) );
+
+ Reference< XClipboard >
+ xClipboard( g_xFactory->createInstance( OUString( WINCLIPBOARD_SERVICE_NAME ) ), UNO_QUERY );
+ if ( !xClipboard.is( ) )
+ {
+ OSL_ENSURE( sal_False, "Error creating Clipboard Service" );
+ return(-1);
+ }
+
+ Reference< XClipboardNotifier > xClipNotifier( xClipboard, UNO_QUERY );
+ Reference< XClipboardListener > rXClipListener( static_cast< XClipboardListener* >( new CClipboardListener() ) );
+ xClipNotifier->addClipboardListener( rXClipListener );
- Reference< XTransferable > rXTransf( static_cast< XTransferable* >( new CTransferable( ) ) );
+ MessageBox( NULL, TEXT("Go"), TEXT("INFO"), MB_OK|MB_ICONINFORMATION);
- Reference< XClipboardNotifier > xClipboardNotifier( g_xClipboard, UNO_QUERY );
- Reference< XClipboardListener > rXClipListener( static_cast< XClipboardListener* >( new CClipboardListener( ) ), UNO_QUERY );
- OSL_ENSURE( rXClipListener.is( ), "can't create clipboard listener" );
+ // set new clipboard content
+ xClipboard->setContents( rXTransf, Reference< XClipboardOwner >( rXTransf, UNO_QUERY ) );
- xClipboardNotifier->addClipboardListener( rXClipListener );
+ /*
+ MessageBox( NULL, TEXT("Clear content"), TEXT("INFO"), MB_OK|MB_ICONINFORMATION);
- sal_Bool bContinue = sal_True;
+ Reference< XClipboardOwner > rXClipOwner;
+ Reference< XTransferable > rXEmptyTransf;
+ xClipboard->setContents( rXEmptyTransf, rXClipOwner );
+ */
- while ( bContinue )
- {
- DWORD dwResult = WaitForMultipleObjects(
- 2, g_HandleArray, false, INFINITE );
-
- switch( dwResult )
- {
- case WAIT_OBJECT_0:
- GetFileName( );
- /*
- g_xTransferable = g_xClipboard->getContents( );
- SetEvent( g_hEvtThreadWakeup );
- */
- break;
-
- case WAIT_OBJECT_0 + 1:
- // when Argv[3] is true we release the transferable
- // here before CoUninitialize else we can see what
- // happens when the transferable will be destroyed
- // after CoUninitialize
- if ( (bool)atoi( Argv[3] ) )
- g_xTransferable = Reference< XTransferable >( );
-
- // close the thread handle and end the loop
- CloseHandle( g_HandleArray[1] );
- bContinue = sal_False;
- break;
-
- default:
- OSL_ENSURE( sal_False, "invalid option" );
- }
- }
+ MessageBox( NULL, TEXT("Stop"), TEXT("INFO"), MB_OK|MB_ICONINFORMATION);
+
+ // flush the clipboard content
+ Reference< XFlushableClipboard > rXFlushableClip( xClipboard, UNO_QUERY );
+ rXFlushableClip->flushClipboard( );
+ rXFlushableClip = Reference< XFlushableClipboard >( );
- xClipboardNotifier->removeClipboardListener( rXClipListener );
+ xClipNotifier->removeClipboardListener( rXClipListener );
rXClipListener = Reference< XClipboardListener >( );
- xClipboardNotifier = Reference< XClipboardNotifier >( );
+ xClipNotifier = Reference< XClipboardNotifier >( );
//--------------------------------------------------
// shutdown the service manager
@@ -495,7 +392,9 @@ int SAL_CALL main( int nArgc, char* Argv[] )
// Cast factory to XComponent
Reference< XComponent > xComponent( g_xFactory, UNO_QUERY );
- OSL_ENSURE( xComponent.is( ), "Error shuting down" );
+
+ if ( !xComponent.is() )
+ OSL_ENSURE(sal_False, "Error shuting down");
// Dispose and clear factory
xComponent->dispose();
@@ -504,8 +403,7 @@ int SAL_CALL main( int nArgc, char* Argv[] )
g_xFactory.clear();
g_xFactory = Reference< XMultiServiceFactory >();
- if ( (STA == apm) || (MTA == apm) )
- CoUninitialize( );
+ CoUninitialize( );
return 0;
}
diff --git a/dtrans/source/win32/workbench/testmarshal.cxx b/dtrans/source/win32/workbench/testmarshal.cxx
index c4b79bc3651e..f700e6e75168 100644
--- a/dtrans/source/win32/workbench/testmarshal.cxx
+++ b/dtrans/source/win32/workbench/testmarshal.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: testmarshal.cxx,v $
*
- * $Revision: 1.3 $
+ * $Revision: 1.4 $
*
- * last change: $Author: tra $ $Date: 2001-07-26 11:20:56 $
+ * last change: $Author: hr $ $Date: 2003-03-25 14:05:40 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -59,22 +59,14 @@
*
************************************************************************/
-/*
- Marshalling raw: we use CoMarshalInterface and CoUnmarshalInterface
- directly
- Marshalling non-raw: wee use CoMarshalInterThreadInterfaceInStream and
- CoGetInteraface and ReleaseStream
+//_________________________________________________________________________________________________________________________
+// interface includes
+//_________________________________________________________________________________________________________________________
- We test the following cases:
-
- Marshalling Target Thread Apartment
- -------------------------------------------
- Raw Sta
- Raw Mta
- Non-Raw Sta
- Non-Raw Mta
-*/
+//_________________________________________________________________________________________________________________________
+// other includes
+//_________________________________________________________________________________________________________________________
#ifndef _RTL_USTRING_
#include <rtl/ustring>
@@ -92,19 +84,21 @@
#include <windows.h>
#include <objbase.h>
+#include <memory>
+
#include <process.h>
-#include <comdef.h>
+#include "XTDo.hxx"
//-------------------------------------------------------------
// my defines
//-------------------------------------------------------------
-const bool EVT_MANUAL_RESET = true;
-const bool EVT_AUTO_RESET = false;
-const bool EVT_INIT_NONSIGNALED = false;
-const bool EVT_INIT_SIGNALED = true;
-const char EVT_NONAME[] = "";
-const int MAX_LOOP = 1000;
+#define WRITE_CB
+#define EVT_MANUAL_RESET TRUE
+#define EVT_INIT_NONSIGNALED FALSE
+#define EVT_NONAME ""
+#define WAIT_MSGLOOP
+#define RAW_MARSHALING
//------------------------------------------------------------
// namesapces
@@ -117,128 +111,58 @@ using namespace ::std;
// globales
//------------------------------------------------------------
-HANDLE g_HandleArray[2];
-HANDLE& g_hEvtMarshalClipDataObj = g_HandleArray[0];
-HANDLE& g_hThread = g_HandleArray[1];
-HANDLE g_hEvtThreadWakeup;
-BOOL g_bRawMarshalling = false;
-HGLOBAL g_hGlob = NULL;
-IStreamPtr g_pStm;
-
-
-enum APARTMENT_MODEL
-{
- STA = 0,
- MTA,
- OLE
-};
-
-//------------------------------------------------------------
-//
-//------------------------------------------------------------
-
-void SetupApartment( APARTMENT_MODEL apm )
-{
- // setup another apartment
- HRESULT hr;
-
- switch ( apm )
- {
- case STA:
- hr = CoInitializeEx( NULL, COINIT_APARTMENTTHREADED );
- OSL_ENSURE( SUCCEEDED( hr ), "CoInitialize STA failed" );
- break;
-
- case MTA:
- hr = CoInitializeEx( NULL, COINIT_MULTITHREADED );
- OSL_ENSURE( SUCCEEDED( hr ), "CoInitialize MTA failed" );
- break;
-
- case OLE:
- hr = OleInitialize( NULL );
- OSL_ENSURE( SUCCEEDED( hr ), "OleInitialize failed" );
- break;
-
- default:
- OSL_ENSURE( false, "invalid apartment model" );
- }
-}
-
-//------------------------------------------------------------
-//
-//------------------------------------------------------------
+HANDLE g_hEvtThreadWakeup;
-void ShutdownApartment( APARTMENT_MODEL apm )
-{
- switch ( apm )
- {
- case STA:
- case MTA:
- CoUninitialize( );
- break;
- case OLE:
- OleUninitialize( );
- break;
- }
-}
+#ifdef RAW_MARSHALING
+ HGLOBAL g_hGlob;
+#else
+ IStream* g_pStm;
+#endif
//################################################################
// a thread in another apartment to test apartment transparency
unsigned int _stdcall ThreadProc(LPVOID pParam)
{
- APARTMENT_MODEL* apm = reinterpret_cast< APARTMENT_MODEL* >( pParam );
+ // setup another apartment
+ HRESULT hr = OleInitialize( NULL );
+
+ WaitForSingleObject( g_hEvtThreadWakeup, INFINITE );
- SetupApartment( *apm );
+ IDataObject* pIDo;
- for ( int i = 0; i < MAX_LOOP; i++ )
+#ifdef RAW_MARSHALING
+
+ IStream* pStm = NULL;
+ hr = CreateStreamOnHGlobal( g_hGlob, FALSE, &pStm );
+ if ( SUCCEEDED( hr ) )
{
- WaitForSingleObject( g_hEvtThreadWakeup, INFINITE );
+ hr = CoUnmarshalInterface(
+ pStm,
+ __uuidof( IDataObject ),
+ (void**)&pIDo );
- try
- {
- HRESULT hr;
- IDataObjectPtr pIDo;
+ hr = pStm->Release( );
+ }
- if ( g_bRawMarshalling )
- {
- IStreamPtr pStm = NULL;
- hr = CreateStreamOnHGlobal( g_hGlob, FALSE, &pStm );
- OSL_ENSURE( SUCCEEDED( hr ), "CreateStreamOnHGlobal failed" );
-
- hr = CoUnmarshalInterface(
- pStm, __uuidof( IDataObject ), (void**)&pIDo );
- OSL_ENSURE( SUCCEEDED( hr ), "CoUnmarshalInterface failed" );
- }
- else
- {
- IStream* pIStm = g_pStm.Detach( );
+#else
- hr = CoGetInterfaceAndReleaseStream(
- pIStm, __uuidof( IDataObject ), (void**)&pIDo );
+ hr = CoGetInterfaceAndReleaseStream(
+ g_pStm,
+ __uuidof( IDataObject ),
+ (void**)&pIDo
+ );
- OSL_ENSURE( SUCCEEDED( hr ), "CoGetInterfaceAndReleaseStream failed" );
- }
+#endif
- // only to call some interface functions
- IEnumFORMATETCPtr pIEnumFetc;
- hr = pIDo->EnumFormatEtc( DATADIR_GET, &pIEnumFetc );
- OSL_ENSURE( SUCCEEDED( hr ), "EnumFormatEtc failed" );
+ IEnumFORMATETC* pIEEtc;
+ hr = pIDo->EnumFormatEtc( DATADIR_GET, &pIEEtc );
- // release the object before calling
- // CoUninitialize
- pIDo.Detach( );
- }
- catch( _com_error& ex )
- {
- HRESULT hr = ex.Error( );
- OSL_ENSURE( false, "com exception caught" );
- }
+ hr = OleIsCurrentClipboard( pIDo );
- SetEvent( g_HandleArray[0] );
- } // end for
+ hr = OleFlushClipboard( );
- ShutdownApartment( *apm );
+ OleUninitialize( );
return 0;
}
@@ -246,127 +170,108 @@ unsigned int _stdcall ThreadProc(LPVOID pParam)
//################################################################
//----------------------------------------------------------------
-//
-//----------------------------------------------------------------
-
-void MarshalClipboardDataObject( IDataObjectPtr pIDo )
-{
- HRESULT hr;
-
- if ( g_bRawMarshalling )
- {
- IStreamPtr pStm = NULL;
-
- hr = CreateStreamOnHGlobal( 0, false, &pStm );
- OSL_ENSURE( SUCCEEDED( hr ), "CreateStreamOnHGlobal failed" );
-
- hr = CoMarshalInterface(
- pStm,
- __uuidof( IDataObject ),
- pIDo,
- MSHCTX_INPROC,
- 0,
- MSHLFLAGS_NORMAL );
-
- OSL_ENSURE( SUCCEEDED( hr ), "CoMarshalInterface failed" );
-
- hr = GetHGlobalFromStream( pStm, &g_hGlob );
-
- OSL_ENSURE( SUCCEEDED( hr ), "GetHGlobalFromStream failed" );
- }
- else
- {
- hr = CoMarshalInterThreadInterfaceInStream(
- __uuidof( IDataObject ),
- pIDo,
- &g_pStm );
-
- OSL_ENSURE( SUCCEEDED( hr ), "CoMarshalInterThreadInterfaceInStream failed" );
- }
-}
-
-//----------------------------------------------------------------
// main
//----------------------------------------------------------------
int SAL_CALL main( int nArgc, char* Argv[] )
{
- if ( nArgc < 4 )
- {
- printf( "Use 0|1|2 [sta,mta,ole] 0|1|2 [sta,mta,ole] 0|1 [raw, non-raw]\n" );
- return 0;
- }
+ HRESULT hr = OleInitialize( NULL );
- SetupApartment( (APARTMENT_MODEL)atoi( Argv[1] ) );
+ g_hEvtThreadWakeup = CreateEvent( 0,
+ EVT_MANUAL_RESET,
+ EVT_INIT_NONSIGNALED,
+ EVT_NONAME );
- // read parameter
+ unsigned uThreadId;
+ HANDLE hThread;
- APARTMENT_MODEL apm = (APARTMENT_MODEL)atoi( Argv[2] );
- g_bRawMarshalling = (bool)atoi( Argv[3] );
+ // create a thread in another apartment
+ hThread = (void*)_beginthreadex( NULL, 0, ThreadProc, NULL, 0, &uThreadId );
- g_hEvtThreadWakeup = CreateEventA(
- 0, EVT_AUTO_RESET, EVT_INIT_NONSIGNALED, EVT_NONAME );
+ IDataObject* pIDo = new CXTDataObject( );
- OSL_ENSURE( g_hEvtThreadWakeup, "CreateEvent failed" );
+ hr = OleSetClipboard( pIDo );
+ hr = E_FAIL;
- g_HandleArray[0] = CreateEventA(
- 0, EVT_AUTO_RESET, EVT_INIT_SIGNALED, EVT_NONAME );
+ hr = OleIsCurrentClipboard( pIDo );
- OSL_ENSURE( g_hEvtMarshalClipDataObj, "CreateEvent failed" );
+ //hr = OleGetClipboard( &pIDo );
+ if ( SUCCEEDED( hr ) )
+ {
+#ifdef RAW_MARSHALING
- unsigned uThreadId;
+ IStream* pStm = NULL;
- // create a thread in another apartment
- g_HandleArray[1] = (HANDLE)_beginthreadex(
- NULL, 0, ThreadProc, &apm, 0, &uThreadId );
+ hr = CreateStreamOnHGlobal( 0, FALSE, &pStm );
+ if ( SUCCEEDED( hr ) )
+ {
+ hr = CoMarshalInterface(
+ pStm,
+ __uuidof( IDataObject ),
+ pIDo,
+ MSHCTX_INPROC,
+ 0,
+ MSHLFLAGS_NORMAL );
+ if ( SUCCEEDED( hr ) )
+ hr = GetHGlobalFromStream( pStm, &g_hGlob );
- OSL_ENSURE( g_hThread, "create thread failed" );
+ hr = pStm->Release( );
+ }
- bool bContinue = true;
- HRESULT hr;
+#else
- while( bContinue )
- {
- IDataObjectPtr pIDo;
+ hr = CoMarshalInterThreadInterfaceInStream(
+ __uuidof( IDataObject ),
+ pIDo,
+ &g_pStm );
- DWORD dwResult = MsgWaitForMultipleObjects(
- 2, g_HandleArray, false, INFINITE, QS_ALLEVENTS );
+#endif
- switch( dwResult )
+ if ( SUCCEEDED( hr ) )
{
- case WAIT_OBJECT_0:
- pIDo.Detach( );
- hr = OleGetClipboard( &pIDo );
- OSL_ENSURE( SUCCEEDED( hr ), "OleGetClipboard failed" );
-
- MarshalClipboardDataObject( pIDo );
+ // wakeup the thread and waiting util it ends
+ SetEvent( g_hEvtThreadWakeup );
- // wakeup the thread
- SetEvent( g_hEvtThreadWakeup );
- break;
+#ifdef WAIT_MSGLOOP
- case WAIT_OBJECT_0 + 1:
- bContinue = false;
- break;
+ BOOL bContinue = TRUE;
- case WAIT_OBJECT_0 + 2:
+ while( bContinue )
{
- // sta threads need to have a message loop
- // else the deadlock
- MSG msg;
- while( PeekMessageA( &msg, NULL, 0, 0, PM_REMOVE ) )
- DispatchMessageA(&msg);
- }
- break;
- }
- } // while
+ DWORD dwResult = WaitForMultipleObjects(
+ 1,
+ &hThread,
+ TRUE,
+ 0 );
+
+ if ( WAIT_OBJECT_0 == dwResult )
+ {
+ bContinue = FALSE;
+ }
+ else
+ {
+ MSG msg;
+ while( PeekMessage(
+ &msg,
+ NULL,
+ 0,
+ 0,
+ PM_REMOVE ) )
+ {
+ TranslateMessage(&msg);
+ DispatchMessage(&msg);
+ }
+ }
+ } // while
+
+#endif
+
+ } // if
+ } // if
- // cleanup
- CloseHandle( g_hEvtThreadWakeup );
- CloseHandle( g_hEvtMarshalClipDataObj );
- CloseHandle( g_hThread );
+ OleFlushClipboard( );
- ShutdownApartment( (APARTMENT_MODEL)atoi( Argv[1] ) );
+ OleUninitialize( );
return 0;
}
diff --git a/dtrans/test/win32/dnd/atlwindow.cxx b/dtrans/test/win32/dnd/atlwindow.cxx
index c24c87d56019..a87d780d2d27 100644
--- a/dtrans/test/win32/dnd/atlwindow.cxx
+++ b/dtrans/test/win32/dnd/atlwindow.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: atlwindow.cxx,v $
*
- * $Revision: 1.7 $
+ * $Revision: 1.8 $
*
- * last change: $Author: jl $ $Date: 2001-07-19 11:14:24 $
+ * last change: $Author: hr $ $Date: 2003-03-25 14:05:41 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -72,7 +72,6 @@
#include "targetlistener.hxx"
#include "sourcelistener.hxx"
//#include "transferable.hxx"
-#include "dataobject.hxx"
#include <map>
#include <winbase.h>
@@ -147,8 +146,7 @@ LRESULT AWindow::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandle
// create the DragSource
- OUString sServiceSource( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.datatransfer.dnd.OleDragSource"));
- Reference< XInterface> xint= MultiServiceFactory->createInstance(sServiceSource);
+ Reference< XInterface> xint= MultiServiceFactory->createInstance(OUString(L"com.sun.star.datatransfer.dnd.OleDragSource"));
m_xDragSource= Reference<XDragSource>( xint, UNO_QUERY);
Reference<XInitialization> xInit( xint, UNO_QUERY);
@@ -157,33 +155,18 @@ LRESULT AWindow::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandle
xInit->initialize( Sequence<Any>( ar, 2) );
//create the DropTarget
- // the initialization func of the drop target can be called from an STA or
- // MTA
Reference< XInterface> xintTarget= MultiServiceFactory->createInstance(OUString(L"com.sun.star.datatransfer.dnd.OleDropTarget"));
m_xDropTarget= Reference<XDropTarget>( xintTarget, UNO_QUERY);
Reference<XInitialization> xInitTarget( xintTarget, UNO_QUERY);
- // call Initialize from the mta thread
- if( m_bInitInMTA)
- {
- InitializationData* pData= (InitializationData*) CoTaskMemAlloc(sizeof( InitializationData));
- ZeroMemory( pData, sizeof( InitializationData));
- pData->xInit= xInitTarget;
- pData->hWnd= m_hWnd;
+ Any any;
+ any <<= (sal_uInt32)m_hWnd;
+ xInitTarget->initialize( Sequence<Any>( &any, 1) );
- PostThreadMessage( m_idMTAThread, WM_SOURCE_INIT,(WPARAM) pData, 0);
- }
- else
- {
- // call initialize from the current thread
- Any any;
- any <<= (sal_uInt32)m_hWnd;
- xInitTarget->initialize( Sequence<Any>( &any, 1) );
- }
m_xDropTarget->addDropTargetListener( static_cast<XDropTargetListener*>
( new DropTargetListener( m_hwndEdit)) );
-// // make this window a drop target
+// // make this window tho a drop target
m_xDropTarget->setActive(sal_True);
return 0;
@@ -210,36 +193,51 @@ LRESULT AWindow::OnTimer(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled
HRESULT hr;
USES_CONVERSION;
KillTimer( 1);
- // only if the dragsource exists and it is our own timer
- if(m_xDragSource.is() && (UINT) wParam == 1)
+ if(m_xDragSource.is())
{
//Get the Text out of the Edit window
int length= (int)::SendMessageA( m_hwndEdit, WM_GETTEXTLENGTH, 0, 0);
char * pBuffer= new char[length + 1];
ZeroMemory( pBuffer, length + 1);
- ::SendMessageA( m_hwndEdit, WM_GETTEXT, length+1, (LPARAM) pBuffer);
-
- IDataObject* pData= (IDataObject*)new DataObject(pBuffer);
- pData->AddRef();
+ ::SendMessageA( m_hwndEdit, WM_GETTEXT, length, (LPARAM) pBuffer);
+ IDataObject* pData= NULL;
+ HRESULT hr= CreateDataCache( NULL, CLSID_NULL, __uuidof(IDataObject),(void**) &pData);
if( pData)
{
-// CDTransObjFactory fac;
-// Reference<XTransferable> xTrans= fac.createTransferableFromDataObj(
-// MultiServiceFactory, pData);
+ FORMATETC format={ CF_TEXT, NULL, DVASPECT_CONTENT, -1, };
+
+ HGLOBAL mem= GlobalAlloc(GHND, length + 1 );
+ void* pMem= GlobalLock( mem);
+ memcpy( pMem, pBuffer, length+1);
+ GlobalUnlock( mem);
- Reference<XTransferable> xTrans= m_aDataConverter.createTransferableFromDataObj(
- MultiServiceFactory, pData);
+ STGMEDIUM medium;
+ medium.tymed= TYMED_HGLOBAL;
+ medium.hGlobal= mem;
+ medium.pUnkForRelease= NULL;
+
+ pData->SetData( &format, &medium, TRUE); // releases HGLOBAL eventually
+
+ Reference<XTransferable> xTrans= m_aDataConverter.createTransferableFromDataObj(
+ MultiServiceFactory, pData);
// call XDragSource::executeDrag from an MTA
if( m_isMTA )
{
- StartDragData* pData= (StartDragData*) CoTaskMemAlloc(sizeof( StartDragData));
- ZeroMemory( pData, sizeof( StartDragData));
- pData->source= m_xDragSource;
- pData->transferable= xTrans;
- PostThreadMessage( m_idMTAThread, WM_SOURCE_STARTDRAG,(WPARAM) pData, 0);
+ DWORD mtaThreadId;
+ ThreadData data;
+ data.source= m_xDragSource;
+ data.transferable= xTrans;
+
+ data.evtThreadReady= CreateEvent( NULL, FALSE, FALSE, NULL);
+
+ HANDLE hThread= CreateThread( NULL, 0, MTAFunc, &data, 0, &mtaThreadId);
+ // We must wait until the thread copied the ThreadData structure
+ WaitForSingleObject( data.evtThreadReady, INFINITE);
+ CloseHandle( data.evtThreadReady);
+
}
else
@@ -252,8 +250,6 @@ LRESULT AWindow::OnTimer(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled
Reference<XDragSourceListener>( static_cast<XDragSourceListener*>(new DragSourceListener() ) ) );
}
}
- if( pData)
- pData->Release();
delete[] pBuffer;
}
@@ -294,4 +290,4 @@ LRESULT APIENTRY EditSubclassProc( HWND hwnd, UINT uMsg,WPARAM wParam, LPARAM lP
return CallWindowProc( wpOrigEditProc, hwnd, uMsg,
wParam, lParam);
}
-
+ \ No newline at end of file
diff --git a/dtrans/test/win32/dnd/atlwindow.hxx b/dtrans/test/win32/dnd/atlwindow.hxx
index 2d664510b236..ac5132483e65 100644
--- a/dtrans/test/win32/dnd/atlwindow.hxx
+++ b/dtrans/test/win32/dnd/atlwindow.hxx
@@ -2,9 +2,9 @@
*
* $RCSfile: atlwindow.hxx,v $
*
- * $Revision: 1.3 $
+ * $Revision: 1.4 $
*
- * last change: $Author: jl $ $Date: 2001-07-19 11:14:24 $
+ * last change: $Author: hr $ $Date: 2003-03-25 14:05:41 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -64,7 +64,6 @@
extern CComModule _Module;
#include<atlcom.h>
#include<atlctl.h>
-#include <com/sun/star/lang/XInitialization.hpp>
#include <com/sun/star/datatransfer/dnd/XDropTarget.hpp>
#include <com/sun/star/datatransfer/dnd/XDragSource.hpp>
#include <com/sun/star/datatransfer/XTransferable.hpp>
@@ -75,21 +74,12 @@ extern CComModule _Module;
using namespace com::sun::star::uno;
using namespace com::sun::star::datatransfer::dnd;
using namespace com::sun::star::datatransfer;
-using namespace com::sun::star::lang;
-#define WM_SOURCE_INIT WM_APP+100
-#define WM_SOURCE_STARTDRAG WM_APP+101
-
-struct StartDragData
+struct ThreadData
{
Reference<XDragSource> source;
Reference<XTransferable> transferable;
-};
-
-struct InitializationData
-{
- Reference<XInitialization> xInit;
- HWND hWnd;
+ HANDLE evtThreadReady;
};
class AWindow: public CWindowImpl<AWindow, CWindow,
@@ -99,21 +89,18 @@ class AWindow: public CWindowImpl<AWindow, CWindow,
Reference<XDropTarget> m_xDropTarget;
Reference<XDragSource> m_xDragSource;
BOOL m_isMTA;
- BOOL m_bInitInMTA;
+
HWND m_hwndEdit;
- // Id of the MTA thread to which we post messages.
- DWORD m_idMTAThread;
+
CDTransObjFactory m_aDataConverter;
public:
- AWindow(LPCTSTR strName, DWORD idMTAThread): m_idMTAThread( idMTAThread)
+ AWindow(LPCTSTR strName)
{
RECT rcPos= {0,0,200,200};
Create(0, rcPos, strName);
}
- AWindow(LPCTSTR strName, DWORD idMTAThread, RECT pos, BOOL mta=FALSE,
- BOOL initInMTA=FALSE):
- m_isMTA( mta), m_idMTAThread( idMTAThread), m_bInitInMTA( initInMTA)
+ AWindow(LPCTSTR strName, RECT pos, BOOL mta=FALSE): m_isMTA( mta)
{
Create(0, pos, strName);
}
@@ -144,4 +131,4 @@ public:
};
-#endif
+#endif \ No newline at end of file
diff --git a/dtrans/test/win32/dnd/makefile.mk b/dtrans/test/win32/dnd/makefile.mk
index 537f834549f6..d8603b9b2443 100644
--- a/dtrans/test/win32/dnd/makefile.mk
+++ b/dtrans/test/win32/dnd/makefile.mk
@@ -2,9 +2,9 @@
#
# $RCSfile: makefile.mk,v $
#
-# $Revision: 1.9 $
+# $Revision: 1.10 $
#
-# last change: $Author: jbu $ $Date: 2002-10-01 07:33:40 $
+# last change: $Author: hr $ $Date: 2003-03-25 14:05:43 $
#
# The Contents of this file are made available subject to the terms of
# either of the following licenses
@@ -80,7 +80,7 @@ BOOTSTRAP_SERVICE=FALSE
# --- Files ---
-# CFLAGS+=/GR -DUNICODE -D_UNICODE
+# CFLAGS+=-GR -DUNICODE -D_UNICODE
CFLAGS+= -D_WIN32_DCOM
.IF "$(BOOTSTRAP_SERVICE)" == "TRUE"
diff --git a/dtrans/test/win32/dnd/targetlistener.cxx b/dtrans/test/win32/dnd/targetlistener.cxx
index 2f6d51657635..8a1e4d2b101d 100644
--- a/dtrans/test/win32/dnd/targetlistener.cxx
+++ b/dtrans/test/win32/dnd/targetlistener.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: targetlistener.cxx,v $
*
- * $Revision: 1.4 $
+ * $Revision: 1.5 $
*
- * last change: $Author: jl $ $Date: 2001-08-14 14:11:25 $
+ * last change: $Author: hr $ $Date: 2003-03-25 14:05:43 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -87,9 +87,9 @@ void SAL_CALL DropTargetListener::disposing( const EventObject& Source )
void SAL_CALL DropTargetListener::drop( const DropTargetDropEvent& e )
throw(RuntimeException)
{
- e.Context->dropComplete( sal_True);
- e.Context->acceptDrop( ACTION_COPY);
-// e.Context->rejectDrop();
+// e.Context->dropComplete( sal_True);
+// e.Context->acceptDrop( ACTION_COPY);
+ e.Context->rejectDrop();
// if the Transferable contains text, then we send it to the edit window
// Sequence<DataFlavor> flavors= e.Transferable->getTransferDataFlavors();
@@ -108,13 +108,9 @@ void SAL_CALL DropTargetListener::drop( const DropTargetDropEvent& e )
void SAL_CALL DropTargetListener::dragEnter( const DropTargetDragEnterEvent& dtde )
throw(RuntimeException)
{
- if( (dtde.SourceActions & dtde.DropAction) )
- {
- dtde.Context->acceptDrag( dtde.DropAction);
- }
//If one drags something that is not moveable
-// if( !(dtde.SourceActions & dtde.DropAction) )
-// dtde.Context->acceptDrag( ACTION_COPY);
+ if( !(dtde.SourceActions & dtde.DropAction) )
+ dtde.Context->acceptDrag( ACTION_COPY);
// dtde.Context->rejectDrag( );
@@ -128,13 +124,8 @@ void SAL_CALL DropTargetListener::dragExit( const DropTargetEvent& dte )
void SAL_CALL DropTargetListener::dragOver( const DropTargetDragEvent& dtde )
throw(RuntimeException)
{
- if( (dtde.SourceActions & dtde.DropAction) )
- {
- dtde.Context->acceptDrag( dtde.DropAction);
- }
-
-// if( (dtde.SourceActions & dtde.DropAction) )
-// dtde.Context->acceptDrag( ACTION_COPY);
+ if( !(dtde.SourceActions & dtde.DropAction) )
+ dtde.Context->acceptDrag( ACTION_COPY);
}
void SAL_CALL DropTargetListener::dropActionChanged( const DropTargetDragEvent& dtde )