Commits

Anonymous committed 01a8d15

CWS-TOOLING: integrate CWS kde4int
2009-07-15 10:40:52 +0200 pl r273993 : #i103288# configure
2009-07-09 14:57:24 +0200 pl r273867 : #i103284# spin fields
2009-07-09 13:49:13 +0200 pl r273864 : #i103284# min size for dropdown comboboxes
2009-07-09 13:46:11 +0200 pl r273860 : #i103284# min size fro dropdown listboxes
2009-07-09 13:01:48 +0200 pl r273857 : #i103284# fix most radiobuttons and checboxes, also on tabpages
2009-07-08 19:38:12 +0200 pl r273847 : #i103290# clean up, enable KDE4 fpicker
2009-07-08 15:54:06 +0200 pl r273837 : #i103284# background mode opaque doesn't look that good
2009-07-07 19:29:01 +0200 pl r273814 : add kde4 directory and deliverables
2009-07-07 11:18:08 +0200 pl r273786 : make compile with Qt 4.1
2009-07-02 19:20:47 +0200 pl r273673 : #i103290# add: KDE4 file picker (thanks Roman Shtylman)
2009-07-02 19:16:07 +0200 pl r273672 : #i103289# add: KDE4integration (thanks Roman Shtylman)
2009-07-02 19:01:20 +0200 pl r273671 : #i103286# add: KDE4 checks (thanks Roman Shtylman)
2009-07-02 18:58:15 +0200 pl r273670 : #i103286# initial import for KDE4 backend (thanks Roman Shtylman)
2009-07-02 18:08:06 +0200 pl r273668 : #i103284# initial import for KDE4 plugin (thanks Roman Shtylman)

Comments (0)

Files changed (58)

 AC_ARG_ENABLE(kdeab,
 [  --disable-kdeab         Disable the KDE address book support
 ],,if test "$enable_kde" = "yes"; then enable_kdeab=yes; fi)
+AC_ARG_ENABLE(kde4,
+[  --enable-kde4            Determines whether to use Qt4/KDE4 vclplug on platforms
+                          where Qt4 and KDE4 are available. May be used with --enable-kde 
+                          if you want to support both KDE3 and KDE4.
+],,)
 AC_ARG_ENABLE(binfilter,
 [  --disable-binfilter     Disable legacy binary file formats filters
 ],,if ! test -d ./binfilter; then enable_binfilter=no; fi)
 		test_gtk=yes
 		test_cairo=yes
 		test_kde=yes
+		test_kde4=yes
 		test_cups=yes
         test_randr=yes
 		test_freetype=yes
 		test_gtk=yes
 		test_cairo=yes
 		test_kde=yes
+		test_kde4=yes
 		test_cups=yes
         test_randr=yes
 		test_freetype=yes
 		test_gtk=yes
 		test_cairo=yes
 		test_kde=yes
+		test_kde4=yes
 		test_cups=no
         test_randr=yes
 		test_freetype=yes
 fi
 AC_SUBST(ENABLE_KDE)
 
+ENABLE_KDE4=""
+if test "x$enable_kde4" = "xyes"; then
+    ENABLE_KDE4="TRUE"
+    R="$R kde4"
+fi
+AC_SUBST(ENABLE_KDE4)
+
 if test -z "$R"; then
 	AC_MSG_RESULT([none])
 else
         fi
     fi
     if test "$build_cpu" != "x86_64" ; then
-        kde_incdirs="/usr/lib/kde/include /usr/local/kde/include /usr/local/include /usr/kde/include /usr/include/kde /usr/include /opt/kde3/include /opt/kde/include $x_includes"
-        kde_libdirs="/usr/lib/kde/lib /usr/local/kde/lib /usr/kde/lib /usr/lib/kde /usr/lib/kde3 /usr/lib /usr/X11R6/lib /usr/local/lib /opt/kde3/lib /opt/kde/lib /usr/X11R6/kde/lib $x_libraries"
+        kde_incdirs="/usr/lib/kde/include /usr/local/kde/include /usr/local/include /usr/kde/include /usr/include/kde /opt/kde3/include /opt/kde/include $x_includes"
+        kde_libdirs="/usr/lib/kde/lib /usr/local/kde/lib /usr/kde/lib /usr/lib/kde /usr/lib/kde3 /usr/X11R6/lib /usr/local/lib /opt/kde3/lib /opt/kde/lib /usr/X11R6/kde/lib /usr/lib $x_libraries"
     else
-        kde_incdirs="/usr/lib64/kde/include /usr/lib/kde/include /usr/local/kde/include /usr/local/include /usr/kde/include /usr/include/kde /usr/include /opt/kde3/include /opt/kde/include $x_includes"
-        kde_libdirs="/usr/lib64/kde/lib64 /usr/local/kde/lib64 /usr/kde/lib64 /usr/lib64/kde /usr/lib64/kde3 /usr/lib64 /usr/X11R6/lib64 /usr/local/lib64 /opt/kde3/lib64 /opt/kde/lib64 /usr/X11R6/kde/lib64 /usr/lib/kde/lib /usr/local/kde/lib /usr/kde/lib /usr/lib/kde /usr/lib/kde3 /usr/lib /usr/X11R6/lib /usr/local/lib /opt/kde3/lib /opt/kde/lib /usr/X11R6/kde/lib $x_libraries"
+        kde_incdirs="/usr/lib64/kde/include /usr/lib/kde/include /usr/local/kde/include /usr/local/include /usr/kde/include /usr/include/kde /opt/kde3/include /opt/kde/include $x_includes"
+        kde_libdirs="/usr/lib64/kde/lib64 /usr/local/kde/lib64 /usr/kde/lib64 /usr/lib64/kde /usr/lib64/kde3 /usr/X11R6/lib64 /usr/local/lib64 /opt/kde3/lib64 /opt/kde/lib64 /usr/X11R6/kde/lib64 /usr/lib/kde/lib /usr/local/kde/lib /usr/kde/lib /usr/lib/kde /usr/lib/kde3 /usr/lib /usr/X11R6/lib /usr/local/lib /opt/kde3/lib /opt/kde/lib /usr/X11R6/kde/lib /usr/lib64 $x_libraries"
     fi
     if test -n "$KDEDIR" ; then
         kde_incdirs="$KDEDIR/include $kde_incdirs"
 your Qt installation by exporting QTDIR before running "configure".])
     fi
 
+    dnl Check for Meta Object Compiler
     AC_PATH_PROG( MOC, moc, no, [$QTDIR/bin:$PATH] )
     if test "$MOC" = "no" ; then
         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
 the root of your Qt installation by exporting QTDIR before running "configure".])
-     fi
-     
+    fi
+
     dnl Check for KDE headers
     AC_MSG_CHECKING([for KDE headers])
     kde_incdir="no"
 AC_SUBST(MOC)
 
 dnl ===================================================================
+dnl KDE4 Integration
+dnl ===================================================================
+
+KDE4_CFLAGS=""
+KDE4_LIBS=""
+MOC4="moc"
+if test "$test_kde4" = "yes" -a "$ENABLE_KDE4" = "TRUE" ; then
+   qt_incdirs="$QTINC $QTDIR /usr/include/qt4 /usr/include $x_includes"
+   qt_libdirs="$QTLIB /usr/lib $x_libraries"
+   
+   kde_incdirs="/usr/include $x_includes"
+   kde_libdirs="/usr/lib $x_libraries"
+   
+   if test "$build_cpu" == "x86_64" ; then
+      qt_libdirs="$qt_libdirs /usr/lib64/qt4 /usr/lib64/qt /usr/lib64"
+      kde_libdirs="$kde_libdirs /usr/lib64 /usr/lib64/kde4"
+   fi
+
+   qt_test_include="Qt/qobject.h"
+   qt_test_library="libQtCore.so"
+   kde_test_include="ksharedptr.h"
+   kde_test_library="libkdeui.so"
+   
+   AC_MSG_CHECKING([for Qt4 headers])
+   qt_header_dir="no"
+   for inc_dir in $qt_incdirs ; do
+      if test -r "$inc_dir/$qt_test_include" ; then
+         qt_header_dir="$inc_dir"
+         break
+      fi
+   done
+   
+   AC_MSG_RESULT([$qt_header_dir])
+   if test "x$qt_header_dir" = "xno" ; then
+      AC_MSG_ERROR([Qt4 headers not found.  Please specify the root of your Qt4 installation by exporting QTDIR before running "configure".])
+   fi
+   
+   AC_MSG_CHECKING([for Qt4 libraries])
+   qt_lib_dir="no"
+   for lib_dir in $qt_libdirs ; do
+      if test -r "$lib_dir/$qt_test_library" ; then
+         qt_lib_dir="$lib_dir"
+         break
+      fi
+   done
+   
+   AC_MSG_RESULT([$qt_lib_dir])
+   
+   if test "x$qt_lib_dir" = "xno" ; then
+      AC_MSG_ERROR([Qt4 libraries not found.  Please specify the root of your Qt4 installation by exporting QTDIR before running "configure".])
+   fi
+
+   dnl Check for Meta Object Compiler
+   AC_PATH_PROG( MOC4, moc, no, [$PATH:$QTDIR/bin] )
+   if test "$MOC4" = "no" ; then
+      AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
+the root of your Qt installation by exporting QTDIR before running "configure".])
+   fi
+
+   dnl Check for KDE4 headers
+   AC_MSG_CHECKING([for KDE4 headers])
+   kde_incdir="no"
+   for kde_check in $kde_incdirs ; do
+      if test -r "$kde_check/$kde_test_include" ; then
+         kde_incdir="$kde_check"
+         break
+      fi
+   done
+   AC_MSG_RESULT([$kde_incdir])
+   if test "x$kde_incdir" = "xno" ; then
+      AC_MSG_ERROR([KDE4 headers not found.  Please specify the root of your KDE4 installation by exporting KDEDIR before running "configure".])
+   fi
+
+   dnl Check for KDE4 libraries
+   AC_MSG_CHECKING([for KDE4 libraries])
+   kde_libdir="no"
+   for kde_check in $kde_libdirs ; do
+      if test -r "$kde_check/$kde_test_library" ; then
+         kde_libdir="$kde_check"
+         break
+      fi
+   done
+   
+   AC_MSG_RESULT([$kde_libdir])
+   if test "x$kde_libdir" = "xno" ; then
+      AC_MSG_ERROR([KDE4 libraries not found.  Please specify the root of your KDE4 installation by exporting KDEDIR before running "configure".])
+   fi
+
+   KDE4_CFLAGS="`pkg-config --cflags QtCore` `pkg-config --cflags QtGui` -I$kde_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT"
+   KDE4_LIBS="-L$kde_libdir -L$qt_lib_dir -lkdeui -lkdecore -lQtCore -lQtGui"
+fi
+AC_SUBST(KDE4_CFLAGS)
+AC_SUBST(KDE4_LIBS)
+AC_SUBST(MOC4)
+
+dnl ===================================================================
 dnl Test for the enabling the lockdown pieces
 dnl ===================================================================
 AC_MSG_CHECKING([whether to enable the lockdown pieces])

