[Libreoffice-commits] core.git: Branch 'libreoffice-4-4' - forms/source
Zolnai Tamás
zolnaitamas2000 at gmail.com
Thu Jul 16 01:57:13 PDT 2015
forms/source/component/clickableimage.cxx | 21 +++++++++++++++++++++
forms/source/component/clickableimage.hxx | 5 +++++
2 files changed, 26 insertions(+)
New commits:
commit 3d9b62a40947dbb25360f32a6b330519be6f04ea
Author: Zolnai Tamás <zolnaitamas2000 at gmail.com>
Date: Wed Jul 15 23:23:48 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)
Conflicts:
forms/source/component/clickableimage.cxx
Change-Id: If99a3efc4727a07df9d2daaefbdacc9565920005
Reviewed-on: https://gerrit.libreoffice.org/17092
Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
Tested-by: Michael Meeks <michael.meeks at collabora.com>
diff --git a/forms/source/component/clickableimage.cxx b/forms/source/component/clickableimage.cxx
index 71ad12e..fe5bcde 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 60f03b8..f3d34ca 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
More information about the Libreoffice-commits
mailing list