forms/source/component/clickableimage.cxx | 21 +++++++++++++++++++++ forms/source/component/clickableimage.hxx | 5 +++++ 2 files changed, 26 insertions(+)
New commits: commit 702cc62537676a66dc4d714598e6949527dbe629 Author: Zolnai Tamás <zolnaitamas2...@gmail.com> Date: Sun Jul 12 18:21:35 2015 +0200 tdf#47832: Pictures on buttons, created in forms, gone after reopening form When image is set to a Button control the correspoding graphic object lives only temporarily, after the graphic is copied from the graphic object it's destroyed so save can't find it by graphic ID. Use the same solution which works for ImageControls: use a graphic object member for the control, so save can find it. (cherry picked from commit 70f152983f3425a77df2f65b4798417640d47b76) fix windows build (from Noel Grandin) (cherry picked from commit 4c5498ec5ee478e27fd62bdcf9de1208c692422c) 505b7b0e6bf86093fbed1aa7e28b710e12116e6e Change-Id: If99a3efc4727a07df9d2daaefbdacc9565920005 Reviewed-on: https://gerrit.libreoffice.org/17057 Reviewed-by: Caolán McNamara <caol...@redhat.com> Reviewed-by: Michael Meeks <michael.me...@collabora.com> Reviewed-by: Thorsten Behrens <thorsten.behr...@cib.de> Reviewed-by: Eike Rathke <er...@redhat.com> Tested-by: Eike Rathke <er...@redhat.com> diff --git a/forms/source/component/clickableimage.cxx b/forms/source/component/clickableimage.cxx index a0ac4c0..8ce0de6 100644 --- a/forms/source/component/clickableimage.cxx +++ b/forms/source/component/clickableimage.cxx @@ -31,6 +31,8 @@ #include <com/sun/star/frame/XFrame.hpp> #include <com/sun/star/awt/ActionEvent.hpp> #include <com/sun/star/awt/XActionListener.hpp> +#include <com/sun/star/graphic/XGraphic.hpp> +#include <com/sun/star/graphic/GraphicObject.hpp> #include <tools/urlobj.hxx> #include <tools/debug.hxx> #include <vcl/svapp.hxx> @@ -62,6 +64,7 @@ namespace frm using namespace ::com::sun::star::util; using namespace ::com::sun::star::frame; using namespace ::com::sun::star::form::submission; + using namespace ::com::sun::star::graphic; using ::com::sun::star::awt::MouseEvent; using ::com::sun::star::task::XInteractionHandler; @@ -451,6 +454,7 @@ namespace frm const OUString& rDefault ) :OControlModel( _rxFactory, _rUnoControlModelTypeName, rDefault ) ,OPropertyChangeListener(m_aMutex) + ,m_xGraphicObject() ,m_pMedium(NULL) ,m_pProducer( NULL ) ,m_bDispatchUrlInternal(false) @@ -465,6 +469,7 @@ namespace frm OClickableImageBaseModel::OClickableImageBaseModel( const OClickableImageBaseModel* _pOriginal, const Reference<XComponentContext>& _rxFactory ) :OControlModel( _pOriginal, _rxFactory ) ,OPropertyChangeListener( m_aMutex ) + ,m_xGraphicObject( _pOriginal->m_xGraphicObject ) ,m_pMedium( NULL ) ,m_pProducer( NULL ) ,m_bDispatchUrlInternal(false) @@ -497,6 +502,7 @@ namespace frm void OClickableImageBaseModel::implConstruct() { m_pProducer = new ImageProducer; + m_pProducer->SetDoneHdl( LINK( this, OClickableImageBaseModel, OnImageImportDone ) ); osl_atomic_increment( &m_refCount ); { m_xProducer = m_pProducer; @@ -852,6 +858,21 @@ namespace frm } } + IMPL_LINK( OClickableImageBaseModel, OnImageImportDone, Graphic*, i_pGraphic ) + { + const Reference< XGraphic > xGraphic( i_pGraphic != NULL ? Graphic(i_pGraphic->GetBitmapEx()).GetXGraphic() : NULL ); + if ( !xGraphic.is() ) + { + m_xGraphicObject.clear(); + } + else + { + m_xGraphicObject = css::graphic::GraphicObject::create( m_xContext ); + m_xGraphicObject->setGraphic( xGraphic ); + } + return 1L; + } + // OImageProducerThread_Impl diff --git a/forms/source/component/clickableimage.hxx b/forms/source/component/clickableimage.hxx index 5033375..9337b3c 100644 --- a/forms/source/component/clickableimage.hxx +++ b/forms/source/component/clickableimage.hxx @@ -33,6 +33,7 @@ #include <com/sun/star/form/submission/XSubmission.hpp> #include <com/sun/star/frame/XModel.hpp> #include <com/sun/star/frame/XDispatchProviderInterception.hpp> +#include <com/sun/star/graphic/XGraphicObject.hpp> #include <cppuhelper/implbase3.hxx> @@ -64,6 +65,8 @@ namespace frm // ImageProducer stuff ::com::sun::star::uno::Reference< ::com::sun::star::awt::XImageProducer> m_xProducer; + // Store the image in a graphic object to make it accesible via graphic cache using graphic ID. + ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphicObject > m_xGraphicObject; SfxMedium* m_pMedium; // Download medium ImageProducer* m_pProducer; bool m_bDispatchUrlInternal; // property: is not allowed to set : 1 @@ -143,6 +146,8 @@ namespace frm // to be called from within the cloning-ctor of your derived class void implInitializeImageURL( ); + + DECL_LINK( OnImageImportDone, ::Graphic* ); }; class ImageModelMethodGuard : public ::osl::MutexGuard
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits