summaryrefslogtreecommitdiff
path: root/toolkit
diff options
context:
space:
mode:
authorMatúš Kukan <matus.kukan@collabora.com>2014-01-23 09:41:03 +0100
committerMatúš Kukan <matus.kukan@collabora.com>2014-01-24 12:21:21 +0100
commit3961bcb5f46331a1e6b4ce7f334ba6bbde11c899 (patch)
tree10cb82c30d5fecc8890f876885ee097e8f32ab81 /toolkit
parent52d4203a312e9aecac9bffdc2afe93471b88a9dc (diff)
tk: Constructor feature for VCLXToolkit.
Change-Id: I1575ea1b14342a5a64f13d39e409ed33151bcdf9
Diffstat (limited to 'toolkit')
-rw-r--r--toolkit/source/awt/vclxtoolkit.cxx182
-rw-r--r--toolkit/source/helper/registerservices.cxx3
-rw-r--r--toolkit/util/tk.component3
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>