include/vcl/graph.hxx              |    2 ++
 svtools/source/graphic/graphic.cxx |    4 ++--
 vcl/source/gdi/graph.cxx           |   16 +++++++++++++---
 3 files changed, 17 insertions(+), 5 deletions(-)

New commits:
commit b901f7699dae0c9985e80c22d4b9824b8386bdc1
Author: Stephan Bergmann <sberg...@redhat.com>
Date:   Fri Mar 7 19:39:54 2014 +0100

    x->getSomething(x->getImplementationId()) doesn't make any sense
    
    ...the point of the aIdentifier parameter to 
css.lang.XUnoTunnel.getSomething is
    so that caller and callee can verify they know each other and the value 
passed
    back (pointer in local address space, in this case) will actually make 
sense for
    the caller.
    
    Change-Id: Id79c419307992b30ea6ef7997b74a015631ad21c

diff --git a/include/vcl/graph.hxx b/include/vcl/graph.hxx
index e6fe04f..1639f5b 100644
--- a/include/vcl/graph.hxx
+++ b/include/vcl/graph.hxx
@@ -198,6 +198,8 @@ public:
     virtual void        Assign( const SvDataCopyStream& );
 
     const SvgDataPtr&   getSvgData() const;
+
+    static css::uno::Sequence<sal_Int8> getUnoTunnelId();
 };
 
 #endif // INCLUDED_VCL_GRAPH_HXX
diff --git a/svtools/source/graphic/graphic.cxx 
b/svtools/source/graphic/graphic.cxx
index 49b0f359..1248f6a 100644
--- a/svtools/source/graphic/graphic.cxx
+++ b/svtools/source/graphic/graphic.cxx
@@ -251,14 +251,14 @@ const ::Graphic* Graphic::getImplementation( const 
uno::Reference< uno::XInterfa
     throw()
 {
     uno::Reference< lang::XUnoTunnel > xTunnel( rxIFace, uno::UNO_QUERY );
-    return( xTunnel.is() ? reinterpret_cast< ::Graphic* >( 
xTunnel->getSomething( getImplementationId_Static() ) ) : NULL );
+    return( xTunnel.is() ? reinterpret_cast< ::Graphic* >( 
xTunnel->getSomething( ::Graphic::getUnoTunnelId() ) ) : NULL );
 }
 
 
 sal_Int64 SAL_CALL Graphic::getSomething( const uno::Sequence< sal_Int8 >& rId 
)
     throw( uno::RuntimeException, std::exception )
 {
-    return( ( rId.getLength() == 16 && 0 == memcmp( 
getImplementationId().getConstArray(), rId.getConstArray(), 16 ) ) ?
+    return( ( rId.getLength() == 16 && 0 == memcmp( 
::Graphic::getUnoTunnelId().getConstArray(), rId.getConstArray(), 16 ) ) ?
             reinterpret_cast< sal_Int64 >( mpGraphic ) :
             0 );
 }
diff --git a/vcl/source/gdi/graph.cxx b/vcl/source/gdi/graph.cxx
index be6af17..d604122 100644
--- a/vcl/source/gdi/graph.cxx
+++ b/vcl/source/gdi/graph.cxx
@@ -29,6 +29,7 @@
 #include <com/sun/star/lang/XUnoTunnel.hpp>
 #include <com/sun/star/lang/XTypeProvider.hpp>
 #include <com/sun/star/graphic/XGraphic.hpp>
+#include <cppuhelper/typeprovider.hxx>
 
 using namespace ::com::sun::star;
 
@@ -224,9 +225,8 @@ Graphic::Graphic( const GDIMetaFile& rMtf )
 Graphic::Graphic( const ::com::sun::star::uno::Reference< 
::com::sun::star::graphic::XGraphic >& rxGraphic )
 {
     uno::Reference< lang::XUnoTunnel >      xTunnel( rxGraphic, uno::UNO_QUERY 
);
-    uno::Reference< lang::XTypeProvider >   xProv( rxGraphic, uno::UNO_QUERY );
-    const ::Graphic*                        pGraphic = ( ( xTunnel.is() && 
xProv.is() ) ?
-                                                         reinterpret_cast< 
::Graphic* >( xTunnel->getSomething( xProv->getImplementationId() ) ) :
+    const ::Graphic*                        pGraphic = ( xTunnel.is() ?
+                                                         reinterpret_cast< 
::Graphic* >( xTunnel->getSomething( getUnoTunnelId() ) ) :
                                                           NULL );
 
     if( pGraphic )
@@ -587,4 +587,14 @@ const SvgDataPtr& Graphic::getSvgData() const
     return mpImpGraphic->getSvgData();
 }
 
+namespace {
+
+struct Id: public rtl::Static<cppu::OImplementationId, Id> {};
+
+}
+
+css::uno::Sequence<sal_Int8> Graphic::getUnoTunnelId() {
+    return Id::get().getImplementationId();
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to