diff options
author | Matúš Kukan <matus.kukan@collabora.com> | 2014-01-23 09:41:03 +0100 |
---|---|---|
committer | Matúš Kukan <matus.kukan@collabora.com> | 2014-01-24 12:21:21 +0100 |
commit | 3961bcb5f46331a1e6b4ce7f334ba6bbde11c899 (patch) | |
tree | 10cb82c30d5fecc8890f876885ee097e8f32ab81 /toolkit | |
parent | 52d4203a312e9aecac9bffdc2afe93471b88a9dc (diff) |
tk: Constructor feature for VCLXToolkit.
Change-Id: I1575ea1b14342a5a64f13d39e409ed33151bcdf9
Diffstat (limited to 'toolkit')
-rw-r--r-- | toolkit/source/awt/vclxtoolkit.cxx | 182 | ||||
-rw-r--r-- | toolkit/source/helper/registerservices.cxx | 3 | ||||
-rw-r--r-- | toolkit/util/tk.component | 3 |
3 files changed, 171 insertions, 17 deletions
diff --git a/toolkit/source/awt/vclxtoolkit.cxx b/toolkit/source/awt/vclxtoolkit.cxx index 707700f63bc7..6d16cde9f172 100644 --- a/toolkit/source/awt/vclxtoolkit.cxx +++ b/toolkit/source/awt/vclxtoolkit.cxx @@ -17,17 +17,11 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ - -#include <boost/ptr_container/ptr_vector.hpp> - -#include <com/sun/star/beans/PropertyAttribute.hpp> - #include <stdio.h> #ifdef WNT #include <prewin.h> #include <postwin.h> #endif -#include <com/sun/star/awt/ImageScaleMode.hpp> #include <com/sun/star/awt/WindowAttribute.hpp> #include <com/sun/star/awt/VclWindowPeerAttribute.hpp> #include <com/sun/star/awt/WindowClass.hpp> @@ -43,11 +37,21 @@ #include <com/sun/star/uno/XInterface.hpp> #include <com/sun/star/beans/NamedValue.hpp> #include <com/sun/star/datatransfer/clipboard/SystemClipboard.hpp> +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/awt/XToolkitExperimental.hpp> +#include <com/sun/star/awt/XMessageBoxFactory.hpp> + +#include <cppuhelper/compbase2.hxx> +#include <cppuhelper/interfacecontainer.hxx> #include <cppuhelper/supportsservice.hxx> #include <cppuhelper/typeprovider.hxx> #include <osl/conditn.hxx> +#include <osl/module.h> +#include <osl/mutex.hxx> #include <rtl/uuid.h> #include <rtl/process.h> +#include <tools/link.hxx> +#include <tools/wintypes.hxx> #ifdef MACOSX #include "premac.h" @@ -65,7 +69,6 @@ using org::libreoffice::touch::ByteBufferWrapper; #include <toolkit/awt/vclxwindows.hxx> #include <toolkit/awt/vclxsystemdependentwindow.hxx> #include <toolkit/awt/vclxregion.hxx> -#include <toolkit/awt/vclxtoolkit.hxx> #include <toolkit/awt/vclxtabpagecontainer.hxx> #include <toolkit/awt/vclxtabpagemodel.hxx> @@ -129,7 +132,154 @@ using org::libreoffice::touch::ByteBufferWrapper; #define SYSTEM_DEPENDENT_TYPE ::com::sun::star::lang::SystemDependent::SYSTEM_XWINDOW #endif -TOOLKIT_DLLPUBLIC WinBits ImplGetWinBits( sal_uInt32 nComponentAttribs, sal_uInt16 nCompType ) +namespace { + +extern "C" typedef Window* (SAL_CALL *FN_SvtCreateWindow)( + VCLXWindow** ppNewComp, + const css::awt::WindowDescriptor* pDescriptor, + Window* pParent, + WinBits nWinBits ); + +class VCLXToolkit_Impl +{ +protected: + ::osl::Mutex maMutex; +}; + +class VCLXToolkit : public VCLXToolkit_Impl, + public cppu::WeakComponentImplHelper2< + css::awt::XToolkitExperimental, + css::lang::XServiceInfo > +{ + css::uno::Reference< css::datatransfer::clipboard::XClipboard > mxClipboard; + css::uno::Reference< css::datatransfer::clipboard::XClipboard > mxSelection; + + oslModule hSvToolsLib; + FN_SvtCreateWindow fnSvtCreateWindow; + + ::cppu::OInterfaceContainerHelper m_aTopWindowListeners; + ::cppu::OInterfaceContainerHelper m_aKeyHandlers; + ::cppu::OInterfaceContainerHelper m_aFocusListeners; + ::Link m_aEventListenerLink; + ::Link m_aKeyListenerLink; + bool m_bEventListener; + bool m_bKeyListener; + + DECL_LINK(eventListenerHandler, ::VclSimpleEvent const *); + + DECL_LINK(keyListenerHandler, ::VclSimpleEvent const *); + + void callTopWindowListeners( + ::VclSimpleEvent const * pEvent, + void (SAL_CALL css::awt::XTopWindowListener::* pFn)( + css::lang::EventObject const &)); + + long callKeyHandlers(::VclSimpleEvent const * pEvent, bool bPressed); + + void callFocusListeners(::VclSimpleEvent const * pEvent, bool bGained); + +protected: + ::osl::Mutex& GetMutex() { return maMutex; } + + virtual void SAL_CALL disposing(); + + Window* ImplCreateWindow( VCLXWindow** ppNewComp, const css::awt::WindowDescriptor& rDescriptor, Window* pParent, WinBits nWinBits ); + css::uno::Reference< css::awt::XWindowPeer > ImplCreateWindow( const css::awt::WindowDescriptor& Descriptor, WinBits nWinBits ); + +public: + + VCLXToolkit(); + ~VCLXToolkit(); + + // css::awt::XToolkitExperimental + css::uno::Reference< css::awt::XDevice > SAL_CALL createScreenCompatibleDeviceUsingBuffer( sal_Int32 Width, sal_Int32 Height, sal_Int32 ScaleNumerator, sal_Int32 ScaleDenominator, sal_Int32 XOffset, sal_Int32 YOffset, sal_Int64 AddressOfMemoryBufferForSharedArrayWrapper ) throw +(css::uno::RuntimeException); + + // css::awt::XToolkit + css::uno::Reference< css::awt::XWindowPeer > SAL_CALL getDesktopWindow( ) throw(css::uno::RuntimeException); + css::awt::Rectangle SAL_CALL getWorkArea( ) throw(css::uno::RuntimeException); + css::uno::Reference< css::awt::XWindowPeer > SAL_CALL createWindow( const css::awt::WindowDescriptor& Descriptor ) throw(css::lang::IllegalArgumentException, css::uno::RuntimeException); + css::uno::Sequence< css::uno::Reference< css::awt::XWindowPeer > > SAL_CALL createWindows( const css::uno::Sequence< css::awt::WindowDescriptor >& Descriptors ) throw(css::lang::IllegalArgumentException, css::uno::RuntimeException); + css::uno::Reference< css::awt::XDevice > SAL_CALL createScreenCompatibleDevice( sal_Int32 Width, sal_Int32 Height ) throw +(css::uno::RuntimeException); + css::uno::Reference< css::awt::XRegion > SAL_CALL createRegion( ) throw(css::uno::RuntimeException); + + // css::awt::XSystemChildFactory + css::uno::Reference< css::awt::XWindowPeer > SAL_CALL createSystemChild( const css::uno::Any& Parent, const css::uno::Sequence< sal_Int8 >& ProcessId, sal_Int16 SystemType ) throw(css::uno::RuntimeException); + + // css::awt::XMessageBoxFactory + virtual css::uno::Reference< css::awt::XMessageBox > SAL_CALL createMessageBox( const css::uno::Reference< css::awt::XWindowPeer >& aParent, css::awt::MessageBoxType eType, ::sal_Int32 aButtons, const OUString& aTitle, const OUString& aMessage ) throw (css::uno::RuntimeException); + + // css::awt::XDataTransfer + css::uno::Reference< css::datatransfer::dnd::XDragGestureRecognizer > SAL_CALL getDragGestureRecognizer( const css::uno::Reference< css::awt::XWindow >& window ) throw(css::uno::RuntimeException); + css::uno::Reference< css::datatransfer::dnd::XDragSource > SAL_CALL getDragSource( const css::uno::Reference< css::awt::XWindow >& window ) throw(css::uno::RuntimeException); + css::uno::Reference< css::datatransfer::dnd::XDropTarget > SAL_CALL getDropTarget( const css::uno::Reference< css::awt::XWindow >& window ) throw(css::uno::RuntimeException); + css::uno::Reference< css::datatransfer::clipboard::XClipboard > SAL_CALL getClipboard( const OUString& clipboardName ) throw(css::uno::RuntimeException); + + // css::lang::XServiceInfo + OUString SAL_CALL getImplementationName( ) throw(css::uno::RuntimeException); + sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw(css::uno::RuntimeException); + css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) throw(css::uno::RuntimeException); + + // css::awt::XExtendedToolkit: + + virtual ::sal_Int32 SAL_CALL getTopWindowCount() + throw (css::uno::RuntimeException); + + virtual css::uno::Reference< css::awt::XTopWindow > + SAL_CALL getTopWindow(::sal_Int32 nIndex) + throw (css::uno::RuntimeException); + + virtual css::uno::Reference< css::awt::XTopWindow > + SAL_CALL getActiveTopWindow() + throw (css::uno::RuntimeException); + + virtual void SAL_CALL addTopWindowListener( + css::uno::Reference< + css::awt::XTopWindowListener > const & rListener) + throw (css::uno::RuntimeException); + + virtual void SAL_CALL removeTopWindowListener( + css::uno::Reference< + css::awt::XTopWindowListener > const & rListener) + throw (css::uno::RuntimeException); + + virtual void SAL_CALL addKeyHandler( + css::uno::Reference< + css::awt::XKeyHandler > const & rHandler) + throw (css::uno::RuntimeException); + + virtual void SAL_CALL removeKeyHandler( + css::uno::Reference< + css::awt::XKeyHandler > const & rHandler) + throw (css::uno::RuntimeException); + + virtual void SAL_CALL addFocusListener( + css::uno::Reference< + css::awt::XFocusListener > const & rListener) + throw (css::uno::RuntimeException); + + virtual void SAL_CALL removeFocusListener( + css::uno::Reference< + css::awt::XFocusListener > const & rListener) + throw (css::uno::RuntimeException); + + virtual void SAL_CALL fireFocusGained( + css::uno::Reference< + css::uno::XInterface > const & source) + throw (css::uno::RuntimeException); + + virtual void SAL_CALL fireFocusLost( + css::uno::Reference< + css::uno::XInterface > const & source) + throw (css::uno::RuntimeException); + + // css::awt::XReschedule: + virtual void SAL_CALL reschedule() + throw (css::uno::RuntimeException); +}; + +WinBits ImplGetWinBits( sal_uInt32 nComponentAttribs, sal_uInt16 nCompType ) { WinBits nWinBits = 0; @@ -407,10 +557,6 @@ namespace } } -// ---------------------------------------------------- -// class VCLXToolkit -// ---------------------------------------------------- - static sal_Int32 nVCLToolkitInstanceCount = 0; static bool bInitedByVCLToolkit = false; @@ -1387,7 +1533,7 @@ sal_Bool VCLXToolkit::supportsService( const OUString& rServiceName ) throw(::co ::com::sun::star::uno::Sequence< OUString > VCLXToolkit::getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException) { - OUString aServiceName( OUString::createFromAscii( szServiceName2_Toolkit ) ); + OUString aServiceName("com.sun.star.awt.Toolkit"); return ::com::sun::star::uno::Sequence< OUString >( &aServiceName, 1); } @@ -1743,4 +1889,14 @@ void SAL_CALL VCLXToolkit::reschedule() Application::Reschedule(true); } +} + +extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL +stardiv_Toolkit_VCLXToolkit_get_implementation( + css::uno::XComponentContext *, + css::uno::Sequence<css::uno::Any> const &) +{ + return cppu::acquire(new VCLXToolkit()); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/toolkit/source/helper/registerservices.cxx b/toolkit/source/helper/registerservices.cxx index 64525d9c364e..a4c1e857a43d 100644 --- a/toolkit/source/helper/registerservices.cxx +++ b/toolkit/source/helper/registerservices.cxx @@ -27,7 +27,6 @@ #include <osl/mutex.hxx> #include <toolkit/helper/servicenames.hxx> #include <toolkit/helper/macros.hxx> -#include <toolkit/awt/vclxtoolkit.hxx> #include <toolkit/awt/vclxmenu.hxx> #include <toolkit/awt/vclxpointer.hxx> #include <toolkit/awt/vclxprinter.hxx> @@ -100,7 +99,6 @@ namespace toolkit using namespace toolkit; -IMPL_CREATEINSTANCE( VCLXToolkit ) IMPL_CREATEINSTANCE( StdTabController ) IMPL_CREATEINSTANCE( StdTabControllerModel ) IMPL_CREATEINSTANCE( UnoControlContainer ) @@ -137,7 +135,6 @@ TOOLKIT_DLLPUBLIC void* SAL_CALL tk_component_getFactory( const sal_Char* sImple { ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xServiceFactory = static_cast< ::com::sun::star::lang::XMultiServiceFactory* >( _pServiceManager ); - GET_FACTORY( VCLXToolkit, szServiceName_Toolkit, szServiceName2_Toolkit ) GET_FACTORY( VCLXPopupMenu, szServiceName_PopupMenu, szServiceName2_PopupMenu ) GET_FACTORY( VCLXMenuBar, szServiceName_MenuBar, szServiceName2_MenuBar ) GET_FACTORY( VCLXPointer, szServiceName_Pointer, szServiceName2_Pointer ) diff --git a/toolkit/util/tk.component b/toolkit/util/tk.component index 5a0fbaaefbc3..cfaa1b733348 100644 --- a/toolkit/util/tk.component +++ b/toolkit/util/tk.component @@ -345,7 +345,8 @@ <service name="com.sun.star.awt.PrinterServer"/> <service name="stardiv.vcl.PrinterServer"/> </implementation> - <implementation name="stardiv.Toolkit.VCLXToolkit"> + <implementation name="stardiv.Toolkit.VCLXToolkit" + constructor="stardiv_Toolkit_VCLXToolkit_get_implementation"> <service name="com.sun.star.awt.Toolkit"/> <service name="stardiv.vcl.VclToolkit"/> </implementation> |