fpicker/prj/build.lst

 fp	fpicker\source\generic				nmake	-	all	fp_generic fp_inc NULL
 fp	fpicker\source\office				nmake	-	all	fp_office fp_inc NULL
 fp	fpicker\source\unx\gnome			nmake	-	u	fp_gnome_filepicker fp_inc NULL
+fp	fpicker\source\unx\kde4			nmake	-	u	fp_kde4_filepicker fp_inc NULL
 fp	fpicker\source\aqua					nmake	-	u	fp_macosx_filepicker NULL
 fp	fpicker\source\win32\filepicker		nmake	-	w	fp_win32_filepicker fp_inc NULL
 fp	fpicker\source\win32\folderpicker	nmake	-	w	fp_win32_folderpicker fp_inc NULL
 ..\source\win32\filepicker\*.xml %_DEST%\xml%_EXT%\*.xml
 ..\source\win32\folderpicker\*.xml %_DEST%\xml%_EXT%\*.xml
 ..\source\unx\gnome\fps-gnome-ucd.txt %_DEST%\bin%_EXT%\fps-gnome-ucd.txt
+..\source\unx\kde4\fps-kde4-ucd.txt %_DEST%\bin%_EXT%\fps-kde4-ucd.txt
 ..\source\aqua\fps-aqua-ucd.txt %_DEST%\bin%_EXT%\fps-aqua-ucd.txt

fpicker/source/generic/fpicker.cxx

 		return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.GtkFilePicker"));
 	else if (aDesktopEnvironment.equalsIgnoreAsciiCaseAscii ("kde"))
 		return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.KDEFilePicker"));
