summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarsten Driesner <cd@openoffice.org>2010-11-01 16:19:46 +0100
committerCarsten Driesner <cd@openoffice.org>2010-11-01 16:19:46 +0100
commit9acf5d3ea667f443be01441aa8bedbb096e339ca (patch)
tree5b6c05e7e77702ecf7f38f70a603e1ac989bddee
parent9849b4fc14d50a2f3c3bc033accf66f38de44a20 (diff)
dockingwindows: #i112595# Fix issue with setDockingAreaAcceptor(). Added mising SetAlign() calls for DockingAreaWindows. Some cleanup.
-rwxr-xr-xframework/source/layoutmanager/helpers.cxx20
-rwxr-xr-xframework/source/layoutmanager/layoutmanager.cxx22
-rwxr-xr-xframework/source/layoutmanager/toolbarlayoutmanager.cxx74
-rwxr-xr-xframework/source/layoutmanager/toolbarlayoutmanager.hxx3
4 files changed, 75 insertions, 44 deletions
diff --git a/framework/source/layoutmanager/helpers.cxx b/framework/source/layoutmanager/helpers.cxx
index d1f9c50fd8..42b27e8177 100755
--- a/framework/source/layoutmanager/helpers.cxx
+++ b/framework/source/layoutmanager/helpers.cxx
@@ -110,14 +110,14 @@ bool isHorizontalDockingArea( const sal_Int32 nDockArea )
{
ToolBox* pToolBox = dynamic_cast<ToolBox *>( pWindow );
if ( pToolBox )
- {
+ {
aToolbarName = pToolBox->GetSmartHelpId().GetStr();
sal_Int32 i = aToolbarName.lastIndexOf( ':' );
if (( aToolbarName.getLength() > 0 ) && ( i > 0 ) && (( i+ 1 ) < aToolbarName.getLength() ))
aToolbarName = aToolbarName.copy( i+1 ); // Remove ".HelpId:" protocol from toolbar name
else
- aToolbarName = ::rtl::OUString();
- }
+ aToolbarName = ::rtl::OUString();
+ }
}
return aToolbarName;
}
@@ -132,7 +132,7 @@ ToolBox* getToolboxPtr( Window* pWindow )
Window* getWindowFromXUIElement( const uno::Reference< ui::XUIElement >& xUIElement )
{
- vos::OGuard aGuard( Application::GetSolarMutex() );
+ vos::OGuard aGuard( Application::GetSolarMutex() );
uno::Reference< awt::XWindow > xWindow;
if ( xUIElement.is() )
xWindow = uno::Reference< awt::XWindow >( xUIElement->getRealInterface(), uno::UNO_QUERY );
@@ -169,7 +169,7 @@ bool lcl_checkUIElement(const uno::Reference< ui::XUIElement >& xUIElement, awt:
bool bRet = xUIElement.is();
if ( bRet )
{
- vos::OGuard aGuard( Application::GetSolarMutex() );
+ vos::OGuard aGuard( Application::GetSolarMutex() );
_xWindow.set( xUIElement->getRealInterface(), uno::UNO_QUERY );
_rPosSize = _xWindow->getPosSize();
@@ -311,12 +311,12 @@ uno::Reference< frame::XModel > impl_getModelFromFrame( const uno::Reference< fr
{
// Query for the model to get check the context information
uno::Reference< frame::XModel > xModel;
- if ( rFrame.is() )
- {
+ if ( rFrame.is() )
+ {
uno::Reference< frame::XController > xController( rFrame->getController(), uno::UNO_QUERY );
- if ( xController.is() )
- xModel = xController->getModel();
- }
+ if ( xController.is() )
+ xModel = xController->getModel();
+ }
return xModel;
}
diff --git a/framework/source/layoutmanager/layoutmanager.cxx b/framework/source/layoutmanager/layoutmanager.cxx
index 8c266f5010..1cdd893559 100755
--- a/framework/source/layoutmanager/layoutmanager.cxx
+++ b/framework/source/layoutmanager/layoutmanager.cxx
@@ -1321,7 +1321,7 @@ throw ( RuntimeException )
if ( !xDockingAreaAcceptor.is() )
m_aAsyncLayoutTimer.Stop();
- // Remove listener from old docking area acceptor
+ // Remove listener from old docking area acceptor
if ( m_xDockingAreaAcceptor.is() )
{
Reference< awt::XWindow > xWindow( m_xDockingAreaAcceptor->getContainerWindow() );
@@ -1330,15 +1330,11 @@ throw ( RuntimeException )
m_aDockingArea = awt::Rectangle();
if ( pToolbarManager )
- pToolbarManager->reset();
+ pToolbarManager->resetDockingArea();
Window* pContainerWindow = VCLUnoHelper::GetWindow( xWindow );
if ( pContainerWindow )
pContainerWindow->RemoveChildEventListener( LINK( this, LayoutManager, WindowEventListener ) );
-
- // destroy panel manager
- delete m_pPanelManager;
- m_pPanelManager = NULL;
}
Reference< ui::XDockingAreaAcceptor > xOldDockingAreaAcceptor( m_xDockingAreaAcceptor );
@@ -1364,11 +1360,6 @@ throw ( RuntimeException )
}
uno::Reference< awt::XWindowPeer > xParent( m_xContainerWindow, UNO_QUERY );
- pToolbarManager->setParentWindow( xParent );
-
- // create new panel manager
- m_pPanelManager = new PanelManager( m_xSMGR, m_xFrame );
- m_pPanelManager->createPanels();
}
aWriteLock.unlock();
@@ -1376,7 +1367,7 @@ throw ( RuntimeException )
if ( xDockingAreaAcceptor.is() )
{
- vos::OGuard aGuard( Application::GetSolarMutex() );
+ vos::OGuard aGuard( Application::GetSolarMutex() );
// Add layout manager as listener to get notifications about toolbar button activties
Window* pContainerWindow = VCLUnoHelper::GetWindow( m_xContainerWindow );
@@ -1436,6 +1427,13 @@ void LayoutManager::implts_reparentChildWindows()
}
implts_resetMenuBar();
+
+ aWriteLock.lock();
+ uno::Reference< ui::XUIConfigurationListener > xToolbarManager( m_xToolbarManager );
+ ToolbarLayoutManager* pToolbarManager = m_pToolbarManager;
+ if ( pToolbarManager )
+ pToolbarManager->setParentWindow( uno::Reference< awt::XWindowPeer >( xContainerWindow, uno::UNO_QUERY ));
+ aWriteLock.unlock();
}
uno::Reference< ui::XUIElement > LayoutManager::implts_createDockingWindow( const ::rtl::OUString& aElementName )
diff --git a/framework/source/layoutmanager/toolbarlayoutmanager.cxx b/framework/source/layoutmanager/toolbarlayoutmanager.cxx
index 2ef819543a..16568834ef 100755
--- a/framework/source/layoutmanager/toolbarlayoutmanager.cxx
+++ b/framework/source/layoutmanager/toolbarlayoutmanager.cxx
@@ -53,6 +53,7 @@
#include <toolkit/helper/convert.hxx>
#include <toolkit/awt/vclxwindow.hxx>
#include <vcl/i18nhelp.hxx>
+#include <vcl/dockingarea.hxx>
#include <boost/bind.hpp>
using namespace ::com::sun::star;
@@ -79,6 +80,7 @@ ToolbarLayoutManager::ToolbarLayoutManager(
m_bDockingInProgress( false ),
m_bVisible( true ),
m_bLayoutInProgress( false ),
+ m_bToolbarCreation( false ),
m_aFullAddonTbxPrefix( RTL_CONSTASCII_USTRINGPARAM( "private:resource/toolbar/addon_" )),
m_aCustomTbxPrefix( RTL_CONSTASCII_USTRINGPARAM( "custom_" )),
m_aCustomizeCmd( RTL_CONSTASCII_USTRINGPARAM( "ConfigureDialog" )),
@@ -831,21 +833,24 @@ long ToolbarLayoutManager::childWindowEvent( VclSimpleEvent* pEvent )
}
else if ( pEvent->GetId() == VCLEVENT_TOOLBOX_FORMATCHANGED )
{
- ToolBox* pToolBox = getToolboxPtr( ((VclWindowEvent*)pEvent)->GetWindow() );
- if ( pToolBox )
- {
- ::rtl::OUString aToolbarName = retrieveToolbarNameFromHelpURL( pToolBox );
- if ( aToolbarName.getLength() > 0 )
+ if ( !implts_isToolbarCreationActive() )
+ {
+ ToolBox* pToolBox = getToolboxPtr( ((VclWindowEvent*)pEvent)->GetWindow() );
+ if ( pToolBox )
{
- ::rtl::OUStringBuffer aBuf(100);
- aBuf.appendAscii( "private:resource/toolbar/" );
- aBuf.append( aToolbarName );
-
- UIElement aToolbar = implts_findToolbar( aBuf.makeStringAndClear() );
- if ( aToolbar.m_xUIElement.is() && !aToolbar.m_bFloating )
+ ::rtl::OUString aToolbarName = retrieveToolbarNameFromHelpURL( pToolBox );
+ if ( aToolbarName.getLength() > 0 )
{
- implts_setLayoutDirty();
- m_pParentLayouter->requestLayout( ILayoutNotifications::HINT_TOOLBARSPACE_HAS_CHANGED );
+ ::rtl::OUStringBuffer aBuf(100);
+ aBuf.appendAscii( "private:resource/toolbar/" );
+ aBuf.append( aToolbarName );
+
+ UIElement aToolbar = implts_findToolbar( aBuf.makeStringAndClear() );
+ if ( aToolbar.m_xUIElement.is() && !aToolbar.m_bFloating )
+ {
+ implts_setLayoutDirty();
+ m_pParentLayouter->requestLayout( ILayoutNotifications::HINT_TOOLBARSPACE_HAS_CHANGED );
+ }
}
}
}
@@ -879,21 +884,32 @@ void ToolbarLayoutManager::setParentWindow(
{
static const char DOCKINGAREASTRING[] = "dockingarea";
- uno::Reference< awt::XWindow > xTopDockingWindow = uno::Reference< awt::XWindow >( createToolkitWindow( m_xSMGR, xParentWindow, DOCKINGAREASTRING ), uno::UNO_QUERY );
- uno::Reference< awt::XWindow > xLeftDockingWindow = uno::Reference< awt::XWindow >( createToolkitWindow( m_xSMGR, xParentWindow, DOCKINGAREASTRING ), uno::UNO_QUERY );
- uno::Reference< awt::XWindow > xRightDockingWindow = uno::Reference< awt::XWindow >( createToolkitWindow( m_xSMGR, xParentWindow, DOCKINGAREASTRING ), uno::UNO_QUERY );
- uno::Reference< awt::XWindow > xBottomDockingWindow = uno::Reference< awt::XWindow >( createToolkitWindow( m_xSMGR, xParentWindow, DOCKINGAREASTRING ), uno::UNO_QUERY );
+ uno::Reference< awt::XWindow > xTopDockWindow = uno::Reference< awt::XWindow >( createToolkitWindow( m_xSMGR, xParentWindow, DOCKINGAREASTRING ), uno::UNO_QUERY );
+ uno::Reference< awt::XWindow > xLeftDockWindow = uno::Reference< awt::XWindow >( createToolkitWindow( m_xSMGR, xParentWindow, DOCKINGAREASTRING ), uno::UNO_QUERY );
+ uno::Reference< awt::XWindow > xRightDockWindow = uno::Reference< awt::XWindow >( createToolkitWindow( m_xSMGR, xParentWindow, DOCKINGAREASTRING ), uno::UNO_QUERY );
+ uno::Reference< awt::XWindow > xBottomDockWindow = uno::Reference< awt::XWindow >( createToolkitWindow( m_xSMGR, xParentWindow, DOCKINGAREASTRING ), uno::UNO_QUERY );
WriteGuard aWriteLock( m_aLock );
m_xContainerWindow = uno::Reference< awt::XWindow2 >( xParentWindow, uno::UNO_QUERY );
- m_xDockAreaWindows[ui::DockingArea_DOCKINGAREA_TOP] = xTopDockingWindow;
- m_xDockAreaWindows[ui::DockingArea_DOCKINGAREA_LEFT] = xLeftDockingWindow;
- m_xDockAreaWindows[ui::DockingArea_DOCKINGAREA_RIGHT] = xRightDockingWindow;
- m_xDockAreaWindows[ui::DockingArea_DOCKINGAREA_BOTTOM] = xBottomDockingWindow;
+ m_xDockAreaWindows[ui::DockingArea_DOCKINGAREA_TOP] = xTopDockWindow;
+ m_xDockAreaWindows[ui::DockingArea_DOCKINGAREA_LEFT] = xLeftDockWindow;
+ m_xDockAreaWindows[ui::DockingArea_DOCKINGAREA_RIGHT] = xRightDockWindow;
+ m_xDockAreaWindows[ui::DockingArea_DOCKINGAREA_BOTTOM] = xBottomDockWindow;
aWriteLock.unlock();
if ( xParentWindow.is() )
+ {
+ vos::OGuard aGuard( Application::GetSolarMutex() );
+ ::DockingAreaWindow* pWindow = dynamic_cast< ::DockingAreaWindow* >(VCLUnoHelper::GetWindow( xTopDockWindow ) );
+ if( pWindow ) pWindow->SetAlign( WINDOWALIGN_TOP );
+ pWindow = dynamic_cast< ::DockingAreaWindow* >(VCLUnoHelper::GetWindow( xBottomDockWindow ) );
+ if( pWindow ) pWindow->SetAlign( WINDOWALIGN_BOTTOM );
+ pWindow = dynamic_cast< ::DockingAreaWindow* >(VCLUnoHelper::GetWindow( xLeftDockWindow ) );
+ if( pWindow ) pWindow->SetAlign( WINDOWALIGN_LEFT );
+ pWindow = dynamic_cast< ::DockingAreaWindow* >(VCLUnoHelper::GetWindow( xRightDockWindow ) );
+ if( pWindow ) pWindow->SetAlign( WINDOWALIGN_RIGHT );
implts_reparentToolbars();
+ }
else
{
destroyToolbars();
@@ -1224,12 +1240,23 @@ void ToolbarLayoutManager::implts_reparentToolbars()
}
}
+void ToolbarLayoutManager::implts_setToolbarCreation( bool bStart )
+{
+ WriteGuard aWriteLock( m_aLock );
+ m_bToolbarCreation = bStart;
+}
+
+bool ToolbarLayoutManager::implts_isToolbarCreationActive()
+{
+ ReadGuard aReadLock( m_aLock );
+ return m_bToolbarCreation;
+}
+
void ToolbarLayoutManager::implts_createToolBar( const ::rtl::OUString& aName, bool& bNotify, uno::Reference< ui::XUIElement >& rUIElement )
{
ReadGuard aReadLock( m_aLock );
uno::Reference< frame::XFrame > xFrame( m_xFrame );
uno::Reference< awt::XWindow2 > xContainerWindow( m_xContainerWindow );
- uno::Reference< ui::XUIElementFactory > xUIElementFactory( m_xUIElementFactoryManager );
aReadLock.unlock();
bNotify = false;
@@ -1241,6 +1268,7 @@ void ToolbarLayoutManager::implts_createToolBar( const ::rtl::OUString& aName, b
if ( !aToolbarElement.m_xUIElement.is() )
{
uno::Reference< ui::XUIElement > xUIElement = implts_createElement( aName );
+
bool bVisible( false );
bool bFloating( false );
if ( xUIElement.is() )
@@ -1325,6 +1353,7 @@ uno::Reference< ui::XUIElement > ToolbarLayoutManager::implts_createElement( con
uno::Reference< ui::XUIElementFactory > xUIElementFactory( m_xUIElementFactoryManager );
aReadLock.unlock();
+ implts_setToolbarCreation( true );
try
{
if ( xUIElementFactory.is() )
@@ -1332,6 +1361,7 @@ uno::Reference< ui::XUIElement > ToolbarLayoutManager::implts_createElement( con
}
catch ( container::NoSuchElementException& ) {}
catch ( lang::IllegalArgumentException& ) {}
+ implts_setToolbarCreation( false );
return xUIElement;
}
diff --git a/framework/source/layoutmanager/toolbarlayoutmanager.hxx b/framework/source/layoutmanager/toolbarlayoutmanager.hxx
index 670ef678d2..5b3f62d8a7 100755
--- a/framework/source/layoutmanager/toolbarlayoutmanager.hxx
+++ b/framework/source/layoutmanager/toolbarlayoutmanager.hxx
@@ -288,6 +288,8 @@ class ToolbarLayoutManager : public ::cppu::WeakImplHelper3< ::com::sun::star::a
void implts_createCustomToolBar( const rtl::OUString& aTbxResName, const rtl::OUString& aTitle );
void implts_createToolBar( const ::rtl::OUString& aName, bool& bNotify, ::com::sun::star::uno::Reference< ::com::sun::star::ui::XUIElement >& rUIElement );
css::uno::Reference< css::ui::XUIElement > implts_createElement( const ::rtl::OUString& aName );
+ void implts_setToolbarCreation( bool bStart = true );
+ bool implts_isToolbarCreationActive();
//---------------------------------------------------------------------------------------------------------
// persistence methods
@@ -328,6 +330,7 @@ class ToolbarLayoutManager : public ::cppu::WeakImplHelper3< ::com::sun::star::a
bool m_bDockingInProgress;
bool m_bVisible;
bool m_bLayoutInProgress;
+ bool m_bToolbarCreation;
::rtl::OUString m_aFullAddonTbxPrefix;
::rtl::OUString m_aCustomTbxPrefix;