summaryrefslogtreecommitdiff
path: root/toolkit
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit')
-rw-r--r--toolkit/inc/toolkit/helper/formpdfexport.hxx8
-rw-r--r--toolkit/source/awt/vclxtoolkit.cxx9
-rw-r--r--toolkit/source/controls/controlmodelcontainerbase.cxx4
-rw-r--r--toolkit/source/controls/dialogcontrol.cxx5
-rw-r--r--toolkit/source/controls/unocontrol.cxx18
-rw-r--r--toolkit/source/helper/formpdfexport.cxx23
-rw-r--r--toolkit/source/helper/unowrapper.cxx10
7 files changed, 52 insertions, 25 deletions
diff --git a/toolkit/inc/toolkit/helper/formpdfexport.hxx b/toolkit/inc/toolkit/helper/formpdfexport.hxx
index 2bed137d0e6b..73ed870c13e5 100644
--- a/toolkit/inc/toolkit/helper/formpdfexport.hxx
+++ b/toolkit/inc/toolkit/helper/formpdfexport.hxx
@@ -39,6 +39,11 @@
#include <memory>
+namespace vcl
+{
+ class PDFExtOutDevData;
+}
+
//........................................................................
namespace toolkitform
{
@@ -48,7 +53,8 @@ namespace toolkitform
*/
void TOOLKIT_DLLPUBLIC describePDFControl(
const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >& _rxControl,
- ::std::auto_ptr< ::vcl::PDFWriter::AnyWidget >& _rpDescriptor
+ ::std::auto_ptr< ::vcl::PDFWriter::AnyWidget >& _rpDescriptor,
+ ::vcl::PDFExtOutDevData& i_pdfExportData
) SAL_THROW(());
//........................................................................
diff --git a/toolkit/source/awt/vclxtoolkit.cxx b/toolkit/source/awt/vclxtoolkit.cxx
index a8cf619f21bf..82a73fedf954 100644
--- a/toolkit/source/awt/vclxtoolkit.cxx
+++ b/toolkit/source/awt/vclxtoolkit.cxx
@@ -803,7 +803,14 @@ Window* VCLXToolkit::ImplCreateWindow( VCLXWindow** ppNewComp,
if ( (pParent == NULL ) && ( rDescriptor.ParentIndex == -1 ) )
pParent = DIALOG_NO_PARENT;
pNewWindow = new Dialog( pParent, nWinBits );
- *ppNewComp = new VCLXDialog;
+ // #i70217# Don't always create a new component object. It's possible that VCL has called
+ // GetComponentInterface( sal_True ) in the Dialog ctor itself (see Window::IsTopWindow() )
+ // which creates a component object.
+ css::uno::Reference< css::awt::XWindowPeer > xWinPeer = pNewWindow->GetComponentInterface( sal_False );
+ if ( xWinPeer.is() )
+ *ppNewComp = dynamic_cast< VCLXDialog* >( xWinPeer.get() );
+ else
+ *ppNewComp = new VCLXDialog;
}
break;
case WINDOW_MOREBUTTON:
diff --git a/toolkit/source/controls/controlmodelcontainerbase.cxx b/toolkit/source/controls/controlmodelcontainerbase.cxx
index 81a2ed511ae0..525e5d30ce3f 100644
--- a/toolkit/source/controls/controlmodelcontainerbase.cxx
+++ b/toolkit/source/controls/controlmodelcontainerbase.cxx
@@ -436,7 +436,7 @@ Sequence< ::rtl::OUString > ControlModelContainerBase::getAvailableServiceNames(
static Sequence< ::rtl::OUString >* pNamesSeq = NULL;
if ( !pNamesSeq )
{
- pNamesSeq = new Sequence< ::rtl::OUString >( 25 );
+ pNamesSeq = new Sequence< ::rtl::OUString >( 26 );
::rtl::OUString* pNames = pNamesSeq->getArray();
pNames[0] = ::rtl::OUString::createFromAscii( szServiceName2_UnoControlEditModel );
pNames[1] = ::rtl::OUString::createFromAscii( szServiceName2_UnoControlFormattedFieldModel );
@@ -461,7 +461,7 @@ Sequence< ::rtl::OUString > ControlModelContainerBase::getAvailableServiceNames(
pNames[20] = ::rtl::OUString::createFromAscii( szServiceName_TreeControlModel );
pNames[21] = ::rtl::OUString::createFromAscii( szServiceName_GridControlModel );
pNames[22] = ::rtl::OUString::createFromAscii( szServiceName_UnoControlTabPageContainerModel );
-
+ pNames[23] = ::rtl::OUString::createFromAscii( szServiceName_UnoControlTabPageModel );
pNames[23] = ::rtl::OUString::createFromAscii( szServiceName_UnoMultiPageModel );
pNames[24] = ::rtl::OUString::createFromAscii( szServiceName_UnoFrameModel );
}
diff --git a/toolkit/source/controls/dialogcontrol.cxx b/toolkit/source/controls/dialogcontrol.cxx
index 461353e347fa..2b7f664a8b00 100644
--- a/toolkit/source/controls/dialogcontrol.cxx
+++ b/toolkit/source/controls/dialogcontrol.cxx
@@ -422,7 +422,10 @@ throw (::com::sun::star::uno::RuntimeException)
Reference< XControl > xDialogControl( *this, UNO_QUERY_THROW );
Reference< XDevice > xDialogDevice( xDialogControl->getPeer(), UNO_QUERY );
OSL_ENSURE( xDialogDevice.is(), "UnoDialogControl::windowResized: no peer, but a windowResized event?" );
- if ( xDialogDevice.is() )
+
+ // #i87592 In design mode the drawing layer works with sizes with decoration.
+ // Therefore we have to substract them before writing back to the properties (model).
+ if ( xDialogDevice.is() && mbDesignMode )
{
DeviceInfo aDeviceInfo( xDialogDevice->getInfo() );
aAppFontSize.Width() -= aDeviceInfo.LeftInset + aDeviceInfo.RightInset;
diff --git a/toolkit/source/controls/unocontrol.cxx b/toolkit/source/controls/unocontrol.cxx
index d759e05e318d..af46d98cef5d 100644
--- a/toolkit/source/controls/unocontrol.cxx
+++ b/toolkit/source/controls/unocontrol.cxx
@@ -91,17 +91,6 @@ static const LanguageDependentProp aLanguageDependentProp[] =
{ 0, 0 }
};
-WorkWindow* lcl_GetDefaultWindow()
-{
- static WorkWindow* pW = NULL;
- if ( !pW )
- {
- pW = new WorkWindow( NULL, 0 );
- pW->EnableChildTransparentMode();
- }
- return pW;
-}
-
static Sequence< ::rtl::OUString> lcl_ImplGetPropertyNames( const Reference< XMultiPropertySet > & rxModel )
{
Sequence< ::rtl::OUString> aNames;
@@ -237,14 +226,15 @@ Reference< XWindowPeer > UnoControl::ImplGetCompatiblePeer( sal_Bool bAcceptE
Reference< XControl > xMe;
OWeakAggObject::queryInterface( ::getCppuType( &xMe ) ) >>= xMe;
- WorkWindow* pWW;
+ Window* pParentWindow( NULL );
{
SolarMutexGuard aGuard;
- pWW = lcl_GetDefaultWindow();
+ pParentWindow = dynamic_cast< Window* >( Application::GetDefaultDevice() );
+ ENSURE_OR_THROW( pParentWindow != NULL, "could obtain a default parent window!" );
}
try
{
- xMe->createPeer( NULL, pWW->GetComponentInterface( sal_True ) );
+ xMe->createPeer( NULL, pParentWindow->GetComponentInterface( sal_True ) );
}
catch( const Exception& )
{
diff --git a/toolkit/source/helper/formpdfexport.cxx b/toolkit/source/helper/formpdfexport.cxx
index ae2af72ab09b..d62570084c2a 100644
--- a/toolkit/source/helper/formpdfexport.cxx
+++ b/toolkit/source/helper/formpdfexport.cxx
@@ -267,7 +267,8 @@ namespace toolkitform
//--------------------------------------------------------------------
/** creates a PDF compatible control descriptor for the given control
*/
- void TOOLKIT_DLLPUBLIC describePDFControl( const Reference< XControl >& _rxControl, ::std::auto_ptr< ::vcl::PDFWriter::AnyWidget >& _rpDescriptor ) SAL_THROW(())
+ void TOOLKIT_DLLPUBLIC describePDFControl( const Reference< XControl >& _rxControl,
+ ::std::auto_ptr< ::vcl::PDFWriter::AnyWidget >& _rpDescriptor, ::vcl::PDFExtOutDevData& i_pdfExportData ) SAL_THROW(())
{
_rpDescriptor.reset( NULL );
OSL_ENSURE( _rxControl.is(), "describePDFControl: invalid (NULL) control!" );
@@ -494,7 +495,25 @@ namespace toolkitform
}
else if ( eButtonType == FormButtonType_URL )
{
- OSL_VERIFY( xModelProps->getPropertyValue( FM_PROP_TARGET_URL ) >>= pButtonWidget->URL);
+ ::rtl::OUString sURL;
+ OSL_VERIFY( xModelProps->getPropertyValue( FM_PROP_TARGET_URL ) >>= sURL );
+ const bool bDocumentLocalTarget = ( sURL.getLength() > 0 ) && ( sURL.getStr()[0] == '#' );
+ if ( bDocumentLocalTarget )
+ {
+ const ::rtl::OUString sDestinationName( sURL.copy(1) );
+ // Register the destination for for future handling ...
+ pButtonWidget->Dest = i_pdfExportData.RegisterDest();
+
+ // and put it into the bookmarks, to ensure the future handling really happens
+ ::std::vector< ::vcl::PDFExtOutDevBookmarkEntry >& rBookmarks( i_pdfExportData.GetBookmarks() );
+ ::vcl::PDFExtOutDevBookmarkEntry aBookmark;
+ aBookmark.nDestId = pButtonWidget->Dest;
+ aBookmark.aBookmark = sURL;
+ rBookmarks.push_back( aBookmark );
+ }
+ else
+ pButtonWidget->URL = sURL;
+
pButtonWidget->Submit = false;
}
diff --git a/toolkit/source/helper/unowrapper.cxx b/toolkit/source/helper/unowrapper.cxx
index 01cef532a60f..34ca76ebd8d3 100644
--- a/toolkit/source/helper/unowrapper.cxx
+++ b/toolkit/source/helper/unowrapper.cxx
@@ -182,11 +182,13 @@ void UnoWrapper::SetWindowInterface( Window* pWindow, ::com::sun::star::uno::Ref
DBG_ASSERT( pVCLXWindow, "SetComponentInterface - unsupported type" );
if ( pVCLXWindow )
{
- if( pWindow->GetWindowPeer() )
+ ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer> xPeer = pWindow->GetWindowPeer();
+ if( xPeer.is() )
{
- int i = 0;
- i++;
- // OSL_FAIL( "UnoWrapper::SetWindowInterface: there already *is* a WindowInterface for this window!" );
+ bool bSameInstance( pVCLXWindow == dynamic_cast< VCLXWindow* >( xPeer.get() ));
+ DBG_ASSERT( bSameInstance, "UnoWrapper::SetWindowInterface: there already *is* a WindowInterface for this window!" );
+ if ( bSameInstance )
+ return;
}
pVCLXWindow->SetWindow( pWindow );
pWindow->SetWindowPeer( xIFace, pVCLXWindow );