diff options
Diffstat (limited to 'framework/source/services/backingcomp.cxx')
-rw-r--r-- | framework/source/services/backingcomp.cxx | 842 |
1 files changed, 0 insertions, 842 deletions
diff --git a/framework/source/services/backingcomp.cxx b/framework/source/services/backingcomp.cxx deleted file mode 100644 index 89a757de7192..000000000000 --- a/framework/source/services/backingcomp.cxx +++ /dev/null @@ -1,842 +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 "services/backingcomp.hxx" - -#include "backingwindow.hxx" - -#include <threadhelp/readguard.hxx> -#include <threadhelp/writeguard.hxx> -#include <classes/droptargetlistener.hxx> -#include <targets.h> -#include <properties.h> -#include <services.h> - -#include <helpid.hrc> - -#include <com/sun/star/beans/NamedValue.hpp> -#include <com/sun/star/util/XURLTransformer.hpp> -#include <com/sun/star/frame/XDispatchProvider.hpp> -#include <com/sun/star/beans/XPropertySet.hpp> -#include <com/sun/star/awt/Toolkit.hpp> -#include <com/sun/star/awt/XDataTransferProviderAccess.hpp> -#include <com/sun/star/datatransfer/dnd/XDropTarget.hpp> -#include <com/sun/star/awt/KeyEvent.hpp> -#include <com/sun/star/awt/KeyModifier.hpp> -#include <com/sun/star/frame/XLayoutManager.hpp> -#include <com/sun/star/util/URLTransformer.hpp> - -#include <comphelper/processfactory.hxx> -#include <cppuhelper/typeprovider.hxx> -#include <cppuhelper/factory.hxx> -#include <toolkit/helper/vclunohelper.hxx> -#include <vcl/keycod.hxx> -#include <vcl/wrkwin.hxx> -#include <vcl/svapp.hxx> -#include <rtl/ustrbuf.hxx> - -#include <svl/solar.hrc> -#include <svl/urihelper.hxx> -#include <osl/file.hxx> -#include <unotools/configmgr.hxx> - -#include <unotools/bootstrap.hxx> - -namespace framework -{ - -//_______________________________________________ - -//_______________________________________________ - -BackingComp::BackingComp( const css::uno::Reference< css::uno::XComponentContext >& xContext ) - : ThreadHelpBase (&Application::GetSolarMutex() ) - , m_xContext (xContext ) -{ -} - -//_______________________________________________ - -BackingComp::~BackingComp() -{ -} - -//_______________________________________________ - -/** return information about supported interfaces. - - Some interfaces are supported by his class directly, but some other ones are - used by aggregation. An instance of this class must provide some window interfaces. - But it must represent a VCL window behind such interfaces too! So we use an internal - saved window member to ask it for it's interfaces and return it. But we must be aware then, - that it can be destroyed from outside too ... - - @param aType - describe the required interface type - - @return An Any holding the instance, which provides the queried interface. - Note: There exist two possible results ... this instance itself and her window member! - */ - -css::uno::Any SAL_CALL BackingComp::queryInterface( /*IN*/ const css::uno::Type& aType ) - throw(css::uno::RuntimeException) -{ - css::uno::Any aResult; - - // first look for own supported interfaces - aResult = ::cppu::queryInterface( - aType, - static_cast< css::lang::XTypeProvider* >(this), - static_cast< css::lang::XServiceInfo* >(this), - static_cast< css::lang::XInitialization* >(this), - static_cast< css::frame::XController* >(this), - static_cast< css::lang::XComponent* >(this), - static_cast< css::lang::XEventListener* >(this), - static_cast< css::awt::XKeyListener* >(static_cast< css::lang::XEventListener* >(this))); - - // then look for supported window interfaces - // Note: They exist only, if this instance was initialized - // with a valid window reference. It's aggregation on demand ... - if (!aResult.hasValue()) - { - /* SAFE { */ - ReadGuard aReadLock(m_aLock); - if (m_xWindow.is()) - aResult = m_xWindow->queryInterface(aType); - aReadLock.unlock(); - /* } SAFE */ - } - - // look for XWeak and XInterface - if (!aResult.hasValue()) - aResult = OWeakObject::queryInterface(aType); - - return aResult; -} - -//_______________________________________________ - -/** increase ref count of this instance. - */ - -void SAL_CALL BackingComp::acquire() - throw() -{ - OWeakObject::acquire(); -} - -//_______________________________________________ - -/** decrease ref count of this instance. - */ - -void SAL_CALL BackingComp::release() - throw() -{ - OWeakObject::release(); -} - -//_______________________________________________ - -/** return collection about all supported interfaces. - - Optimize this method ! - We initialize a static variable only one time. - And we don't must use a mutex at every call! - For the first call; pTypeCollection is NULL - - for the second call pTypeCollection is different from NULL! - - @return A list of all supported interface types. -*/ - -css::uno::Sequence< css::uno::Type > SAL_CALL BackingComp::getTypes() - throw(css::uno::RuntimeException) -{ - static ::cppu::OTypeCollection* pTypeCollection = NULL; - if (!pTypeCollection) - { - /* GLOBAL SAFE { */ - ::osl::MutexGuard aGlobalLock(::osl::Mutex::getGlobalMutex()); - // Control these pointer again ... it can be, that another instance will be faster then this one! - if (!pTypeCollection) - { - /* LOCAL SAFE { */ - ReadGuard aReadLock(m_aLock); - css::uno::Reference< css::lang::XTypeProvider > xProvider(m_xWindow, css::uno::UNO_QUERY); - aReadLock.unlock(); - /* } LOCAL SAFE */ - - css::uno::Sequence< css::uno::Type > lWindowTypes; - if (xProvider.is()) - lWindowTypes = xProvider->getTypes(); - - static ::cppu::OTypeCollection aTypeCollection( - ::getCppuType((const ::com::sun::star::uno::Reference< css::lang::XInitialization >*)NULL ), - ::getCppuType((const ::com::sun::star::uno::Reference< css::lang::XTypeProvider >*)NULL ), - ::getCppuType((const ::com::sun::star::uno::Reference< css::lang::XServiceInfo >*)NULL ), - ::getCppuType((const ::com::sun::star::uno::Reference< css::frame::XController >*)NULL ), - ::getCppuType((const ::com::sun::star::uno::Reference< css::lang::XComponent >*)NULL ), - lWindowTypes); - - pTypeCollection = &aTypeCollection; - } - /* } GLOBAL SAFE */ - } - return pTypeCollection->getTypes(); -} - -//_______________________________________________ - -/** create one unique Id for all instances of this class. - - Optimize this method - We initialize a static variable only one time. And we don't must use a mutex at every call! - For the first call; pID is NULL - for the second call pID is different from NULL! - - @return A byte array, which represent the unique id. -*/ - -css::uno::Sequence< sal_Int8 > SAL_CALL BackingComp::getImplementationId() - throw(css::uno::RuntimeException) -{ - static ::cppu::OImplementationId* pID = NULL; - if (!pID) - { - /* GLOBAL SAFE { */ - ::osl::MutexGuard aLock(::osl::Mutex::getGlobalMutex()); - // Control these pointer again ... it can be, that another instance will be faster then this one! - if (!pID) - { - static ::cppu::OImplementationId aID(sal_False); - pID = &aID; - } - /* } GLOBAL SAFE */ - } - return pID->getImplementationId(); -} - -//_______________________________________________ - -/** returns a static implementation name for this UNO service. - - Because this value is needed at different places and our class is used - by some generic macros too, we have to use a static impl method for that! - - @see impl_getStaticImplementationName() - @see IMPLEMENTATIONNAME - - @return The implementation name of this class. -*/ - -OUString SAL_CALL BackingComp::getImplementationName() - throw(css::uno::RuntimeException) -{ - return impl_getStaticImplementationName(); -} - -//_______________________________________________ - -/** returns information about supported services. - - Because this value is needed at different places and our class is used - by some generic macros too, we have to use a static impl method for that! - - @see impl_getStaticSupportedServiceNames() - @see SERVICENAME - - @return <TRUE/> if the queried service is supported; - <br><FALSE/> otherwise. -*/ - -sal_Bool SAL_CALL BackingComp::supportsService( /*IN*/ const OUString& sServiceName ) - throw(css::uno::RuntimeException) -{ - return ( - sServiceName.equals("com.sun.star.frame.StartModule") || - sServiceName.equals(SERVICENAME_FRAMECONTROLLER) - ); -} - -//_______________________________________________ - -/** returns collection of supported services. - - Because this value is needed at different places and our class is used - by some generic macros too, we have to use a static impl method for that! - - @see impl_getStaticSupportedServiceNames() - @see SERVICENAME - - @return A list of all supported uno service names. -*/ - -css::uno::Sequence< OUString > SAL_CALL BackingComp::getSupportedServiceNames() - throw(css::uno::RuntimeException) -{ - return impl_getStaticSupportedServiceNames(); -} - -//_______________________________________________ - -/** returns static implementation name. - - Because this value is needed at different places and our class is used - by some generic macros too, we have to use a static impl method for that! - - @see impl_getStaticSupportedServiceNames() - @see SERVICENAME - - @return The implementation name of this class. -*/ - -OUString BackingComp::impl_getStaticImplementationName() -{ - return IMPLEMENTATIONNAME_STARTMODULE; -} - -//_______________________________________________ - -/** returns static list of supported service names. - - Because this value is needed at different places and our class is used - by some generic macros too, we have to use a static impl method for that! - - @see impl_getStaticSupportedServiceNames() - @see SERVICENAME - - @return A list of all supported uno service names. -*/ - -css::uno::Sequence< OUString > BackingComp::impl_getStaticSupportedServiceNames() -{ - css::uno::Sequence< OUString > lNames(1); - lNames[0] = "com.sun.star.frame.StartModule"; - return lNames; -} - -//_______________________________________________ - -/** returns a new instance of this class. - - This factory method is registered inside the UNO runtime - and will be called for every createInstance() request from outside, - which wish to use this service. - - @param xSMGR - reference to the uno service manager, which call us - We use it too, to set it at the new created instance. - - @return A new instance as uno reference. -*/ - -css::uno::Reference< css::uno::XInterface > SAL_CALL BackingComp::impl_createInstance( /*IN*/ const css::uno::Reference< css::lang::XMultiServiceFactory >& xSMGR ) - throw(css::uno::Exception) -{ - BackingComp* pObject = new BackingComp(comphelper::getComponentContext(xSMGR)); - return css::uno::Reference< css::uno::XInterface >(static_cast< ::cppu::OWeakObject* >(pObject), css::uno::UNO_QUERY); -} - -//_______________________________________________ - -/** returns a new factory instance for instances of this class. - - It uses a helper class of the cppuhelper project as factory. - It will be initialized with all neccessary information and - will be able afterwards to create instance of this class. - This factory call us back inside our method impl_createInstance(). - So we can create and initialize ourself. Only filtering of creation - requests will be done by this factory. - - @param xSMGR - reference to the uno service manager, which call us - - @return A new instance of our factory. -*/ - -css::uno::Reference< css::lang::XSingleServiceFactory > BackingComp::impl_createFactory( /*IN*/ const css::uno::Reference< css::lang::XMultiServiceFactory >& xSMGR ) -{ - css::uno::Reference< css::lang::XSingleServiceFactory > xReturn( - cppu::createSingleFactory( - xSMGR, - BackingComp::impl_getStaticImplementationName(), - BackingComp::impl_createInstance, - BackingComp::impl_getStaticSupportedServiceNames())); - return xReturn; -} - -//_______________________________________________ - -/** - attach this component to a target frame. - - We has to use the container window of this frame as parent window of our own component window. - But it's not allowed to work with it realy. May another component used it too. - Currently we need it only to create our child component window and support it's - interfaces inside our queryInterface() method. The user of us must have e.g. the - XWindow interface of it to be able to call setComponent(xWindow,xController) at the - frame! - - May he will do the following things: - - <listing> - XController xBackingComp = (XController)UnoRuntime.queryInterface( - XController.class, - xSMGR.createInstance(SERVICENAME_STARTMODULE)); - - // at this time XWindow isn't present at this instance! - XWindow xBackingComp = (XWindow)UnoRuntime.queryInterface( - XWindow.class, - xBackingComp); - - // attach controller to the frame - // We will use it's container window, to create - // the component window. From now we offer the window interfaces! - xBackingComp.attachFrame(xFrame); - - XWindow xBackingComp = (XWindow)UnoRuntime.queryInterface( - XWindow.class, - xBackingComp); - - // Our user can set us at the frame as new component - xFrame.setComponent(xBackingWin, xBackingComp); - - // But that had no effect to our view state. - // We must be started to create our UI elements like e.g. menu, title, background ... - XInitialization xBackingInit = (XInitialization)UnoRuntime.queryInterface( - XInitialization.class, - xBackingComp); - - xBackingInit.initialize(lArgs); - </listing> - - @param xFrame - reference to our new target frame - - @throw com::sun::star::uno::RuntimeException - if the given frame reference is wrong or component window couldn't be created - successfully. - We throw it too, if we already attached to a frame. Because we don't support - reparenting of our component window on demand! -*/ - -void SAL_CALL BackingComp::attachFrame( /*IN*/ const css::uno::Reference< css::frame::XFrame >& xFrame ) - throw (css::uno::RuntimeException) -{ - /* SAFE */ - WriteGuard aWriteLock(m_aLock); - - // check some required states - if (m_xFrame.is()) - throw css::uno::RuntimeException( - OUString("already attached"), - static_cast< ::cppu::OWeakObject* >(this)); - - if (!xFrame.is()) - throw css::uno::RuntimeException( - OUString("invalid frame reference"), - static_cast< ::cppu::OWeakObject* >(this)); - - if (!m_xWindow.is()) - return; // disposed - - // safe the frame reference - m_xFrame = xFrame; - - // establish drag&drop mode - ::framework::DropTargetListener* pDropListener = new ::framework::DropTargetListener( m_xContext, m_xFrame); - m_xDropTargetListener = css::uno::Reference< css::datatransfer::dnd::XDropTargetListener >(static_cast< ::cppu::OWeakObject* >(pDropListener), css::uno::UNO_QUERY); - - css::uno::Reference< css::awt::XToolkit2 > xToolkit = css::awt::Toolkit::create( m_xContext ); - css::uno::Reference< css::datatransfer::dnd::XDropTarget > xDropTarget = xToolkit->getDropTarget(m_xWindow); - if (xDropTarget.is()) - { - xDropTarget->addDropTargetListener(m_xDropTargetListener); - xDropTarget->setActive(sal_True); - } - - // initialize the component and it's parent window - css::uno::Reference< css::awt::XWindow > xParentWindow = xFrame->getContainerWindow(); - WorkWindow* pParent = (WorkWindow*)VCLUnoHelper::GetWindow(xParentWindow); - Window* pWindow = VCLUnoHelper::GetWindow(m_xWindow); - - // disable full screen mode of the frame! - if (pParent && pParent->IsFullScreenMode()) - { - pParent->ShowFullScreenMode(sal_False); - pParent->SetMenuBarMode(MENUBAR_MODE_NORMAL); - } - - // create the menu bar for the backing component - css::uno::Reference< css::beans::XPropertySet > xPropSet(m_xFrame, css::uno::UNO_QUERY_THROW); - css::uno::Reference< css::frame::XLayoutManager > xLayoutManager; - xPropSet->getPropertyValue(FRAME_PROPNAME_LAYOUTMANAGER) >>= xLayoutManager; - if (xLayoutManager.is()) - { - xLayoutManager->lock(); - xLayoutManager->createElement( DECLARE_ASCII( "private:resource/menubar/menubar" )); - xLayoutManager->unlock(); - } - - if (pWindow) - { - // set help ID for our canvas - pWindow->SetHelpId(HID_BACKINGWINDOW); - } - - // inform BackingWindow about frame - BackingWindow* pBack = dynamic_cast<BackingWindow*>(pWindow ); - if( pBack ) - pBack->setOwningFrame( m_xFrame ); - - aWriteLock.unlock(); - /* } SAFE */ -} - -//_______________________________________________ - -/** not supported. - - This component does not know any model. It will be represented by a window and - it's controller only. - - return <FALSE/> everytime. - */ - -sal_Bool SAL_CALL BackingComp::attachModel( /*IN*/ const css::uno::Reference< css::frame::XModel >& ) - throw (css::uno::RuntimeException) -{ - return sal_False; -} - -//_______________________________________________ - -/** not supported. - - This component does not know any model. It will be represented by a window and - it's controller only. - - return An empty reference every time. - */ - -css::uno::Reference< css::frame::XModel > SAL_CALL BackingComp::getModel() - throw (css::uno::RuntimeException) -{ - return css::uno::Reference< css::frame::XModel >(); -} - -//_______________________________________________ - -/** not supported. - - return An empty value. - */ - -css::uno::Any SAL_CALL BackingComp::getViewData() - throw (css::uno::RuntimeException) -{ - return css::uno::Any(); -} - -//_______________________________________________ - -/** not supported. - - @param aData - not used. - */ - -void SAL_CALL BackingComp::restoreViewData( /*IN*/ const css::uno::Any& ) - throw (css::uno::RuntimeException) -{ -} - -//_______________________________________________ - -/** returns the attached frame for this component. - - @see attachFrame() - - @return The internaly saved frame reference. - Can be null, if attachFrame() was not called before. - */ - -css::uno::Reference< css::frame::XFrame > SAL_CALL BackingComp::getFrame() - throw (css::uno::RuntimeException) -{ - /* SAFE { */ - ReadGuard aReadLock(m_aLock); - return m_xFrame; - /* } SAFE */ -} - -//_______________________________________________ - -/** ask controller for it's current working state. - - If somehwere whish to close this component, it must suspend the controller before. - That will be a chance for it to disagree with that AND show any UI for a possible - UI user. - - @param bSuspend - If its set to sal_True this controller should be suspended. - sal_False will resuspend it. - - @return sal_True if the request could be finished successfully; sal_False otherwise. - */ - -sal_Bool SAL_CALL BackingComp::suspend( /*IN*/ sal_Bool ) - throw (css::uno::RuntimeException) -{ - /* FIXME ... implemented by using default :-( */ - return sal_True; -} - -//_______________________________________________ - -/** callback from our window member. - - Our internal saved window wish to die. It will be disposed from outside (may be the frame) - and inform us. We must release its reference only here. Of course we check the given reference - here and reject callback from unknown sources. - - Note: deregistration as listener isnt neccessary here. The broadcaster do it automaticly. - - @param aEvent - describe the broadcaster of this callback - - @throw ::com::sun::star::uno::RuntimeException - if the broadcaster doesn't represent the expected window reference. -*/ - -void SAL_CALL BackingComp::disposing( /*IN*/ const css::lang::EventObject& aEvent ) - throw(css::uno::RuntimeException) -{ - // Attention: dont free m_pAccExec here! see comments inside dtor and - // keyPressed() for further details. - - /* SAFE { */ - WriteGuard aWriteLock(m_aLock); - - if (!aEvent.Source.is() || aEvent.Source!=m_xWindow || !m_xWindow.is()) - throw css::uno::RuntimeException( - OUString("unexpected source or called twice"), - static_cast< ::cppu::OWeakObject* >(this)); - - m_xWindow = css::uno::Reference< css::awt::XWindow >(); - - aWriteLock.unlock(); - /* } SAFE */ -} - -//_______________________________________________ - -/** kill this instance. - - It can be called from our owner frame only. But there is no possibility to check the calli. - We have to release all our internal used resources and die. From this point we can throw - DisposedExceptions for every further interface request ... but current implementation doesn`t do so ... - -*/ - -void SAL_CALL BackingComp::dispose() - throw(css::uno::RuntimeException) -{ - /* SAFE { */ - WriteGuard aWriteLock(m_aLock); - - // kill the menu - css::util::URL aURL; - aURL.Complete = DECLARE_ASCII(".uno:close"); - css::uno::Reference< css::util::XURLTransformer > xParser = css::util::URLTransformer::create(m_xContext); - if (xParser.is()) - xParser->parseStrict(aURL); - - css::uno::Reference< css::frame::XDispatchProvider > xProvider(m_xFrame, css::uno::UNO_QUERY); - if (xProvider.is()) - { - css::uno::Reference< css::frame::XDispatch > xDispatch = xProvider->queryDispatch(aURL, SPECIALTARGET_MENUBAR, 0); - if (xDispatch.is()) - xDispatch->dispatch(aURL, css::uno::Sequence< css::beans::PropertyValue>()); - } - - // deregister drag&drop helper - if (m_xDropTargetListener.is()) - { - css::uno::Reference< css::awt::XToolkit2 > xToolkit = css::awt::Toolkit::create( m_xContext ); - css::uno::Reference< css::datatransfer::dnd::XDropTarget > xDropTarget = xToolkit->getDropTarget(m_xWindow); - if (xDropTarget.is()) - { - xDropTarget->removeDropTargetListener(m_xDropTargetListener); - xDropTarget->setActive(sal_False); - } - m_xDropTargetListener = css::uno::Reference< css::datatransfer::dnd::XDropTargetListener >(); - } - - // stop listening at the window - if (m_xWindow.is()) - { - css::uno::Reference< css::lang::XComponent > xBroadcaster(m_xWindow, css::uno::UNO_QUERY); - if (xBroadcaster.is()) - { - css::uno::Reference< css::lang::XEventListener > xEventThis(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY); - xBroadcaster->removeEventListener(xEventThis); - } - css::uno::Reference< css::awt::XKeyListener > xKeyThis(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY); - m_xWindow->removeKeyListener(xKeyThis); - m_xWindow = css::uno::Reference< css::awt::XWindow >(); - } - - // forget all other used references - m_xFrame.clear(); - m_xContext.clear(); - - aWriteLock.unlock(); - /* } SAFE */ -} - -//_______________________________________________ - -/** not supported. - - @param xListener - not used. - - @throw ::com::sun::star::uno::RuntimeException - because the listener expect to be holded alive by this container. - We must inform it about this unsupported feature. - */ - -void SAL_CALL BackingComp::addEventListener( /*IN*/ const css::uno::Reference< css::lang::XEventListener >& ) - throw(css::uno::RuntimeException) -{ - throw css::uno::RuntimeException( - OUString("not supported"), - static_cast< ::cppu::OWeakObject* >(this)); -} - -//_______________________________________________ - -/** not supported. - - Because registration is not supported too, we must do nothing here. Nobody can call this method realy. - - @param xListener - not used. - */ - -void SAL_CALL BackingComp::removeEventListener( /*IN*/ const css::uno::Reference< css::lang::XEventListener >& ) - throw(css::uno::RuntimeException) -{ -} - -//_______________________________________________ - -/** - force initialiation for this component. - - Inside attachFrame() we created our component window. But it was not allowed there, to - initialitze it. E.g. the menu must be set at the container window of the frame, which - is our parent window. But may at that time another component used it. - That's why our creator has to inform us, when it's time to initialize us realy. - Currently only calling of this method must be done. But further implementatoins - can use special in parameter to configure this initialization ... - - @param lArgs - currently not used - - @throw com::sun::star::uno::RuntimeException - if some resources are missing - Means if may be attachedFrame() wasn't called before. - */ - -void SAL_CALL BackingComp::initialize( /*IN*/ const css::uno::Sequence< css::uno::Any >& lArgs ) - throw(css::uno::Exception, css::uno::RuntimeException) -{ - /* SAFE { */ - WriteGuard aWriteLock(m_aLock); - - if (m_xWindow.is()) - throw css::uno::Exception( - OUString("already initialized"), - static_cast< ::cppu::OWeakObject* >(this)); - - css::uno::Reference< css::awt::XWindow > xParentWindow; - if ( - (lArgs.getLength()!=1 ) || - (!(lArgs[0] >>= xParentWindow)) || - (!xParentWindow.is() ) - ) - { - throw css::uno::Exception( - OUString("wrong or corrupt argument list"), - static_cast< ::cppu::OWeakObject* >(this)); - } - - // create the component window - Window* pParent = VCLUnoHelper::GetWindow(xParentWindow); - Window* pWindow = new BackingWindow(pParent); - m_xWindow = VCLUnoHelper::GetInterface(pWindow); - - if (!m_xWindow.is()) - throw css::uno::RuntimeException( - OUString("couldn't create component window"), - static_cast< ::cppu::OWeakObject* >(this)); - - // start listening for window disposing - // It's set at our owner frame as component window later too. So it will may be disposed there ... - css::uno::Reference< css::lang::XComponent > xBroadcaster(m_xWindow, css::uno::UNO_QUERY); - if (xBroadcaster.is()) - xBroadcaster->addEventListener(static_cast< css::lang::XEventListener* >(this)); - - m_xWindow->setVisible(sal_True); - - aWriteLock.unlock(); - /* } SAFE */ -} - -//_______________________________________________ - -/** - */ - -void SAL_CALL BackingComp::keyPressed( /*IN*/ const css::awt::KeyEvent& ) - throw(css::uno::RuntimeException) -{ -} - -//_______________________________________________ - -/** - */ - -void SAL_CALL BackingComp::keyReleased( /*IN*/ const css::awt::KeyEvent& ) - throw(css::uno::RuntimeException) -{ - /* Attention - Please use keyPressed() instead of this method. Otherwhise it would be possible, that - - a key input may be first switch to the backing mode - - and this component register itself as key listener too - - and it's first event will be a keyRealeased() for the already well known event, which switched to the backing mode! - So it will be handled twice! document => backing mode => exit app ... - */ -} - -} // namespace framework - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |