summaryrefslogtreecommitdiff
path: root/framework/source/services/backingwindow.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'framework/source/services/backingwindow.cxx')
-rw-r--r--framework/source/services/backingwindow.cxx691
1 files changed, 0 insertions, 691 deletions
diff --git a/framework/source/services/backingwindow.cxx b/framework/source/services/backingwindow.cxx
deleted file mode 100644
index 3043e02d1b0f..000000000000
--- a/framework/source/services/backingwindow.cxx
+++ /dev/null
@@ -1,691 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include "backingwindow.hxx"
-#include <services.h>
-
-#include <vcl/svapp.hxx>
-#include <vcl/virdev.hxx>
-
-#include <unotools/dynamicmenuoptions.hxx>
-#include <svtools/langhelp.hxx>
-#include <svtools/colorcfg.hxx>
-
-#include <comphelper/processfactory.hxx>
-#include <comphelper/sequenceashashmap.hxx>
-
-#include <toolkit/awt/vclxmenu.hxx>
-
-#include <com/sun/star/frame/Desktop.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/container/XNameAccess.hpp>
-#include <com/sun/star/configuration/theDefaultProvider.hpp>
-#include <com/sun/star/system/SystemShellExecute.hpp>
-#include <com/sun/star/system/SystemShellExecuteFlags.hpp>
-#include <com/sun/star/util/URLTransformer.hpp>
-#include <com/sun/star/frame/PopupMenuControllerFactory.hpp>
-
-using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::frame;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star;
-using namespace framework;
-
-const char RECENT_FILE_LIST[] = ".uno:RecentFileList";
-
-const char WRITER_URL[] = "private:factory/swriter";
-const char CALC_URL[] = "private:factory/scalc";
-const char IMPRESS_WIZARD_URL[] = "private:factory/simpress?slot=6686";
-const char DRAW_URL[] = "private:factory/sdraw";
-const char BASE_URL[] = "private:factory/sdatabase?Interactive";
-const char MATH_URL[] = "private:factory/smath";
-const char TEMPLATE_URL[] = "slot:5500";
-const char OPEN_URL[] = ".uno:Open";
-
-const int nItemId_Extensions = 1;
-const int nItemId_Info = 3;
-const int nItemId_TplRep = 4;
-
-const int nShadowTop = 30;
-const int nShadowLeft = 30;
-const int nShadowRight = 30;
-const int nShadowBottom = 30;
-
-const int nPaddingTop = 30;
-const int nPaddingLeft = 50;
-const int nPaddingRight = 50;
-const int nPaddingBottom = 30;
-
-const int nLogoHeight = 150;
-
-BackingWindow::BackingWindow( Window* i_pParent ) :
- Window( i_pParent ),
- mbInitControls( false ),
- mnHideExternalLinks( 0 ),
- mpAccExec( NULL )
-{
- m_pUIBuilder = new VclBuilder(this, getUIRootDir(),
- "modules/StartModule/ui/startcenter.ui",
- "StartCenter" );
- get(mpWriterButton, "writer");
- get(mpCalcButton, "calc");
- get(mpImpressButton, "impress");
- get(mpOpenButton, "open");
- get(mpDrawButton, "draw");
- get(mpDBButton, "database");
- get(mpMathButton, "math");
- get(mpTemplateButton, "templates");
-
- get(mpExtensionsButton, "extension");
- get(mpInfoButton, "info");
- get(mpTplRepButton, "add_temp");
-
- get(mpStartCenterContainer, "sccontainer");
-
- try
- {
- mxContext.set( ::comphelper::getProcessComponentContext(), uno::UNO_SET_THROW );
- Reference<lang::XMultiServiceFactory> xConfig = configuration::theDefaultProvider::get( mxContext );
- Sequence<Any> args(1);
- PropertyValue val(
- "nodepath",
- 0,
- Any(OUString("/org.openoffice.Office.Common/Help/StartCenter")),
- PropertyState_DIRECT_VALUE);
- args.getArray()[0] <<= val;
- Reference<container::XNameAccess> xNameAccess(xConfig->createInstanceWithArguments(SERVICENAME_CFGREADACCESS,args), UNO_QUERY);
- if( xNameAccess.is() )
- {
- //throws css::container::NoSuchElementException, css::lang::WrappedTargetException
- Any value( xNameAccess->getByName("StartCenterHideExternalLinks") );
- mnHideExternalLinks = value.get<sal_Int32>();
- }
-
- mxPopupMenuFactory.set(
- frame::PopupMenuControllerFactory::create( mxContext ) );
- // TODO If there is no PopupMenuController, the button should be a nomral one not a MenuButton
- if ( mxPopupMenuFactory->hasController(
- OUString( RECENT_FILE_LIST ) , OUString("com.sun.star.frame.StartModule") ) )
- {
- mxPopupMenu.set( mxContext->getServiceManager()->createInstanceWithContext(
- OUString( "com.sun.star.awt.PopupMenu" ), mxContext ), uno::UNO_QUERY_THROW );
- }
- }
- catch (const Exception& e)
- {
- SAL_WARN( "fwk", "BackingWindow - caught an exception! " << e.Message );
- }
-
- // clean up resource stack
- //FreeResource();
-
- // fdo#34392: we do the layout dynamically, the layout depends on the font,
- // so we should handle data changed events (font changing) of the last child
- // control, at this point all the controls have updated settings (i.e. font).
-
- EnableChildTransparentMode();
-
- SetStyle( GetStyle() | WB_DIALOGCONTROL );
-
- // get dispatch provider
- Reference<XDesktop2> xDesktop = Desktop::create( comphelper::getProcessComponentContext() );
- mxDesktopDispatchProvider = xDesktop;
-
- mpWriterButton->SetHelpId( ".HelpId:StartCenter:WriterButton" );
- mpCalcButton->SetHelpId( ".HelpId:StartCenter:CalcButton" );
- mpImpressButton->SetHelpId( ".HelpId:StartCenter:ImpressButton" );
- mpDrawButton->SetHelpId( ".HelpId:StartCenter:DrawButton" );
- mpDBButton->SetHelpId( ".HelpId:StartCenter:DBButton" );
- mpMathButton->SetHelpId( ".HelpId:StartCenter:MathButton" );
- mpTemplateButton->SetHelpId( ".HelpId:StartCenter:TemplateButton" );
- mpOpenButton->SetHelpId( ".HelpId:StartCenter:OpenButton" );
- mpExtensionsButton->SetHelpId( ".HelpId:StartCenter:Extensions" );
- mpInfoButton->SetHelpId( ".HelpId:StartCenter:Info" );
- mpTplRepButton->SetHelpId( ".HelpId:StartCenter:TemplateRepository" );
-
- // init background
- initBackground();
-}
-
-
-BackingWindow::~BackingWindow()
-{
- if( mxPopupMenuController.is() )
- {
- Reference< lang::XComponent > xComponent( mxPopupMenuController, UNO_QUERY );
- if( xComponent.is() )
- {
- try
- {
- xComponent->dispose();
- }
- catch (...)
- {}
- }
- mxPopupMenuController.clear();
- }
- mxPopupMenuFactory.clear();
- mxPopupMenu.clear();
-}
-
-IMPL_LINK( BackingWindow, WindowEventListener, VclSimpleEvent*, pEvent )
-{
- VclWindowEvent* pWinEvent = dynamic_cast<VclWindowEvent*>( pEvent );
- if ( pWinEvent && pWinEvent->GetId() == VCLEVENT_WINDOW_DATACHANGED )
- {
- DataChangedEvent* pDCEvt =
- static_cast<DataChangedEvent*>( pWinEvent->GetData() );
- if ( pDCEvt->GetFlags() & SETTINGS_STYLE )
- {
- initBackground();
- Invalidate();
- // fdo#34392: Resize buttons to match the new text size.
- Resize();
- }
- }
- return 0;
-}
-
-void BackingWindow::prepareRecentFileMenu()
-{
- if( ! mxPopupMenu.is() )
- return;
-
- if ( !mxPopupMenuController.is() )
- {
- uno::Sequence< uno::Any > aArgs( 2 );
- beans::PropertyValue aProp;
-
- aProp.Name = OUString( "Frame" );
- aProp.Value <<= mxFrame;
- aArgs[0] <<= aProp;
-
- aProp.Name = OUString( "ModuleIdentifier" );
- aProp.Value <<= OUString("com.sun.star.frame.StartModule");
- aArgs[1] <<= aProp;
- try
- {
- mxPopupMenuController.set(
- mxPopupMenuFactory->createInstanceWithArgumentsAndContext(
- OUString( RECENT_FILE_LIST ), aArgs, mxContext),
- uno::UNO_QUERY_THROW );
- mxPopupMenuController->setPopupMenu( mxPopupMenu );
- }
- catch ( const Exception &e )
- {
- SAL_WARN( "fwk", "BackingWindow - caught an exception! " << e.Message );
- }
-
- PopupMenu *pRecentMenu = NULL;
- VCLXMenu* pTKMenu = VCLXMenu::GetImplementation( mxPopupMenu );
- if ( pTKMenu )
- pRecentMenu = dynamic_cast< PopupMenu * >( pTKMenu->GetMenu() );
- mpOpenButton->SetPopupMenu( pRecentMenu );
- }
-}
-
-void BackingWindow::initBackground()
-{
- SetBackground();
-
- // scale middle segment
- Size aMiddleSize;
- if( !! maBackgroundMiddle )
- aMiddleSize = maBackgroundMiddle.GetSizePixel();
-
- // load middle segment
- Application::LoadBrandBitmap ("shell/backing_space", maBackgroundMiddle);
-
- // and scale it to previous size
- if( aMiddleSize.Width() && aMiddleSize.Height() )
- maBackgroundMiddle.Scale( aMiddleSize );
-
- if( GetSettings().GetLayoutRTL() )
- {
- // replace images by RTL versions
- Application::LoadBrandBitmap ("shell/backing_rtl_right", maBackgroundLeft);
- Application::LoadBrandBitmap ("shell/backing_rtl_left", maBackgroundRight);
- }
- else
- {
- Application::LoadBrandBitmap ("shell/backing_left", maBackgroundLeft);
- Application::LoadBrandBitmap ("shell/backing_right", maBackgroundRight);
- }
-
- mpOpenButton->SetMenuMode( MENUBUTTON_MENUMODE_TIMED );
- mpOpenButton->SetActivateHdl( LINK( this, BackingWindow, ActivateHdl ) );
-
- // this will be moved to somewhere saner later
- mnSCWidth = 780;
- mnSCHeight = maBackgroundLeft.GetSizePixel().Height();
-}
-
-void BackingWindow::initControls()
-{
- if( mbInitControls )
- return;
-
- mbInitControls = true;
-
- // collect the URLs of the entries in the File/New menu
- SvtModuleOptions aModuleOptions;
- std::set< OUString > aFileNewAppsAvailable;
- SvtDynamicMenuOptions aOpt;
- Sequence < Sequence < PropertyValue > > aNewMenu = aOpt.GetMenu( E_NEWMENU );
- const OUString sURLKey( "URL" );
-
- const Sequence< PropertyValue >* pNewMenu = aNewMenu.getConstArray();
- const Sequence< PropertyValue >* pNewMenuEnd = aNewMenu.getConstArray() + aNewMenu.getLength();
- for ( ; pNewMenu != pNewMenuEnd; ++pNewMenu )
- {
- comphelper::SequenceAsHashMap aEntryItems( *pNewMenu );
- OUString sURL( aEntryItems.getUnpackedValueOrDefault( sURLKey, OUString() ) );
- if ( !sURL.isEmpty() )
- aFileNewAppsAvailable.insert( sURL );
- }
-
- setupButton( mpWriterButton, WRITER_URL, aFileNewAppsAvailable,
- aModuleOptions, SvtModuleOptions::E_SWRITER );
- setupButton( mpDrawButton, DRAW_URL, aFileNewAppsAvailable,
- aModuleOptions, SvtModuleOptions::E_SDRAW );
- setupButton( mpCalcButton, CALC_URL, aFileNewAppsAvailable,
- aModuleOptions, SvtModuleOptions::E_SCALC );
- setupButton( mpDBButton, BASE_URL, aFileNewAppsAvailable,
- aModuleOptions, SvtModuleOptions::E_SDATABASE );
- setupButton( mpImpressButton, IMPRESS_WIZARD_URL, aFileNewAppsAvailable,
- aModuleOptions, SvtModuleOptions::E_SIMPRESS );
- setupButton( mpMathButton, MATH_URL, aFileNewAppsAvailable,
- aModuleOptions, SvtModuleOptions::E_SMATH );
-
- setupButton( mpOpenButton, "", aFileNewAppsAvailable,
- aModuleOptions, SvtModuleOptions::E_SWRITER );
- setupButton( mpTemplateButton, "", aFileNewAppsAvailable,
- aModuleOptions, SvtModuleOptions::E_SWRITER );
-
- setupExternalLink( mpExtensionsButton );
- setupExternalLink( mpInfoButton );
- setupExternalLink( mpTplRepButton );
-
- Resize();
-
- mpWriterButton->GrabFocus();
-}
-
-void BackingWindow::setupButton( PushButton* pButton, const OUString &rURL,
- const std::set<OUString>& rURLS,
- SvtModuleOptions& rOpt, SvtModuleOptions::EModule eMod )
-{
- pButton->SetClickHdl( LINK( this, BackingWindow, ClickHdl ) );
-
- // disable the parts that are not installed
- if( !rURL.isEmpty() && (!rOpt.IsModuleInstalled( eMod ) || rURLS.find( rURL ) == rURLS.end()) )
- {
- pButton->Enable( sal_False );
- }
-
- // setup text - slighly larger font than normal labels on the texts
- Font aFont;
- aFont.SetSize( Size( 0, 11 ) );
- aFont.SetWeight( WEIGHT_NORMAL );
-
- pButton->SetFont( aFont );
- pButton->SetControlFont( aFont );
-}
-
-void BackingWindow::setupExternalLink( PushButton* pButton )
-{
- if( mnHideExternalLinks == 0 )
- pButton->Show();
- else
- pButton->Hide();
-
- pButton->SetClickHdl( LINK( this, BackingWindow, ExtLinkClickHdl ) );
-}
-
-void BackingWindow::Paint( const Rectangle& )
-{
- Resize();
-
- Wallpaper aBack( svtools::ColorConfig().GetColorValue(::svtools::APPBACKGROUND).nColor );
- Region aClip( Rectangle( Point( 0, 0 ), GetOutputSizePixel() ) );
-
- Rectangle aBmpRect(Point((GetOutputSizePixel().Width()-mnSCWidth)/2,
- (GetOutputSizePixel().Height()-mnSCHeight)/2),
- Size(mnSCWidth,mnSCHeight));
- aClip.Exclude( aBmpRect );
-
- Push( PUSH_CLIPREGION );
- IntersectClipRegion( aClip );
- DrawWallpaper( Rectangle( Point( 0, 0 ), GetOutputSizePixel() ), aBack );
- Pop();
-
- VirtualDevice aDev( *this );
- aDev.EnableRTL( IsRTLEnabled() );
- aDev.SetOutputSizePixel( aBmpRect.GetSize() );
- Point aOffset( Point( 0, 0 ) - aBmpRect.TopLeft());
- aDev.DrawWallpaper( Rectangle( aOffset, GetOutputSizePixel() ), aBack );
-
- maBackgroundMiddle.Scale(
- Size(mnSCWidth - maBackgroundLeft.GetSizePixel().Width() - maBackgroundRight.GetSizePixel().Width(),
- maBackgroundMiddle.GetSizePixel().Height()),
- BMP_SCALE_FAST);
-
- // draw bitmap
- Point aTL( 0, 0 );
- aDev.DrawBitmapEx( aTL, maBackgroundLeft );
- aTL.X() += maBackgroundLeft.GetSizePixel().Width();
- if( !!maBackgroundMiddle )
- {
- aDev.DrawBitmapEx( aTL, maBackgroundMiddle );
- aTL.X() += maBackgroundMiddle.GetSizePixel().Width();
- }
- aDev.DrawBitmapEx( aTL, maBackgroundRight );
-
- DrawOutDev( aBmpRect.TopLeft(), aBmpRect.GetSize(),
- Point( 0, 0 ), aBmpRect.GetSize(),
- aDev );
-}
-
-long BackingWindow::Notify( NotifyEvent& rNEvt )
-{
- if( rNEvt.GetType() == EVENT_KEYINPUT )
- {
- // try the 'normal' accelerators (so that eg. Ctrl+Q works)
- if( !mpAccExec )
- {
- mpAccExec = svt::AcceleratorExecute::createAcceleratorHelper();
- mpAccExec->init( comphelper::getProcessComponentContext(), mxFrame);
- }
-
- const KeyEvent* pEvt = rNEvt.GetKeyEvent();
- const KeyCode& rKeyCode(pEvt->GetKeyCode());
- if( pEvt && mpAccExec->execute(rKeyCode) )
- return 1;
-
- // #i110344# extrawurst: specialized arrow key control
- if( rKeyCode.GetModifier() == 0 )
- {
- if( rKeyCode.GetCode() == KEY_RIGHT )
- {
- if( mpWriterButton->HasFocus() )
- mpDrawButton->GrabFocus();
- else if( mpCalcButton->HasFocus() )
- mpDBButton->GrabFocus();
- else if( mpImpressButton->HasFocus() )
- mpMathButton->GrabFocus();
- else if( mpOpenButton->HasFocus() )
- mpTemplateButton->GrabFocus();
- return 1;
- }
- else if( rKeyCode.GetCode() == KEY_LEFT )
- {
- if( mpDrawButton->HasFocus() )
- mpWriterButton->GrabFocus();
- else if( mpDBButton->HasFocus() )
- mpCalcButton->GrabFocus();
- else if( mpMathButton->HasFocus() )
- mpImpressButton->GrabFocus();
- else if( mpTemplateButton->HasFocus() )
- mpOpenButton->GrabFocus();
- return 1;
- }
- else if( rKeyCode.GetCode() == KEY_UP )
- {
- // first column
- if( mpOpenButton->HasFocus() )
- mpImpressButton->GrabFocus();
- else if( mpImpressButton->HasFocus() )
- mpCalcButton->GrabFocus();
- else if( mpCalcButton->HasFocus() )
- mpWriterButton->GrabFocus();
- // second column
- else if( mpTemplateButton->HasFocus() )
- mpMathButton->GrabFocus();
- else if( mpMathButton->HasFocus() )
- mpDBButton->GrabFocus();
- else if( mpDBButton->HasFocus() )
- mpDrawButton->GrabFocus();
- return 1;
- }
- else if( rKeyCode.GetCode() == KEY_DOWN )
- {
- // first column
- if( mpWriterButton->HasFocus() )
- mpCalcButton->GrabFocus();
- else if( mpCalcButton->HasFocus() )
- mpImpressButton->GrabFocus();
- else if( mpImpressButton->HasFocus() )
- mpOpenButton->GrabFocus();
- // second column
- else if( mpDrawButton->HasFocus() )
- mpDBButton->GrabFocus();
- else if( mpDBButton->HasFocus() )
- mpMathButton->GrabFocus();
- else if( mpMathButton->HasFocus() )
- mpTemplateButton->GrabFocus();
- return 1;
- }
- }
- }
-
- return Window::Notify( rNEvt );
-}
-
-void BackingWindow::setOwningFrame( const com::sun::star::uno::Reference< com::sun::star::frame::XFrame >& xFrame )
-{
- mxFrame = xFrame;
- if( ! mbInitControls )
- initControls();
-}
-
-void BackingWindow::Resize()
-{
- maStartCentButtons = Rectangle(
- Point((GetOutputSizePixel().Width()-mnSCWidth)/2 + nShadowTop + nPaddingTop,
- (GetOutputSizePixel().Height()-mnSCHeight)/2 + nShadowLeft + nPaddingLeft + nLogoHeight),
- Size(mnSCWidth - nShadowLeft - nShadowRight - nPaddingLeft - nPaddingRight,
- mnSCHeight - nShadowTop - nShadowBottom - nPaddingTop - nPaddingBottom - nLogoHeight));
- if (isLayoutEnabled(this))
- VclContainer::setLayoutAllocation(*GetWindow(WINDOW_FIRSTCHILD),
- maStartCentButtons.TopLeft(), maStartCentButtons.GetSize());
-
- if( !IsInPaint())
- Invalidate();
-}
-
-IMPL_LINK( BackingWindow, ExtLinkClickHdl, Button*, pButton )
-{
- const char* pNode = NULL;
-
- if( pButton == mpExtensionsButton )
- pNode = "AddFeatureURL";
- else if( pButton == mpInfoButton )
- pNode = "InfoURL";
- else if( pButton == mpTplRepButton )
- pNode = "TemplateRepositoryURL";
-
- if( pNode )
- {
- const char* pNodePath = "/org.openoffice.Office.Common/Help/StartCenter";
- try
- {
- Reference<lang::XMultiServiceFactory> xConfig = configuration::theDefaultProvider::get( comphelper::getProcessComponentContext() );
- Sequence<Any> args(1);
- PropertyValue val(
- "nodepath",
- 0,
- Any(OUString::createFromAscii(pNodePath)),
- PropertyState_DIRECT_VALUE);
- args.getArray()[0] <<= val;
- Reference<container::XNameAccess> xNameAccess(xConfig->createInstanceWithArguments(SERVICENAME_CFGREADACCESS,args), UNO_QUERY);
- if( xNameAccess.is() )
- {
- OUString sURL;
- //throws css::container::NoSuchElementException, css::lang::WrappedTargetException
- Any value( xNameAccess->getByName(OUString::createFromAscii(pNode)) );
- sURL = value.get<OUString> ();
- localizeWebserviceURI(sURL);
-
- Reference< com::sun::star::system::XSystemShellExecute > xSystemShellExecute(
- com::sun::star::system::SystemShellExecute::create(comphelper::getProcessComponentContext()));
- //throws css::lang::IllegalArgumentException, css::system::SystemShellExecuteException
- xSystemShellExecute->execute( sURL, OUString(), com::sun::star::system::SystemShellExecuteFlags::URIS_ONLY);
- }
- }
- catch (const Exception&)
- {
- }
- }
- return 0;
-}
-
-IMPL_LINK( BackingWindow, ClickHdl, Button*, pButton )
-{
- // dispatch the appropriate URL and end the dialog
- if( pButton == mpWriterButton )
- dispatchURL( WRITER_URL );
- else if( pButton == mpCalcButton )
- dispatchURL( CALC_URL );
- else if( pButton == mpImpressButton )
- dispatchURL( IMPRESS_WIZARD_URL );
- else if( pButton == mpDrawButton )
- dispatchURL( DRAW_URL );
- else if( pButton == mpDBButton )
- dispatchURL( BASE_URL );
- else if( pButton == mpMathButton )
- dispatchURL( MATH_URL );
- else if( pButton == mpOpenButton )
- {
- Reference< XDispatchProvider > xFrame( mxFrame, UNO_QUERY );
-
- Sequence< com::sun::star::beans::PropertyValue > aArgs(1);
- PropertyValue* pArg = aArgs.getArray();
- pArg[0].Name = "Referer";
- pArg[0].Value <<= OUString("private:user");
-
- dispatchURL( OPEN_URL, OUString(), xFrame, aArgs );
- }
- else if( pButton == mpTemplateButton )
- {
- Reference< XDispatchProvider > xFrame( mxFrame, UNO_QUERY );
-
- Sequence< com::sun::star::beans::PropertyValue > aArgs(1);
- PropertyValue* pArg = aArgs.getArray();
- pArg[0].Name = OUString("Referer");
- pArg[0].Value <<= OUString("private:user");
-
- dispatchURL( TEMPLATE_URL, OUString(), xFrame, aArgs );
- }
- return 0;
-}
-
-IMPL_LINK( BackingWindow, ActivateHdl, Button*, pButton )
-{
- if( pButton == mpOpenButton )
- prepareRecentFileMenu();
- return 0;
-}
-
-struct ImplDelayedDispatch
-{
- Reference< XDispatch > xDispatch;
- com::sun::star::util::URL aDispatchURL;
- Sequence< PropertyValue > aArgs;
-
- ImplDelayedDispatch( const Reference< XDispatch >& i_xDispatch,
- const com::sun::star::util::URL& i_rURL,
- const Sequence< PropertyValue >& i_rArgs )
- : xDispatch( i_xDispatch ),
- aDispatchURL( i_rURL ),
- aArgs( i_rArgs )
- {
- }
- ~ImplDelayedDispatch() {}
-};
-
-static long implDispatchDelayed( void*, void* pArg )
-{
- struct ImplDelayedDispatch* pDispatch = reinterpret_cast<ImplDelayedDispatch*>(pArg);
- try
- {
- pDispatch->xDispatch->dispatch( pDispatch->aDispatchURL, pDispatch->aArgs );
- }
- catch (const Exception&)
- {
- }
-
- // clean up
- delete pDispatch;
-
- return 0;
-}
-
-void BackingWindow::dispatchURL( const OUString& i_rURL,
- const OUString& rTarget,
- const Reference< XDispatchProvider >& i_xProv,
- const Sequence< PropertyValue >& i_rArgs )
-{
- // if no special dispatch provider is given, get the desktop
- Reference< XDispatchProvider > xProvider( i_xProv.is() ? i_xProv : mxDesktopDispatchProvider );
-
- // check for dispatch provider
- if( !xProvider.is())
- return;
-
- // get an URL transformer to clean up the URL
- com::sun::star::util::URL aDispatchURL;
- aDispatchURL.Complete = i_rURL;
-
- Reference < com::sun::star::util::XURLTransformer > xURLTransformer(
- com::sun::star::util::URLTransformer::create( comphelper::getProcessComponentContext() ) );
- try
- {
- // clean up the URL
- xURLTransformer->parseStrict( aDispatchURL );
- // get a Dispatch for the URL and target
- Reference< XDispatch > xDispatch(
- xProvider->queryDispatch( aDispatchURL, rTarget, 0 )
- );
- // dispatch the URL
- if ( xDispatch.is() )
- {
- ImplDelayedDispatch* pDisp = new ImplDelayedDispatch( xDispatch, aDispatchURL, i_rArgs );
- sal_uLong nEventId = 0;
- if( ! Application::PostUserEvent( nEventId, Link( NULL, implDispatchDelayed ), pDisp ) )
- delete pDisp; // event could not be posted for unknown reason, at least don't leak
- }
- }
- catch (const com::sun::star::uno::RuntimeException&)
- {
- throw;
- }
- catch (const com::sun::star::uno::Exception&)
- {
- }
-}
-
-Size BackingWindow::GetOptimalSize() const
-{
- if (isLayoutEnabled(this))
- return VclContainer::getLayoutRequisition(*GetWindow(WINDOW_FIRSTCHILD));
-
- return Window::GetOptimalSize();
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab:*/