Author: hdu
Date: Thu May 31 12:59:10 2012
New Revision: 1344697
URL: http://svn.apache.org/viewvc?rev=1344697&view=rev
Log:
#i117990# (author=pl) fix for transporting OOo types through OSX system
clipboard
Found by: Niklas Nebel
Suggested by: Philipp Lohmann
Patch by: Philipp Lohmann
Reviewed by: Niklas Nebel, Herbert Duer
Tested by: Niklas Nebel, Herbert Duer
Modified:
incubator/ooo/branches/AOO34/main/vcl/aqua/source/dtrans/DataFlavorMapping.cxx
incubator/ooo/branches/AOO34/main/vcl/aqua/source/dtrans/DataFlavorMapping.hxx
Modified:
incubator/ooo/branches/AOO34/main/vcl/aqua/source/dtrans/DataFlavorMapping.cxx
URL:
http://svn.apache.org/viewvc/incubator/ooo/branches/AOO34/main/vcl/aqua/source/dtrans/DataFlavorMapping.cxx?rev=1344697&r1=1344696&r2=1344697&view=diff
==============================================================================
---
incubator/ooo/branches/AOO34/main/vcl/aqua/source/dtrans/DataFlavorMapping.cxx
(original)
+++
incubator/ooo/branches/AOO34/main/vcl/aqua/source/dtrans/DataFlavorMapping.cxx
Thu May 31 12:59:10 2012
@@ -519,6 +519,16 @@ DataFlavorMapper::DataFlavorMapper()
throw
RuntimeException(OUString(RTL_CONSTASCII_USTRINGPARAM("AquaClipboard: Cannot
create com.sun.star.datatransfer.MimeContentTypeFactory")), NULL);
}
+DataFlavorMapper::~DataFlavorMapper()
+{
+ // release potential NSStrings
+ for( OfficeOnlyTypes::iterator it = maOfficeOnlyTypes.begin(); it !=
maOfficeOnlyTypes.end(); ++it )
+ {
+ [it->second release];
+ it->second = nil;
+ }
+}
+
DataFlavor DataFlavorMapper::systemToOpenOfficeFlavor(NSString*
systemDataFlavor) const
{
DataFlavor oOOFlavor;
@@ -534,22 +544,41 @@ DataFlavor DataFlavorMapper::systemToOpe
}
} // for
- return oOOFlavor;
+ // look if this might be an internal type; if it comes in here it must
have
+ // been through openOfficeToSystemFlavor before, so it should then be
in the map
+ rtl::OUString aTryFlavor( NSStringToOUString( systemDataFlavor ) );
+ if( maOfficeOnlyTypes.find( aTryFlavor ) != maOfficeOnlyTypes.end() )
+ {
+ oOOFlavor.MimeType = aTryFlavor;
+ oOOFlavor.HumanPresentableName = rtl::OUString();
+ oOOFlavor.DataType = CPPUTYPE_SEQINT8;
+ }
+
+ return oOOFlavor;
}
NSString* DataFlavorMapper::openOfficeToSystemFlavor(const DataFlavor&
oOOFlavor) const
{
- NSString* sysFlavor = NULL;
-
- for (size_t i = 0; i < SIZE_FLAVOR_MAP; i++)
+ NSString* sysFlavor = NULL;
+
+ for( size_t i = 0; i < SIZE_FLAVOR_MAP; ++i )
{
- if (oOOFlavor.MimeType.compareToAscii(flavorMap[i].OOoFlavor,
strlen(flavorMap[i].OOoFlavor)) == 0)
+ if (oOOFlavor.MimeType.compareToAscii(flavorMap[i].OOoFlavor,
strlen(flavorMap[i].OOoFlavor)) == 0)
{
- sysFlavor = flavorMap[i].SystemFlavor;
+ sysFlavor = flavorMap[i].SystemFlavor;
}
}
-
- return sysFlavor;
+
+ if( ! sysFlavor )
+ {
+ OfficeOnlyTypes::const_iterator it = maOfficeOnlyTypes.find(
oOOFlavor.MimeType );
+ if( it == maOfficeOnlyTypes.end() )
+ sysFlavor = maOfficeOnlyTypes[ oOOFlavor.MimeType ] =
OUStringToNSString( oOOFlavor.MimeType );
+ else
+ sysFlavor = it->second;
+ }
+
+ return sysFlavor;
}
NSString* DataFlavorMapper::openOfficeImageToSystemFlavor(NSPasteboard*
pPasteboard) const
@@ -686,6 +715,7 @@ NSArray* DataFlavorMapper::flavorSequenc
if (str != NULL)
{
+ [str retain];
[array addObject: str];
}
}
Modified:
incubator/ooo/branches/AOO34/main/vcl/aqua/source/dtrans/DataFlavorMapping.hxx
URL:
http://svn.apache.org/viewvc/incubator/ooo/branches/AOO34/main/vcl/aqua/source/dtrans/DataFlavorMapping.hxx?rev=1344697&r1=1344696&r2=1344697&view=diff
==============================================================================
---
incubator/ooo/branches/AOO34/main/vcl/aqua/source/dtrans/DataFlavorMapping.hxx
(original)
+++
incubator/ooo/branches/AOO34/main/vcl/aqua/source/dtrans/DataFlavorMapping.hxx
Thu May 31 12:59:10 2012
@@ -33,6 +33,7 @@
#import <Cocoa/Cocoa.h>
#include <postmac.h>
+#include <hash_map>
#include <memory>
#include <boost/shared_ptr.hpp>
@@ -69,6 +70,7 @@ public:
cannot be created.
*/
DataFlavorMapper();
+ ~DataFlavorMapper();
/* Map a system data flavor to an OpenOffice data flavor.
@@ -132,6 +134,8 @@ private:
private:
::com::sun::star::uno::Reference<
::com::sun::star::datatransfer::XMimeContentTypeFactory> mrXMimeCntFactory;
+ typedef std::hash_map< rtl::OUString, NSString*, rtl::OUStringHash >
OfficeOnlyTypes;
+ mutable OfficeOnlyTypes maOfficeOnlyTypes;
};
typedef boost::shared_ptr<DataFlavorMapper> DataFlavorMapperPtr_t;