Return-Path: X-Original-To: apmail-incubator-ooo-commits-archive@minotaur.apache.org Delivered-To: apmail-incubator-ooo-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 8B9D8C299 for ; Thu, 31 May 2012 12:59:32 +0000 (UTC) Received: (qmail 72385 invoked by uid 500); 31 May 2012 12:59:32 -0000 Delivered-To: apmail-incubator-ooo-commits-archive@incubator.apache.org Received: (qmail 72352 invoked by uid 500); 31 May 2012 12:59:32 -0000 Mailing-List: contact ooo-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: ooo-dev@incubator.apache.org Delivered-To: mailing list ooo-commits@incubator.apache.org Received: (qmail 72345 invoked by uid 99); 31 May 2012 12:59:32 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 31 May 2012 12:59:32 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 31 May 2012 12:59:31 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id E1ADB2388978; Thu, 31 May 2012 12:59:10 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1344697 - in /incubator/ooo/branches/AOO34/main/vcl/aqua/source/dtrans: DataFlavorMapping.cxx DataFlavorMapping.hxx Date: Thu, 31 May 2012 12:59:10 -0000 To: ooo-commits@incubator.apache.org From: hdu@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20120531125910.E1ADB2388978@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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 #include +#include #include #include @@ -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 DataFlavorMapperPtr_t;