summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZolnai Tamás <zolnaitamas2000@gmail.com>2015-07-16 03:01:59 +0200
committerChristian Lohmaier <lohmaier+LibreOffice@googlemail.com>2015-07-22 20:53:01 +0000
commit09c45087cf02eef3166fb870bae531d40216ca66 (patch)
tree956a5463d0ed54f9bbc7d10069085b93f193d4b6
parentd004a44336f58b7acc146c7d27707f142797042f (diff)
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) Conflicts: forms/source/component/clickableimage.cxx Change-Id: Iad31904bef65e30796538685f7cd7ae8f59762dc Reviewed-on: https://gerrit.libreoffice.org/17111 Reviewed-by: Michael Meeks <michael.meeks@collabora.com> Reviewed-by: Adolfo Jayme Barrientos <fitojb@ubuntu.com> Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com> Tested-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com>
-rw-r--r--forms/source/component/clickableimage.cxx21
-rw-r--r--forms/source/component/clickableimage.hxx5
2 files changed, 26 insertions, 0 deletions
diff --git a/forms/source/component/clickableimage.cxx b/forms/source/component/clickableimage.cxx
index 71ad12e50887..fe5bcde851d6 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 ) );
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 60f03b89b920..f3d34cac1f5b 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