+	else if (aDesktopEnvironment.equalsIgnoreAsciiCaseAscii ("kde4"))
+		return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.KDE4FilePicker"));
     else if (aDesktopEnvironment.equalsIgnoreAsciiCaseAscii ("macosx"))
         return OUString (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.ui.dialogs.AquaFilePicker"));
     else

fpicker/source/unx/kde4/FPServiceInfo.hxx

+/*************************************************************************
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *  The Contents of this file are made available subject to the terms of
+ *  either of the following licenses
+ *
+ *         - GNU Lesser General Public License Version 2.1
+ *         - Sun Industry Standards Source License Version 1.1
+ *
+ *  Sun Microsystems Inc., October, 2000
+ *
+ *  GNU Lesser General Public License Version 2.1
+ *  =============================================
+ *  Copyright 2000 by Sun Microsystems, Inc.
+ *  901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License version 2.1, as published by the Free Software Foundation.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ *  MA  02111-1307  USA
+ *
+ *
+ *  Sun Industry Standards Source License Version 1.1
+ *  =================================================
+ *  The contents of this file are subject to the Sun Industry Standards
+ *  Source License Version 1.1 (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.openoffice.org/license.html.
+ *
+ *  Software provided under this License is provided on an "AS IS" basis,
+ *  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ *  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ *  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ *  See the License for the specific provisions governing your rights and
+ *  obligations concerning the Software.
+ *
+ *  The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ *  Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ *  All Rights Reserved.
+ *
+ *  Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+
+#pragma once
+
+// the service names
+#define FILE_PICKER_SERVICE_NAME "com.sun.star.ui.dialogs.KDE4FilePicker"
+
+// the implementation names		
+#define FILE_PICKER_IMPL_NAME    "com.sun.star.ui.dialogs.KDE4FilePicker"
+
+// the registry key names
+// a key under which this service will be registered,
+// Format: -> "/ImplName/UNO/SERVICES/ServiceName"
+//  <Implementation-Name></UNO/SERVICES/><Service-Name> 
+#define FILE_PICKER_REGKEY_NAME  "/com.sun.star.ui.dialogs.KDE4FilePickerImpl/UNO/SERVICES/com.sun.star.ui.dialogs.KDE4FilePicker"

fpicker/source/unx/kde4/KDE4FPEntry.cxx

+/*************************************************************************
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *  The Contents of this file are made available subject to the terms of
+ *  either of the following licenses
+ *
+ *         - GNU Lesser General Public License Version 2.1
+ *         - Sun Industry Standards Source License Version 1.1
+ *
+ *  Sun Microsystems Inc., October, 2000
+ *
+ *  GNU Lesser General Public License Version 2.1
+ *  =============================================
+ *  Copyright 2000 by Sun Microsystems, Inc.
+ *  901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License version 2.1, as published by the Free Software Foundation.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ *  MA  02111-1307  USA
+ *
+ *
+ *  Sun Industry Standards Source License Version 1.1
+ *  =================================================
+ *  The contents of this file are subject to the Sun Industry Standards
+ *  Source License Version 1.1 (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.openoffice.org/license.html.
+ *
+ *  Software provided under this License is provided on an "AS IS" basis,
+ *  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ *  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ *  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ *  See the License for the specific provisions governing your rights and
+ *  obligations concerning the Software.
+ *
+ *  The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ *  Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ *  All Rights Reserved.
+ *
+ *  Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+
+#include <cppuhelper/factory.hxx>
+
+#include <com/sun/star/container/XSet.hpp>
+
+#include <osl/diagnose.h>
+
+#include "KDE4FilePicker.hxx"
+#include "FPServiceInfo.hxx"
+
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::container;
+using namespace ::com::sun::star::lang;
+using namespace ::com::sun::star::registry;
+using namespace ::cppu;
+using ::com::sun::star::ui::dialogs::XFilePicker;
+
+static Reference< XInterface > SAL_CALL createInstance( const Reference< XMultiServiceFactory >& serviceManager )
+{
+    return Reference< XInterface >(static_cast< XFilePicker* >( new KDE4FilePicker( serviceManager ) ) );
+}
+
+// the three uno functions that will be exported
+extern "C" 
+{
+	void SAL_CALL component_getImplementationEnvironment( const sal_Char ** ppEnvTypeName, uno_Environment ** ppEnv )
+	{
+		*ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
+	}
+
+	sal_Bool SAL_CALL component_writeInfo( void* pServiceManager, void* pRegistryKey )
+	{
+		sal_Bool bRetVal = sal_True;
+
+		if ( pRegistryKey )
+		{
+			try
+			{
+				Reference< XRegistryKey > pXNewKey( static_cast< XRegistryKey* >( pRegistryKey ) );				
+				pXNewKey->createKey( OUString::createFromAscii( FILE_PICKER_REGKEY_NAME ) );
+			}
+			catch( InvalidRegistryException& )
+			{			
+				OSL_ENSURE( sal_False, "InvalidRegistryException caught" );			
+				bRetVal = sal_False;
+			}
+		}
+
+		return bRetVal;
+	}
+
+	void* SAL_CALL component_getFactory( const sal_Char* pImplName, uno_Interface* pSrvManager, uno_Interface* pRegistryKey )
+	{
+		void* pRet = 0;
+
+		if ( pSrvManager && ( 0 == rtl_str_compare( pImplName, FILE_PICKER_IMPL_NAME ) ) )
+		{
+			Sequence< OUString > aSNS( 1 );
+			aSNS.getArray( )[0] = OUString::createFromAscii( FILE_PICKER_SERVICE_NAME );		
+
+			Reference< XSingleServiceFactory > xFactory ( createSingleFactory(
+						reinterpret_cast< XMultiServiceFactory* > ( pSrvManager ),
+						OUString::createFromAscii( pImplName ),
+						createInstance,
+						aSNS ) );
+			if ( xFactory.is() )
+			{
+				xFactory->acquire();
+				pRet = xFactory.get();
+			}			
+		}
+
+		return pRet;
+	}
+}

fpicker/source/unx/kde4/KDE4FilePicker.cxx

+/*************************************************************************
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *  The Contents of this file are made available subject to the terms of
+ *  either of the following licenses
+ *
+ *         - GNU Lesser General Public License Version 2.1
+ *         - Sun Industry Standards Source License Version 1.1
+ *
+ *  Sun Microsystems Inc., October, 2000
+ *
+ *  GNU Lesser General Public License Version 2.1
+ *  =============================================
+ *  Copyright 2000 by Sun Microsystems, Inc.
+ *  901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License version 2.1, as published by the Free Software Foundation.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ *  MA  02111-1307  USA
+ *
+ *
+ *  Sun Industry Standards Source License Version 1.1
+ *  =================================================
+ *  The contents of this file are subject to the Sun Industry Standards
+ *  Source License Version 1.1 (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.openoffice.org/license.html.
+ *
+ *  Software provided under this License is provided on an "AS IS" basis,
+ *  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ *  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ *  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ *  See the License for the specific provisions governing your rights and
+ *  obligations concerning the Software.
+ *
+ *  The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ *  Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ *  All Rights Reserved.
+ *
+ *  Contributor(s): Jan Holesovsky <kendy@openoffice.org>
+ *
+ *
+ ************************************************************************/
+
+//////////////////////////////////////////////////////////////////////////
+// includes
+//////////////////////////////////////////////////////////////////////////
+
+#include <com/sun/star/lang/DisposedException.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <cppuhelper/interfacecontainer.h>
+#include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
+#include <com/sun/star/ui/dialogs/CommonFilePickerElementIds.hpp>
+#include <com/sun/star/ui/dialogs/ExtendedFilePickerElementIds.hpp>
+#include <com/sun/star/ui/dialogs/ControlActions.hpp>
+#include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp>
+
+#include <svtools/svtools.hrc>
+
+#include <vos/mutex.hxx>
+
+#include <vcl/svapp.hxx>
+#include <vcl/sysdata.hxx>
+#include <vcl/syswin.hxx>
+
+#include "KDE4FilePicker.hxx"
+#include "FPServiceInfo.hxx"
+
+/* ********* Hack, but needed because of conflicting types... */
+#define Region QtXRegion
+
+//kde has an enum that uses this...OO does too
+#undef SETTINGS_MOUSE
+
+#include <kfiledialog.h>
+#include <kwindowsystem.h>
+#include <kapplication.h>
+#include <kfilefiltercombo.h>
+
+#include <QWidget>
+#include <QCheckBox>
+#include <QGridLayout>
+
+#undef Region
+
+using namespace ::com::sun::star;
+
+using namespace ::com::sun::star::ui::dialogs;
+using namespace ::com::sun::star::ui::dialogs::TemplateDescription;
+
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::ui::dialogs;
+using namespace ::com::sun::star::ui::dialogs::TemplateDescription;
+using namespace ::com::sun::star::ui::dialogs::ExtendedFilePickerElementIds;
+using namespace ::com::sun::star::ui::dialogs::CommonFilePickerElementIds;
+using namespace ::com::sun::star::lang;
+using namespace ::com::sun::star::beans;
+using namespace ::com::sun::star::uno;
+
+//////////////////////////////////////////////////////////////////////////
+// helper functions
+//////////////////////////////////////////////////////////////////////////
+
+namespace
+{
+    // controling event notifications    
+    const bool STARTUP_SUSPENDED = true;
+    const bool STARTUP_ALIVE     = false;
+
+    uno::Sequence<rtl::OUString> SAL_CALL FilePicker_getSupportedServiceNames()
+    {
+        uno::Sequence<rtl::OUString> aRet(3);
+        aRet[0] = rtl::OUString::createFromAscii("com.sun.star.ui.dialogs.FilePicker");
+        aRet[1] = rtl::OUString::createFromAscii("com.sun.star.ui.dialogs.SystemFilePicker");
+        aRet[2] = rtl::OUString::createFromAscii("com.sun.star.ui.dialogs.KDE4FilePicker");
+        return aRet;
+    }
+}
+
+rtl::OUString toOUString(const QString& s)
+{
+	return rtl::OUString(s.toUtf8().data(), s.length(), RTL_TEXTENCODING_UTF8);
+}
+
+QString toQString(const rtl::OUString& s)
+{
+	return QString::fromUtf16(s.getStr(), s.getLength());
+}
+
+//////////////////////////////////////////////////////////////////////////
+// KDE4FilePicker
+//////////////////////////////////////////////////////////////////////////
+
+KDE4FilePicker::KDE4FilePicker( const uno::Reference<lang::XMultiServiceFactory>& xServiceMgr )
+    : cppu::WeakComponentImplHelper8< 		
+          XFilterManager, 
+          XFilterGroupManager,
+          XFilePickerControlAccess,
+          XFilePickerNotifier,
+// TODO   XFilePreview,
+          lang::XInitialization,
+          util::XCancellable,
+          lang::XEventListener, 
+          lang::XServiceInfo>( _helperMutex ),
+          m_xServiceMgr( xServiceMgr ),
+		  _resMgr( CREATEVERSIONRESMGR( fps_office ) )
+{
+	_extraControls = new QWidget();
+	
+	_layout = new QGridLayout(_extraControls);
+	
+	_dialog = new KFileDialog(KUrl(""), QString(""), 0, _extraControls);
+	_dialog->setMode(KFile::File | KFile::LocalOnly);
+	
+	//default mode
+	_dialog->setOperationMode(KFileDialog::Opening);
+}
+
+KDE4FilePicker::~KDE4FilePicker()
+{
+	delete _resMgr;
+	delete _dialog;
+}
+
+void SAL_CALL KDE4FilePicker::addFilePickerListener( const uno::Reference<XFilePickerListener>& xListener )
+	throw( uno::RuntimeException )
+{
+    ::vos::OGuard aGuard( Application::GetSolarMutex() );
+    m_xListener = xListener;
+}
+
+void SAL_CALL KDE4FilePicker::removeFilePickerListener( const uno::Reference<XFilePickerListener>& )
+	throw( uno::RuntimeException )
+{
+    ::vos::OGuard aGuard( Application::GetSolarMutex() );
+    m_xListener.clear();
+}
+
+void SAL_CALL KDE4FilePicker::setTitle( const rtl::OUString &title )
+    throw( uno::RuntimeException )
+{
+	_dialog->setCaption(toQString(title));
+}
+
+sal_Int16 SAL_CALL KDE4FilePicker::execute()
+    throw( uno::RuntimeException )
+{
+	//get the window id of the main OO window to set it for the dialog as a parent
+	Window *pParentWin = Application::GetDefDialogParent();
+	if ( pParentWin )
+	{
+		const SystemEnvData* pSysData = ((SystemWindow *)pParentWin)->GetSystemData();
+		if ( pSysData )
+		{
+			KWindowSystem::setMainWindow( _dialog, pSysData->aWindow); // unx only
+		}
+	}
+	
+	_dialog->setFilter(_filter);
+	_dialog->exec();
+	
+	//nasty hack to get a local qt event loop going to process the dialog
+	//otherwise the dialog returns immediately
+	while (_dialog->isVisible())
+	{
+		kapp->processEvents(QEventLoop::WaitForMoreEvents);
+	}
+	
+	//block and wait for user input
+	if (_dialog->result() == KFileDialog::Accepted)
+	{
+		return ExecutableDialogResults::OK;
+	}
+	
+	return ExecutableDialogResults::CANCEL;
+}
+
+void SAL_CALL KDE4FilePicker::setMultiSelectionMode( sal_Bool multiSelect )
+    throw( uno::RuntimeException )
+{
+	if (multiSelect)
+	{
+		_dialog->setMode(KFile::Files | KFile::LocalOnly);
+	}
+	else
+	{
+		_dialog->setMode(KFile::File | KFile::LocalOnly);
+	}
+}
+
+void SAL_CALL KDE4FilePicker::setDefaultName( const ::rtl::OUString &name )
+    throw( uno::RuntimeException )
+{
+	const QString url = toQString(name);
+	_dialog->setSelection(url);
+}
+
+void SAL_CALL KDE4FilePicker::setDisplayDirectory( const rtl::OUString &dir )
+    throw( uno::RuntimeException )
+{
+	const QString url = toQString(dir);
+	_dialog->setStartDir(KUrl(url));
+}
+
+rtl::OUString SAL_CALL KDE4FilePicker::getDisplayDirectory()
+    throw( uno::RuntimeException )
+{
+	QString dir = _dialog->baseUrl().url();
+	return toOUString(dir);
+}
+
+uno::Sequence< ::rtl::OUString > SAL_CALL KDE4FilePicker::getFiles()
+    throw( uno::RuntimeException )
+{
+	QStringList files = _dialog->selectedFiles();
+	
+	uno::Sequence< ::rtl::OUString > seq(files.size());
+	
+	for (int i=0 ; i<files.size() ; ++i)
+	{
+		const QString fileName = "file:" + files[i];
+		seq[i] = toOUString(fileName);
+	}
+	
+	return seq;
+}
+
+void SAL_CALL KDE4FilePicker::appendFilter( const ::rtl::OUString &title, const ::rtl::OUString &filter )
+    throw( lang::IllegalArgumentException, uno::RuntimeException )
+{
+	QString t = toQString(title);
+	QString f = toQString(filter);
+	
+	if (!_filter.isNull())
+	{
+		_filter.append("\n");
+	}
+	
+	//add to hash map for reverse lookup in getCurrentFilter
+	_filters.insert(f, t);
+	
+	// '/' meed to be escaped to else they are assumed to be mime types by kfiledialog
+	//see the docs
+	t.replace("/", "\\/");
+	
+	_filter.append(QString("%1|%2").arg(f).arg(t));
+}
+
+void SAL_CALL KDE4FilePicker::setCurrentFilter( const rtl::OUString &title )
+    throw( lang::IllegalArgumentException, uno::RuntimeException )
+{
+	QString filter = toQString(title);
+	filter.replace("/", "\\/");
+	_dialog->filterWidget()->setCurrentFilter(filter);
+}
+
+rtl::OUString SAL_CALL KDE4FilePicker::getCurrentFilter()
+    throw( uno::RuntimeException )
+{
+	QString filter = _filters[_dialog->currentFilter()];
+	
+	//default if not found
+	if (filter.isNull())
+	{
+		filter = "ODF Text Document (.odt)";
+	}
+	
+	return toOUString(filter);
+}
+
+void SAL_CALL KDE4FilePicker::appendFilterGroup( const rtl::OUString&, const uno::Sequence<beans::StringPair>& )
+    throw( lang::IllegalArgumentException, uno::RuntimeException )
+{
+	//TODO
+}
+
+void SAL_CALL KDE4FilePicker::setValue( sal_Int16 controlId, sal_Int16, const uno::Any &value )
+    throw( uno::RuntimeException )
+{
+	QWidget* widget = _customWidgets[controlId];
+	
+	if (widget)
+	{
+		switch (controlId)
+		{
+			case ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION:
+			case ExtendedFilePickerElementIds::CHECKBOX_PASSWORD:
+			case ExtendedFilePickerElementIds::CHECKBOX_FILTEROPTIONS:
+			case ExtendedFilePickerElementIds::CHECKBOX_READONLY:
+			case ExtendedFilePickerElementIds::CHECKBOX_LINK:
+			case ExtendedFilePickerElementIds::CHECKBOX_PREVIEW:
+			case ExtendedFilePickerElementIds::CHECKBOX_SELECTION:
+			{
+				QCheckBox* cb = dynamic_cast<QCheckBox*>(widget);
+				cb->setChecked(value.getValue());
+				break;
+			}
+			case ExtendedFilePickerElementIds::PUSHBUTTON_PLAY:
+			case ExtendedFilePickerElementIds::LISTBOX_VERSION:
+			case ExtendedFilePickerElementIds::LISTBOX_TEMPLATE:
+			case ExtendedFilePickerElementIds::LISTBOX_IMAGE_TEMPLATE:
+			case ExtendedFilePickerElementIds::LISTBOX_VERSION_LABEL:
+			case ExtendedFilePickerElementIds::LISTBOX_TEMPLATE_LABEL:
+			case ExtendedFilePickerElementIds::LISTBOX_IMAGE_TEMPLATE_LABEL:
+			case ExtendedFilePickerElementIds::LISTBOX_FILTER_SELECTOR:
+				break;
+		}
+	}
+}
+
+uno::Any SAL_CALL KDE4FilePicker::getValue( sal_Int16 controlId, sal_Int16 )
+    throw( uno::RuntimeException )
+{
+	uno::Any res(false);
+	
+	QWidget* widget = _customWidgets[controlId];
+	
+	if (widget)
+	{
+		switch (controlId)
+		{
+			case ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION:
+			case ExtendedFilePickerElementIds::CHECKBOX_PASSWORD:
+			case ExtendedFilePickerElementIds::CHECKBOX_FILTEROPTIONS:
+			case ExtendedFilePickerElementIds::CHECKBOX_READONLY:
+			case ExtendedFilePickerElementIds::CHECKBOX_LINK:
+			case ExtendedFilePickerElementIds::CHECKBOX_PREVIEW:
+			case ExtendedFilePickerElementIds::CHECKBOX_SELECTION:
+			{
+				QCheckBox* cb = dynamic_cast<QCheckBox*>(widget);
+				res = uno::Any(cb->isChecked());
+				break;
+			}
+			case ExtendedFilePickerElementIds::PUSHBUTTON_PLAY:
+			case ExtendedFilePickerElementIds::LISTBOX_VERSION:
+			case ExtendedFilePickerElementIds::LISTBOX_TEMPLATE:
+			case ExtendedFilePickerElementIds::LISTBOX_IMAGE_TEMPLATE:
+			case ExtendedFilePickerElementIds::LISTBOX_VERSION_LABEL:
+			case ExtendedFilePickerElementIds::LISTBOX_TEMPLATE_LABEL:
+			case ExtendedFilePickerElementIds::LISTBOX_IMAGE_TEMPLATE_LABEL:
+			case ExtendedFilePickerElementIds::LISTBOX_FILTER_SELECTOR:
+				break;
+		}
+	}
+	
+	return res;
+}
+
+void SAL_CALL KDE4FilePicker::enableControl( sal_Int16 controlId, sal_Bool enable )
+    throw( uno::RuntimeException )
+{
+	QWidget* widget = _customWidgets[controlId];
+	
+	if (widget)
+	{
+		widget->setEnabled(enable);
+	}
+}
+
+void SAL_CALL KDE4FilePicker::setLabel( sal_Int16 controlId, const ::rtl::OUString &label )
+    throw( uno::RuntimeException )
+{
+	QWidget* widget = _customWidgets[controlId];
+	
+	if (widget)
+	{
+		switch (controlId)
+		{
+			case ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION:
+			case ExtendedFilePickerElementIds::CHECKBOX_PASSWORD:
+			case ExtendedFilePickerElementIds::CHECKBOX_FILTEROPTIONS:
+			case ExtendedFilePickerElementIds::CHECKBOX_READONLY:
+			case ExtendedFilePickerElementIds::CHECKBOX_LINK:
+			case ExtendedFilePickerElementIds::CHECKBOX_PREVIEW:
+			case ExtendedFilePickerElementIds::CHECKBOX_SELECTION:
+			{
+				QCheckBox* cb = dynamic_cast<QCheckBox*>(widget);
+				cb->setText(toQString(label));
+				break;
+			}
+			case ExtendedFilePickerElementIds::PUSHBUTTON_PLAY:
+			case ExtendedFilePickerElementIds::LISTBOX_VERSION:
+			case ExtendedFilePickerElementIds::LISTBOX_TEMPLATE:
+			case ExtendedFilePickerElementIds::LISTBOX_IMAGE_TEMPLATE:
+			case ExtendedFilePickerElementIds::LISTBOX_VERSION_LABEL:
+			case ExtendedFilePickerElementIds::LISTBOX_TEMPLATE_LABEL:
+			case ExtendedFilePickerElementIds::LISTBOX_IMAGE_TEMPLATE_LABEL:
+			case ExtendedFilePickerElementIds::LISTBOX_FILTER_SELECTOR:
+				break;
+		}
+	}
+}
+
+rtl::OUString SAL_CALL KDE4FilePicker::getLabel(sal_Int16 controlId) 
+    throw ( uno::RuntimeException )
+{
+	QWidget* widget = _customWidgets[controlId];
+	QString label;
+	
+	if (widget)
+	{
+		switch (controlId)
+		{
+			case ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION:
+			case ExtendedFilePickerElementIds::CHECKBOX_PASSWORD:
+			case ExtendedFilePickerElementIds::CHECKBOX_FILTEROPTIONS:
+			case ExtendedFilePickerElementIds::CHECKBOX_READONLY:
+			case ExtendedFilePickerElementIds::CHECKBOX_LINK:
+			case ExtendedFilePickerElementIds::CHECKBOX_PREVIEW:
+			case ExtendedFilePickerElementIds::CHECKBOX_SELECTION:
+			{
+				QCheckBox* cb = dynamic_cast<QCheckBox*>(widget);
+				label = cb->text();
+				break;
+			}
+			case ExtendedFilePickerElementIds::PUSHBUTTON_PLAY:
+			case ExtendedFilePickerElementIds::LISTBOX_VERSION:
+			case ExtendedFilePickerElementIds::LISTBOX_TEMPLATE:
+			case ExtendedFilePickerElementIds::LISTBOX_IMAGE_TEMPLATE:
+			case ExtendedFilePickerElementIds::LISTBOX_VERSION_LABEL:
+			case ExtendedFilePickerElementIds::LISTBOX_TEMPLATE_LABEL:
+			case ExtendedFilePickerElementIds::LISTBOX_IMAGE_TEMPLATE_LABEL:
+			case ExtendedFilePickerElementIds::LISTBOX_FILTER_SELECTOR:
+				break;
+		}
+	}
+	return toOUString(label);
+}
+
+void KDE4FilePicker::addCustomControl(sal_Int16 controlId)
+{
+	QWidget* widget = 0;
+	sal_Int32 resId = -1;
+	
+	switch (controlId)
+	{
+		case ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION:
+			resId = STR_SVT_FILEPICKER_AUTO_EXTENSION;
+			break;
+		case ExtendedFilePickerElementIds::CHECKBOX_PASSWORD:
+			resId = STR_SVT_FILEPICKER_PASSWORD;
+			break;
+		case ExtendedFilePickerElementIds::CHECKBOX_FILTEROPTIONS:
+			resId = STR_SVT_FILEPICKER_FILTER_OPTIONS;
+			break;
+		case ExtendedFilePickerElementIds::CHECKBOX_READONLY:
+			resId = STR_SVT_FILEPICKER_READONLY;
+			break;
+		case ExtendedFilePickerElementIds::CHECKBOX_LINK:
+			resId = STR_SVT_FILEPICKER_INSERT_AS_LINK;
+			break;
+		case ExtendedFilePickerElementIds::CHECKBOX_PREVIEW:
+			resId = STR_SVT_FILEPICKER_SHOW_PREVIEW;
+			break;
+		case ExtendedFilePickerElementIds::CHECKBOX_SELECTION:
+			resId = STR_SVT_FILEPICKER_SELECTION;
+			break;
+		case ExtendedFilePickerElementIds::PUSHBUTTON_PLAY:
+			resId = STR_SVT_FILEPICKER_PLAY;
+			break;
+		case ExtendedFilePickerElementIds::LISTBOX_VERSION:
+			resId = STR_SVT_FILEPICKER_VERSION;
+			break;
+		case ExtendedFilePickerElementIds::LISTBOX_TEMPLATE:
+			resId = STR_SVT_FILEPICKER_TEMPLATES;
+			break;
+		case ExtendedFilePickerElementIds::LISTBOX_IMAGE_TEMPLATE:
+			resId = STR_SVT_FILEPICKER_IMAGE_TEMPLATE;
+			break;
+		case ExtendedFilePickerElementIds::LISTBOX_VERSION_LABEL:
+		case ExtendedFilePickerElementIds::LISTBOX_TEMPLATE_LABEL:
+		case ExtendedFilePickerElementIds::LISTBOX_IMAGE_TEMPLATE_LABEL:
+		case ExtendedFilePickerElementIds::LISTBOX_FILTER_SELECTOR:
+			break;
+	}
+	
+	switch (controlId)
+	{
+		case ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION:
+		case ExtendedFilePickerElementIds::CHECKBOX_PASSWORD:
+		case ExtendedFilePickerElementIds::CHECKBOX_FILTEROPTIONS:
+		case ExtendedFilePickerElementIds::CHECKBOX_READONLY:
+		case ExtendedFilePickerElementIds::CHECKBOX_LINK:
+		case ExtendedFilePickerElementIds::CHECKBOX_PREVIEW:
+		case ExtendedFilePickerElementIds::CHECKBOX_SELECTION:
+		{
+			QString label;
+			
+			if (_resMgr && resId != -1)
+			{
+				rtl::OUString s = String(ResId( resId, *_resMgr ));
+				label = toQString(s);
+				label.replace("~", "&");
+			}
+			
+			widget = new QCheckBox(label, _extraControls);
+			
+			break;
+		}
+		case ExtendedFilePickerElementIds::PUSHBUTTON_PLAY:
+		case ExtendedFilePickerElementIds::LISTBOX_VERSION:
+		case ExtendedFilePickerElementIds::LISTBOX_TEMPLATE:
+		case ExtendedFilePickerElementIds::LISTBOX_IMAGE_TEMPLATE:
+		case ExtendedFilePickerElementIds::LISTBOX_VERSION_LABEL:
+		case ExtendedFilePickerElementIds::LISTBOX_TEMPLATE_LABEL:
+		case ExtendedFilePickerElementIds::LISTBOX_IMAGE_TEMPLATE_LABEL:
+		case ExtendedFilePickerElementIds::LISTBOX_FILTER_SELECTOR:
+			break;
+	}
+	
+	if (widget)
+	{
+		_layout->addWidget(widget);
+		_customWidgets.insert(controlId, widget);
+	}
+}
+
+void SAL_CALL KDE4FilePicker::initialize( const uno::Sequence<uno::Any> &args ) 
+    throw( uno::Exception, uno::RuntimeException )
+{	
+	_filter.clear();
+	_filters.clear();
+	
+    // parameter checking	    
+    uno::Any arg;
+    if (args.getLength() == 0)
+	{
+        throw lang::IllegalArgumentException(
+                rtl::OUString::createFromAscii( "no arguments" ),
+                static_cast< XFilePicker* >( this ), 1 );
+	}
+
+    arg = args[0];
+
+    if (( arg.getValueType() != ::getCppuType((sal_Int16*)0)) && 
+		( arg.getValueType() != ::getCppuType((sal_Int8*)0)))
+	{
+        throw lang::IllegalArgumentException(
+                rtl::OUString::createFromAscii( "invalid argument type" ),
+                static_cast< XFilePicker* >( this ), 1 );
+	}
+
+    sal_Int16 templateId = -1;
+    arg >>= templateId;
+	
+	//default is opening
+	KFileDialog::OperationMode operationMode = KFileDialog::Opening;
+	
+    switch ( templateId )
+    {
+        case FILEOPEN_SIMPLE:
+            break;
+			
+        case FILESAVE_SIMPLE:
+            operationMode = KFileDialog::Saving;
+            break;
+			
+        case FILESAVE_AUTOEXTENSION:
+            operationMode = KFileDialog::Saving;
+			addCustomControl( ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION );
+            break;
+
+        case FILESAVE_AUTOEXTENSION_PASSWORD:
+		{
+            operationMode = KFileDialog::Saving;
+			addCustomControl( ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION );
+            addCustomControl( ExtendedFilePickerElementIds::CHECKBOX_PASSWORD );
+            break;
+		}
+        case FILESAVE_AUTOEXTENSION_PASSWORD_FILTEROPTIONS:
+		{
+			operationMode = KFileDialog::Saving;
+			addCustomControl( ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION );
+            addCustomControl( ExtendedFilePickerElementIds::CHECKBOX_PASSWORD );
+            addCustomControl( ExtendedFilePickerElementIds::CHECKBOX_FILTEROPTIONS );
+            break;
+		}
+        case FILESAVE_AUTOEXTENSION_SELECTION:
+            operationMode = KFileDialog::Saving;
+            addCustomControl( ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION );
+            addCustomControl( ExtendedFilePickerElementIds::CHECKBOX_SELECTION );
+            break;
+
+        case FILESAVE_AUTOEXTENSION_TEMPLATE:
+            operationMode = KFileDialog::Saving;
+            addCustomControl( ExtendedFilePickerElementIds::LISTBOX_TEMPLATE );
+            break;
+
+        case FILEOPEN_LINK_PREVIEW_IMAGE_TEMPLATE:
+            addCustomControl( ExtendedFilePickerElementIds::CHECKBOX_LINK );
+            addCustomControl( ExtendedFilePickerElementIds::CHECKBOX_PREVIEW );
+            addCustomControl( ExtendedFilePickerElementIds::LISTBOX_IMAGE_TEMPLATE );
+            break;
+
+        case FILEOPEN_PLAY:        
+            addCustomControl( ExtendedFilePickerElementIds::PUSHBUTTON_PLAY );
+            break;
+
+        case FILEOPEN_READONLY_VERSION:
+            addCustomControl( ExtendedFilePickerElementIds::CHECKBOX_READONLY );
+            addCustomControl( ExtendedFilePickerElementIds::LISTBOX_VERSION );
+            break;
+
+        case FILEOPEN_LINK_PREVIEW:
+            addCustomControl( ExtendedFilePickerElementIds::CHECKBOX_LINK );
+            addCustomControl( ExtendedFilePickerElementIds::CHECKBOX_PREVIEW );
+            break;
+
+        default:
+            throw lang::IllegalArgumentException(
+                    rtl::OUString::createFromAscii( "Unknown template" ),
+                    static_cast< XFilePicker* >( this ),
+                    1 );
+    }
+	
+	_dialog->setOperationMode(operationMode);
+}
+
+void SAL_CALL KDE4FilePicker::cancel()
+    throw ( uno::RuntimeException )
+{
+	
+}
+
+void SAL_CALL KDE4FilePicker::disposing( const lang::EventObject &rEvent )
+    throw( uno::RuntimeException )
+{
+    uno::Reference<XFilePickerListener> xFilePickerListener( rEvent.Source, uno::UNO_QUERY );
+
+    if ( xFilePickerListener.is() )
+	{
+        removeFilePickerListener( xFilePickerListener );
+	}
+}
+
+rtl::OUString SAL_CALL KDE4FilePicker::getImplementationName() 
+    throw( uno::RuntimeException )
+{
+    return rtl::OUString::createFromAscii( FILE_PICKER_IMPL_NAME );
+}
+
+sal_Bool SAL_CALL KDE4FilePicker::supportsService( const rtl::OUString& ServiceName ) 
+    throw( uno::RuntimeException )
+{
+    uno::Sequence< ::rtl::OUString > SupportedServicesNames = FilePicker_getSupportedServiceNames();
+
+    for ( sal_Int32 n = SupportedServicesNames.getLength(); n--; )
+    {
+        if ( SupportedServicesNames[n].compareTo( ServiceName ) == 0 )
+            return sal_True;
+    }
+
+    return sal_False;
+}
+
+uno::Sequence< ::rtl::OUString > SAL_CALL KDE4FilePicker::getSupportedServiceNames() 
+    throw( uno::RuntimeException )
+{
+    return FilePicker_getSupportedServiceNames();
+}

fpicker/source/unx/kde4/KDE4FilePicker.hxx

+/*************************************************************************
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *  The Contents of this file are made available subject to the terms of
+ *  either of the following licenses
+ *
+ *         - GNU Lesser General Public License Version 2.1
+ *         - Sun Industry Standards Source License Version 1.1
+ *
+ *  Sun Microsystems Inc., October, 2000
+ *
+ *  GNU Lesser General Public License Version 2.1
+ *  =============================================
+ *  Copyright 2000 by Sun Microsystems, Inc.
+ *  901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License version 2.1, as published by the Free Software Foundation.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ *  MA  02111-1307  USA
+ *
+ *
+ *  Sun Industry Standards Source License Version 1.1
+ *  =================================================
+ *  The contents of this file are subject to the Sun Industry Standards
+ *  Source License Version 1.1 (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.openoffice.org/license.html.
+ *
+ *  Software provided under this License is provided on an "AS IS" basis,
+ *  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ *  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ *  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ *  See the License for the specific provisions governing your rights and
+ *  obligations concerning the Software.
+ *
+ *  The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ *  Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ *  All Rights Reserved.
+ *
+ *  Contributor(s): Jan Holesovsky <kendy@openoffice.org>
+ *
+ *
+ ************************************************************************/
+
+#pragma once
+
+#include <cppuhelper/compbase8.hxx>
+
+#include <com/sun/star/lang/XInitialization.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/ui/dialogs/XFilePickerNotifier.hpp>
+#include <com/sun/star/ui/dialogs/XFilterManager.hpp>
+#include <com/sun/star/ui/dialogs/XFilterGroupManager.hpp>
+#include <com/sun/star/ui/dialogs/XFilePickerControlAccess.hpp>
+//#include <com/sun/star/ui/dialogs/XFilePreview.hpp>
+#include <com/sun/star/util/XCancellable.hpp>
+
+#include <osl/conditn.hxx>
+#include <osl/mutex.hxx>
+
+#include <rtl/ustrbuf.hxx>
+
+#include <QString>
+#include <QHash>
+
+class KFileDialog;
+class QWidget;
+class QLayout;
+
+class ResMgr;
+
+class KDE4FilePicker : 
+    public cppu::WeakComponentImplHelper8<
+        ::com::sun::star::ui::dialogs::XFilterManager,
+        ::com::sun::star::ui::dialogs::XFilterGroupManager,
+        ::com::sun::star::ui::dialogs::XFilePickerControlAccess,
+        ::com::sun::star::ui::dialogs::XFilePickerNotifier,
+// TODO ::com::sun::star::ui::dialogs::XFilePreview,
+        ::com::sun::star::lang::XInitialization,
+        ::com::sun::star::util::XCancellable,
+        ::com::sun::star::lang::XEventListener,
+        ::com::sun::star::lang::XServiceInfo >		
+{
+protected:
+    ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > m_xServiceMgr;   // to instanciate own services		
+
+	::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XFilePickerListener > m_xListener;
+	
+    ResMgr *_resMgr;
+	
+	//the dialog to display
+	KFileDialog* _dialog;
+	
+	osl::Mutex _helperMutex;
+	
+	//running filter string to add to dialog
+	QString _filter;
+	
+	//filter for reverse lookup of filter text
+	QHash<QString, QString> _filters;
+	
+	//mapping of SAL control ID's to created custom controls
+	QHash<sal_Int16, QWidget*> _customWidgets;
+	
+	//widget to contain extra custom controls
+	QWidget* _extraControls;
+	
+	//layout for extra custom controls
+	QLayout* _layout;
+
+public:
+    KDE4FilePicker( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceMgr );
+    virtual ~KDE4FilePicker();
+
+    // XFilePickerNotifier
+
+    virtual void SAL_CALL addFilePickerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XFilePickerListener >& xListener ) throw( ::com::sun::star::uno::RuntimeException );
+    virtual void SAL_CALL removeFilePickerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XFilePickerListener >& xListener ) throw( ::com::sun::star::uno::RuntimeException );
+
+    // XExecutableDialog functions
+
+    virtual void SAL_CALL setTitle( const ::rtl::OUString &rTitle ) throw( ::com::sun::star::uno::RuntimeException );
+    virtual sal_Int16 SAL_CALL execute() throw( ::com::sun::star::uno::RuntimeException );
+
+    // XFilePicker functions
+
+    virtual void SAL_CALL setMultiSelectionMode( sal_Bool bMode ) throw( ::com::sun::star::uno::RuntimeException );
+    virtual void SAL_CALL setDefaultName( const ::rtl::OUString &rName ) throw( ::com::sun::star::uno::RuntimeException );
+    virtual void SAL_CALL setDisplayDirectory( const ::rtl::OUString &rDirectory ) throw( ::com::sun::star::uno::RuntimeException );
+    virtual ::rtl::OUString SAL_CALL getDisplayDirectory() throw( ::com::sun::star::uno::RuntimeException );
+    virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getFiles() throw( ::com::sun::star::uno::RuntimeException );
+
+    // XFilterManager functions
+
+    virtual void SAL_CALL appendFilter( const ::rtl::OUString &rTitle, const ::rtl::OUString &rFilter ) throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException );
+    virtual void SAL_CALL setCurrentFilter( const ::rtl::OUString &rTitle ) throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException );
+    virtual ::rtl::OUString SAL_CALL getCurrentFilter() throw( ::com::sun::star::uno::RuntimeException );
+
+    // XFilterGroupManager functions
+
+    virtual void SAL_CALL appendFilterGroup( const ::rtl::OUString &rGroupTitle, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::StringPair > &rFilters ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
+
+    // XFilePickerControlAccess functions
+
+    virtual void SAL_CALL setValue( sal_Int16 nControlId, sal_Int16 nControlAction, const ::com::sun::star::uno::Any &rValue ) throw (::com::sun::star::uno::RuntimeException);
+    virtual ::com::sun::star::uno::Any SAL_CALL getValue( sal_Int16 nControlId, sal_Int16 nControlAction ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL enableControl( sal_Int16 nControlId, sal_Bool bEnable ) throw( ::com::sun::star::uno::RuntimeException );
+    virtual void SAL_CALL setLabel( sal_Int16 nControlId, const ::rtl::OUString &rLabel ) throw (::com::sun::star::uno::RuntimeException);
+    virtual ::rtl::OUString SAL_CALL getLabel( sal_Int16 nControlId ) throw (::com::sun::star::uno::RuntimeException);
+
+    /* TODO XFilePreview
+
+    virtual ::com::sun::star::uno::Sequence< sal_Int16 > SAL_CALL getSupportedImageFormats(  ) throw (::com::sun::star::uno::RuntimeException);
+    virtual sal_Int32 SAL_CALL  getTargetColorDepth(  ) throw (::com::sun::star::uno::RuntimeException);
+    virtual sal_Int32 SAL_CALL  getAvailableWidth(  ) throw (::com::sun::star::uno::RuntimeException);
+    virtual sal_Int32 SAL_CALL  getAvailableHeight(  ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL       setImage( sal_Int16 aImageFormat, const ::com::sun::star::uno::Any &rImage ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
+    virtual sal_Bool SAL_CALL   setShowState( sal_Bool bShowState ) throw (::com::sun::star::uno::RuntimeException);
+    virtual sal_Bool SAL_CALL   getShowState(  ) throw (::com::sun::star::uno::RuntimeException);
+    */
+
+    // XInitialization
+
+    virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > &rArguments ) throw( ::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException );
+
+    // XCancellable
+
+    virtual void SAL_CALL cancel( ) throw( ::com::sun::star::uno::RuntimeException );
+
+    // XEventListener
+
+    virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject &rEvent ) throw( ::com::sun::star::uno::RuntimeException );
+
+    // XServiceInfo
+
+    virtual ::rtl::OUString SAL_CALL getImplementationName() throw( ::com::sun::star::uno::RuntimeException );
+    virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString &rServiceName ) throw( ::com::sun::star::uno::RuntimeException );
+    virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw( ::com::sun::star::uno::RuntimeException );
+
+private:
+    // prevent copy and assignment
+    KDE4FilePicker( const KDE4FilePicker& );           
+    KDE4FilePicker& operator=( const KDE4FilePicker& );
+	
+	//add a custom control widget to the file dialog
+	void addCustomControl(sal_Int16 controlId);
+	
+}; 

fpicker/source/unx/kde4/fps-kde4-ucd.txt

+[ComponentDescriptor]
+ImplementationName=com.sun.star.ui.dialogs.KDE4FilePicker
+ComponentName=fps_kde4.uno.so
+LoaderName=com.sun.star.loader.SharedLibrary
+[SupportedServices]
+com.sun.star.ui.dialogs.KDE4FilePicker

fpicker/source/unx/kde4/fps_kde4.xml

+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE module-description PUBLIC "-//StarOffice//DTD ComponentDescription 1.0//EN" "module-description.dtd">
+<module-description xmlns:xlink="http://www.w3.org/1999/xlink">
+    <module-name>fps_kde4</module-name>
+    <component-description>
+        <author> Jan Holesovsky </author>
+        <name>    com.sun.star.comp.ui.dialogs.FilePicker </name>
+        <description>
+            The KDE implementation of the FilePicker service.
+        </description>
+        <loader-name>com.sun.star.loader.SharedLibrary</loader-name>
+        <language>    c++    </language>
+        <status value="beta"/>
+        <supported-service>    com.sun.star.ui.dialogs.FilePicker </supported-service>        
+        <service-dependency>...</service-dependency>
+        <type>    com.sun.star.ui.dialogs.XExecutableDialog            </type>
+        <type>    com.sun.star.ui.dialogs.XFilePicker                  </type>
+        <type>    com.sun.star.ui.dialogs.XFilterManager               </type>
+        <type>    com.sun.star.ui.dialogs.XFilterGroupManager          </type>
+        <type>    com.sun.star.ui.dialogs.XFilePickerListener          </type>
+        <type>    com.sun.star.ui.dialogs.ExecutableDialogException    </type>
+        <type>    com.sun.star.ui.dialogs.XFilePickerNotifier          </type>
+        <type>    com.sun.star.ui.dialogs.XFilePickerControlAccess     </type>
+        <type>    com.sun.star.ui.dialogs.XFilePreview                 </type>
+        <type>    com.sun.star.ui.dialogs.ExtendedFilePickerElementIds </type>
+        <type>    com.sun.star.ui.dialogs.ExecutableDialogResults      </type>        
+        <type>    com.sun.star.ui.dialogs.FilePickerEvent              </type>
+        <type>    com.sun.star.ui.dialogs.CommonFilePickerElementIds   </type>
+        <type>    com.sun.star.ui.dialogs.ListboxControlActions        </type>
+        <type>    com.sun.star.ui.dialogs.TemplateDescription          </type>        
+        <type>    com.sun.star.ui.dialogs.FilePreviewImageFormats      </type>    
+        <type>    com.sun.star.util.XCancellable                       </type>
+        <type>    com.sun.star.lang.XComponent                         </type>
+        <type>    com.sun.star.lang.XMultiServiceFactory               </type>
+        <type>    com.sun.star.lang.XSingleServiceFactory              </type>
+        <type>    com.sun.star.lang.XServiceInfo                       </type>
+        <type>    com.sun.star.lang.XTypeProvider                      </type>
+        <type>    com.sun.star.lang.IllegalArgumentException           </type>
+        <type>    com.sun.star.uno.TypeClass                           </type>
+        <type>    com.sun.star.uno.XWeak                               </type>
+        <type>    com.sun.star.uno.XAggregation                        </type>
+        <type>    com.sun.star.registry.XRegistryKey                   </type>
+        <type>    com.sun.star.container.XSet                          </type>
+    </component-description>
+    <project-build-dependency>     cppuhelper  </project-build-dependency>
+    <project-build-dependency>     cppu        </project-build-dependency>
+    <project-build-dependency>     sal         </project-build-dependency>
+    <runtime-module-dependency>    cppuhelper  </runtime-module-dependency>
+    <runtime-module-dependency>    cppu2       </runtime-module-dependency>
+    <runtime-module-dependency>    sal2        </runtime-module-dependency>
+</module-description>

fpicker/source/unx/kde4/makefile.mk

+#*************************************************************************
+#
+#
+#
+#
+#
+#
+#
+#   The Contents of this file are made available subject to the terms of
+#   either of the following licenses
+#
+#          - GNU Lesser General Public License Version 2.1
+#          - Sun Industry Standards Source License Version 1.1
+#
+#   Sun Microsystems Inc., October, 2000
+#
+#   GNU Lesser General Public License Version 2.1
+#   =============================================
+#   Copyright 2000 by Sun Microsystems, Inc.
+#   901 San Antonio Road, Palo Alto, CA 94303, USA
+#
+#   This library is free software; you can redistribute it and/or
+#   modify it under the terms of the GNU Lesser General Public
+#   License version 2.1, as published by the Free Software Foundation.
+#
+#   This library is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+#   Lesser General Public License for more details.
+#
+#   You should have received a copy of the GNU Lesser General Public
+#   License along with this library; if not, write to the Free Software
+#   Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+#   MA  02111-1307  USA
+#
+#
+#   Sun Industry Standards Source License Version 1.1
+#   =================================================
+#   The contents of this file are subject to the Sun Industry Standards
+#   Source License Version 1.1 (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.openoffice.org/license.html.
+#
+#   Software provided under this License is provided on an "AS IS" basis,
+#   WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+#   WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+#   MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+#   See the License for the specific provisions governing your rights and
+#   obligations concerning the Software.
+#
+#   The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+#
+#   Copyright: 2000 by Sun Microsystems, Inc.
+#
+#   All Rights Reserved.
+#
+#   Contributor(s): _______________________________________
+#
+#
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME=fpicker
+TARGET=fps_kde4.uno
+LIBTARGET=NO
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE :  settings.mk
+DLLPRE=
+
+# ------------------------------------------------------------------
+
+# Currently just KDE is supported...
+.IF "$(GUIBASE)" != "unx" || "$(ENABLE_KDE4)" != "TRUE"
+
+dummy:
+	@echo "Nothing to build. GUIBASE == $(GUIBASE), ENABLE_KDE4 is not set"
+
+.ELSE # we build for KDE
+
+CFLAGS+= $(KDE4_CFLAGS)
+
+# --- Files --------------------------------------------------------
+
+SLOFILES =\
+		$(SLO)$/KDE4FilePicker.obj		\
+		$(SLO)$/KDE4FilePicker.moc.obj \
+		$(SLO)$/KDE4FPEntry.obj
+
+SHL1NOCHECK=TRUE
+SHL1TARGET=$(TARGET)
+SHL1STDLIBS=$(CPPULIB)\
+		$(CPPUHELPERLIB)\
+		$(SALLIB)\
+		$(VCLLIB)\
+		$(TOOLSLIB) \
+		$(KDE4_LIBS) -lkio -lkfile
+
+
+SHL1OBJS=$(SLOFILES)
+SHL1DEF=$(MISC)$/$(SHL1TARGET).def
+
+DEF1NAME=$(SHL1TARGET)
+DEF1VERSIONMAP=exports.map
+
+.ENDIF
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE :	target.mk
+
+$(MISC)$/KDE4FilePicker.moc.cxx : KDE4FilePicker.hxx
+	$(MOC4) $< -o $@

scp2/source/kde/file_kde.scp

  ************************************************************************/
 #include "macros.inc"
 
+#ifdef ENABLE_KDE
 File gid_File_Lib_Kdebe
     TXT_FILE_BODY;
     Styles = (PACKED);
     RegistryID = gid_Starregistry_Services_Rdb;
     Regmergefile = "kdebe1-ucd.txt";
 End
+#endif
 
+#ifdef ENABLE_KDE4
+File gid_File_Lib_Kde4be
+    TXT_FILE_BODY;
+    Styles = (PACKED);
+    Dir = gid_Dir_Program;
+    Name = STRING(CONCAT2(kde4be1.uno,UNXSUFFIX));
+    RegistryID = gid_Starregistry_Services_Rdb;
+    Regmergefile = "kde4be1-ucd.txt";
+End
+#endif

scp2/source/kde/makefile.mk

 
 SCP_PRODUCT_TYPE=osl
 
-.IF "$(ENABLE_KDE)" == "TRUE"
+.IF "$(ENABLE_KDE)" == "TRUE" || "$(ENABLE_KDE4)" == "TRUE"
+
+.IF "$(ENABLE_KDE)" != ""
+SCPDEFS+=-DENABLE_KDE
+.ENDIF
+
+.IF "$(ENABLE_KDE4)" != ""
+SCPDEFS+=-DENABLE_KDE4
+.ENDIF
+
 PARFILES =                   \
         module_kde.par     \
         file_kde.par

scp2/source/kde/module_kde.scp

 
 #include "macros.inc"
 
+#if defined( ENABLE_KDE ) || defined( ENABLE_KDE4 )
 Module gid_Module_Optional_Kde
     ParentID = gid_Module_Optional;
     Default = YES;
     PackageInfo = "packinfo_office.txt";
     MOD_NAME_DESC(MODULE_OPTIONAL_KDE);
     Styles = (DONTSHOWINUSERINSTALL);
-    Files = (gid_File_Lib_Kdebe);
+    Files = (
+#ifdef ENABLE_KDE
+    gid_File_Lib_Kdebe
+#ifdef ENABLE_KDE4
+    ,
+#endif // ENABLE_KDE4
+#endif // ENABLE_KDE
+#ifdef ENABLE_KDE4
+    gid_File_Lib_Kde4be
+#endif // ENABLE_KDE4
+    );
 End
+#endif
 

scp2/source/ooo/file_library_ooo.scp

 End
 #endif
 #endif
+#ifdef ENABLE_KDE4
+#ifndef MACOSX
+File gid_File_Lib_Fps_Kde4
+    TXT_FILE_BODY;
+    Styles = (PACKED,UNO_COMPONENT);
+    RegistryID = gid_Starregistry_Services_Rdb;
+    Dir = gid_Dir_Program;
+    Name = SPECIAL_COMPONENT_LIB_NAME(fps_kde4.uno);
+    Regmergefile = "fps-kde4-ucd.txt";
+End
+#endif
+#endif
 #endif
 
 #ifdef MACOSX
 End
 #endif
 #endif
+#ifdef ENABLE_KDE4
+#ifndef MACOSX
+File gid_File_Lib_Vclplug_Kde4
+    Name = LIBNAME(vclplug_kde4);
+    TXT_FILE_BODY;
+    Styles = (PACKED);
+    Dir = gid_Dir_Program;
+End
+#endif
+#endif
 #endif
 
 #if defined(QUARTZ)

scp2/source/ooo/makefile.mk

 SCPDEFS+=-DENABLE_KDE
 .ENDIF
 
+.IF "$(ENABLE_KDE4)" != ""
+SCPDEFS+=-DENABLE_KDE4
+.ENDIF
+
 .IF "$(ENABLE_KAB)" != ""
 SCPDEFS+=-DENABLE_KAB
 .ENDIF

scp2/source/ooo/module_hidden_ooo.scp

 	gid_File_Lib_Vclplug_Gen,
 	gid_File_Lib_Vclplug_Gtk,
 	gid_File_Lib_Vclplug_Kde,
+	gid_File_Lib_Vclplug_Kde4,
 	gid_File_Lib_Vclplug_Svp,
 	gid_File_Lib_Basctl,
 	gid_File_Lib_CanvasTools,
 ToFile( "ENABLE_KDE",        "@ENABLE_KDE@",       "e" );
 ToFile( "KDE_CFLAGS",        "@KDE_CFLAGS@",       "e" );
 ToFile( "KDE_LIBS",          "@KDE_LIBS@",         "e" );
+ToFile( "MOC",               "@MOC@",              "e" );
+ToFile( "ENABLE_KDE4",       "@ENABLE_KDE4@",      "e" );
+ToFile( "KDE4_CFLAGS",       "@KDE4_CFLAGS@",      "e" );
+ToFile( "KDE4_LIBS",         "@KDE4_LIBS@",        "e" );
+ToFile( "MOC4",              "@MOC4@",             "e" );
 ToFile( "ENABLE_KAB",        "@ENABLE_KAB@",       "e" );
-ToFile( "MOC",               "@MOC@",              "e" );
 ToFile( "PSPRINT",           "TRUE",             "e" );
 ToFile( "MKDEPENDSOLVER",    "TRUE",             "e" );
 #
 sl    shell\source\backends\macbe                  nmake   -   u   sl_backends_macbe sl_inc NULL
 sl    shell\source\backends\gconfbe                nmake   -   u   sl_backends_gconfbe sl_inc NULL
 sl    shell\source\backends\kdebe                  nmake   -   u   sl_backends_kdebe sl_inc NULL
+sl    shell\source\backends\kde4be                 nmake   -   u   sl_backends_kde4be sl_inc NULL
 sl    shell\source\backends\desktopbe              nmake   -   u   sl_backends_desktopbe sl_inc NULL
 sl    shell\source\win32\shlxthandler\ooofilt      nmake   -   w   sl_win32_shlxthandler_ooofilt sl_all_zipfile.w sl_all_ooofilereader.w sl_win32_shlxthandler_util.w sl_all sl_inc NULL
 sl    shell\source\win32\shlxthandler\ooofilt\proxy nmake   -   w   sl_win32_ooofiltproxy sl_inc NULL 

shell/source/backends/kde4be/exports.map

+UDK_3_0_0 {
+	global:
+		GetVersionInfo;
+		component_getImplementationEnvironment;
+		component_getFactory;
+		component_writeInfo;
+
+	local:
+		*;
+};

shell/source/backends/kde4be/kde4backend.cxx

+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ * 
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: kde4backend.cxx,v $
+ * $Revision: 1.7 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org.  If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_shell.hxx"
+
+#include "kde4backend.hxx"
+#include "kde4commonlayer.hxx"
+#include "kde4inetlayer.hxx"
+#include "kde4vcllayer.hxx"
+#include "kde4pathslayer.hxx"
+
+//------------------------------------------------------------------------------
+
+KDEBackend* KDEBackend::mInstance= 0;
+
+KDEBackend* KDEBackend::createInstance(const uno::Reference<uno::XComponentContext>& xContext)
+{
+    if (mInstance == 0)
+    {
+        mInstance = new KDEBackend (xContext);
+    }
+    
+    return mInstance;
+}
+
+//------------------------------------------------------------------------------
+
+KDEBackend::KDEBackend(const uno::Reference<uno::XComponentContext>& xContext)
+        throw (backend::BackendAccessException)
+    : BackendBase(mMutex), m_xContext(xContext)
+{
+}
+
+//------------------------------------------------------------------------------
+
+KDEBackend::~KDEBackend(void)
+{
+}
+
+//------------------------------------------------------------------------------
+
+uno::Reference<backend::XLayer> SAL_CALL KDEBackend::getLayer(
+    const rtl::OUString& aComponent, const rtl::OUString& /* aTimestamp */)
+    throw (backend::BackendAccessException, lang::IllegalArgumentException)
+{
+    uno::Reference<backend::XLayer> xLayer;
+    
+    if( aComponent.equalsAscii("org.openoffice.Office.Common" ) )
+    {
+        xLayer = new KDECommonLayer(m_xContext);
+    }
+    else if( aComponent.equalsAscii("org.openoffice.Inet" ) )
+    {
+        xLayer = new KDEInetLayer(m_xContext);
+    }
+    else if( aComponent.equalsAscii("org.openoffice.VCL" ) )
+    {
+        xLayer = new KDEVCLLayer(m_xContext);
+    }
+    else if( aComponent.equalsAscii("org.openoffice.Office.Paths" ) )
+    {
+        xLayer = new KDEPathsLayer(m_xContext);
+    }
+    
+    return xLayer;
+}
+
+//------------------------------------------------------------------------------
+
+uno::Reference<backend::XUpdatableLayer> SAL_CALL
+KDEBackend::getUpdatableLayer(const rtl::OUString& /* aComponent */) 
+    throw (backend::BackendAccessException,lang::NoSupportException,	   
+		   lang::IllegalArgumentException)
+{
+    throw lang::NoSupportException( rtl::OUString(
+        RTL_CONSTASCII_USTRINGPARAM("KDEBackend: No Update Operation allowed, Read Only access") ),
+        *this) ; 
+}
+
+//------------------------------------------------------------------------------
+
+rtl::OUString SAL_CALL KDEBackend::getBackendName(void)
+{
+    return rtl::OUString( 
+        RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.configuration.backend.KDE4Backend") );
+}
+
+//------------------------------------------------------------------------------
+
+rtl::OUString SAL_CALL KDEBackend::getImplementationName(void) 
+    throw (uno::RuntimeException) 
+{
+    return getBackendName() ;
+}
+
+//------------------------------------------------------------------------------
+
+uno::Sequence<rtl::OUString> SAL_CALL KDEBackend::getBackendServiceNames(void) 
+{
+    uno::Sequence<rtl::OUString> aServices(1) ;
+    aServices[0] = rtl::OUString( 
+        RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.backend.KDE4Backend")) ;
+
+    return aServices ;
+}
+
+//------------------------------------------------------------------------------
+
+sal_Bool SAL_CALL KDEBackend::supportsService(const rtl::OUString& aServiceName) 
+    throw (uno::RuntimeException) 
+{
+    uno::Sequence< rtl::OUString > const svc = getBackendServiceNames();
+
+    for(sal_Int32 i = 0; i < svc.getLength(); ++i )
+        if(svc[i] == aServiceName)
+            return true;
+
+    return false;
+}
+
+//------------------------------------------------------------------------------
+
+uno::Sequence<rtl::OUString> 
+SAL_CALL KDEBackend::getSupportedServiceNames(void) 
+    throw (uno::RuntimeException) 
+{
+    return getBackendServiceNames() ;
+}
+
+// ---------------------------------------------------------------------------------------

shell/source/backends/kde4be/kde4backend.hxx

+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ * 
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: kde4backend.hxx,v $
+ * $Revision: 1.4 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org.  If not, see
+ * <http://www.openoffice.org/license.html>