--- /dev/null	2004-04-06 15:27:52.000000000 +0200
+++ fpicker/source/unx/kde/kdecommandthread.cxx	2004-06-21 17:38:20.886719904 +0200
@@ -0,0 +1,208 @@
+/*************************************************************************
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *  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>
+ *
+ *
+ ************************************************************************/
+
+#include <kdecommandthread.hxx>
+
+#include <qstringlist.h>
+
+#include <kapplication.h>
+
+#include <iostream>
+
+//////////////////////////////////////////////////////////////////////////
+// CommandEvent
+//////////////////////////////////////////////////////////////////////////
+
+CommandEvent::CommandEvent( const QString &qCommand, QStringList *pStringList )
+    : QCustomEvent( TypeId, pStringList ),
+      m_eCommand( Unknown )
+{
+    struct {
+        const char *pName;
+        CommandEventType eType;
+    } *pIdx, pMapping[] =
+    {
+        { "appendControl",     AppendControl },
+        { "enableControl",     EnableControl },
+        { "getValue",          GetValue },
+        { "setValue",          SetValue },
+        { "appendFilter",      AppendFilter },
+        { "appendFilterGroup", AppendFilterGroup },
+        { "getCurrentFilter",  GetCurrentFilter },
+        { "setCurrentFilter",  SetCurrentFilter },
+        { "getDirectory",      GetDirectory },
+        { "setDirectory",      SetDirectory },
+        { "getFiles",          GetFiles },
+        { "setTitle",          SetTitle },
+        { "setType",           SetType },
+        { "setDefaultName",    SetDefaultName },
+        { "setMultiSelection", SetMultiSelection },
+        { "exec",              Exec },
+        { 0, Unknown }
+    };
+
+    for ( pIdx = pMapping; pIdx->pName && qCommand != pIdx->pName; ++pIdx )
+        ;
+
+    m_eCommand = pIdx->eType;
+}
+
+//////////////////////////////////////////////////////////////////////////
+// CommandThread
+//////////////////////////////////////////////////////////////////////////
+
+CommandThread::CommandThread( QWidget *pObject )
+    : m_pObject( pObject )
+{
+}
+
+CommandThread::~CommandThread()
+{
+}
+
+void CommandThread::run()
+{
+    QTextIStream qStream( stdin );
+    qStream.setEncoding( QTextStream::UnicodeUTF8 );
+
+    QString qLine;
+    bool bQuit = false;
+    while ( !bQuit && !qStream.atEnd() )
+    {
+        qLine = qStream.readLine();
+        handleCommand( qLine, bQuit );
+    }
+}
+
+void CommandThread::handleCommand( const QString &rString, bool &bQuit )
+{
+    QMutexLocker qMutexLocker( &m_aMutex );
+
+#if OSL_DEBUG_LEVEL > 0
+    ::std::cerr << "kdefilepicker received: " << rString.latin1() << ::std::endl;
+#endif
+
+    bQuit = false;
+    QStringList *pTokens = tokenize( rString );
+
+    if ( !pTokens )
+        return;
+    if ( pTokens->empty() )
+    {
+        delete pTokens, pTokens = NULL;
+        return;
+    }
+
+    QString qCommand = pTokens->front();
+    pTokens->pop_front();
+
+    if ( qCommand == "exit" )
+    {
+        bQuit = true;
+        kapp->exit();
+        kapp->wakeUpGuiThread();
+    }
+    else
+        kapp->postEvent( m_pObject, new CommandEvent( qCommand, pTokens ) );
+}
+
+QStringList* CommandThread::tokenize( const QString &rString )
+{
+    // Commands look like:
+    // command arg1 arg2 arg3 ...
+    // Args may be enclosed in '"', if they contain spaces.
+
+    QStringList *pList = new QStringList();
+
+    QString qBuffer;
+    qBuffer.reserve( 1024 );
+
+    const QChar *pUnicode = rString.unicode();
+    const QChar *pEnd     = pUnicode + rString.length();
+    bool bQuoted          = false;
+    
+    for ( ; pUnicode != pEnd; ++pUnicode )
+    {
+        if ( *pUnicode == '\\' )
+        {
+            ++pUnicode;
+            if ( pUnicode != pEnd )
+            {
+                if ( *pUnicode == 'n' )
+                    qBuffer.append( '\n' );
+                else
+                    qBuffer.append( *pUnicode );
+            }
+        }
+        else if ( *pUnicode == '"' )
+            bQuoted = !bQuoted;
+        else if ( *pUnicode == ' ' && !bQuoted )
+        {
+            pList->push_back( qBuffer );
+            qBuffer.setLength( 0 );
+        }
+        else
+            qBuffer.append( *pUnicode );
+    }
+    pList->push_back( qBuffer );
+    
+    return pList;
+}
--- /dev/null	2004-04-06 15:27:52.000000000 +0200
+++ fpicker/source/unx/kde/kdecommandthread.hxx	2004-06-14 14:37:20.597310272 +0200
@@ -0,0 +1,128 @@
+/*************************************************************************
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *  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>
+ *
+ *
+ ************************************************************************/
+
+#ifndef _KDECOMMANDTHREAD_HXX_
+#define _KDECOMMANDTHREAD_HXX_
+
+#include <qevent.h>
+#include <qmutex.h>
+#include <qthread.h>
+
+class CommandEvent : public QCustomEvent
+{
+public:
+    enum CommandEventType {
+        Unknown = 0,
+        
+        AppendControl,
+        EnableControl,
+        GetValue,
+        SetValue,
+
+        AppendFilter,
+        AppendFilterGroup,
+        UpdateFilters,
+        GetCurrentFilter,
+        SetCurrentFilter,
+
+        GetDirectory,
+        SetDirectory,
+        
+        GetFiles,
+
+        SetTitle,
+        SetType,
+        SetDefaultName,
+        SetMultiSelection,
+
+        Exec
+    };
+    static const QEvent::Type   TypeId = (QEvent::Type) ( (int) QEvent::User + 42 /*random magic value*/ );
+    
+protected:
+    CommandEventType            m_eCommand;
+
+public:
+    CommandEvent( const QString &qCommand, QStringList *pStringList );
+
+    CommandEventType            command() const { return m_eCommand; }
+    QStringList*                stringList() { return static_cast< QStringList* >( data() ); }
+};
+
+class CommandThread : public QThread
+{
+protected:
+    QObject                    *m_pObject;
+
+    QMutex                      m_aMutex;
+
+public:
+    CommandThread( QWidget *pObject );
+    virtual ~CommandThread();
+
+    virtual void                run();
+
+protected:
+    void                        handleCommand( const QString &rString, bool &bQuit );
+    QStringList*                tokenize( const QString &rString );
+};
+
+#endif // _KDECOMMANDTHREAD_HXX_
--- /dev/null	2004-04-06 15:27:52.000000000 +0200
+++ fpicker/source/unx/kde/kdefilepicker.cxx	2004-09-08 17:01:55.270345192 +0200
@@ -0,0 +1,630 @@
+/*************************************************************************
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *  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>
+ *
+ *
+ ************************************************************************/
+
+#include <kdecommandthread.hxx>
+#include <kdefilepicker.hxx>
+
+#include <qcheckbox.h>
+#include <qcombobox.h>
+#include <qgrid.h>
+#include <qhbox.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qobjectlist.h>
+#include <qpushbutton.h>
+#include <qvbox.h>
+
+#ifdef QT_NO_EMIT
+#define emit
+#endif
+
+#include <kdiroperator.h>
+#include <kfiledialog.h>
+#include <kfilefiltercombo.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+
+#include <algorithm>
+#include <iostream>
+
+//////////////////////////////////////////////////////////////////////////
+// FileDialog
+//////////////////////////////////////////////////////////////////////////
+
+FileDialog::FileDialog( const QString &startDir, const QString &filter,
+        QWidget *parent, const char *name )
+    : KFileDialog( startDir, filter, parent, name, true, m_pCustomWidget = new QVBox() ),
+      m_pCombosAndButtons( new QHBox( m_pCustomWidget ) ),
+      m_pLabels( new QVBox( m_pCombosAndButtons ) ),
+      m_pComboBoxes( new QVBox( m_pCombosAndButtons ) ),
+      m_pPushButtons( new QVBox( m_pCombosAndButtons ) ),
+      m_pCheckBoxes( new QGrid( 2, m_pCustomWidget ) ),
+      m_bIsSave( false ),
+      m_bCanNotifySelection( true )
+{
+    connect( this, SIGNAL( fileHighlighted( const QString & ) ),
+             this, SLOT( fileHighlightedCommand( const QString & ) ) );
+
+    connect( this, SIGNAL( selectionChanged() ),
+             this, SLOT( selectionChangedCommand() ) );
+
+    m_pCustomWidget->setSpacing( KDialog::spacingHint() );
+    m_pCombosAndButtons->setSpacing( KDialog::spacingHint() );
+
+    updateCustomWidgetLayout();
+}
+
+FileDialog::~FileDialog()
+{
+}
+
+void FileDialog::resizeEvent( QResizeEvent *pEvent )
+{
+    KFileDialog::resizeEvent( pEvent );
+
+    updateCustomWidgetLayout();
+}
+
+void FileDialog::showEvent( QShowEvent *pEvent )
+{
+    KFileDialog::showEvent( pEvent );
+
+    updateCustomWidgetLayout();
+}
+
+void FileDialog::updateCustomWidgetLayout()
+{
+    QPoint qReferencePoint = filterWidget->mapTo( this, QPoint( 0, 0 ) );
+    QPoint qCustomPoint = m_pCustomWidget->mapTo( this, QPoint( 0, 0 ) );
+
+    int nLeft = qReferencePoint.x() - qCustomPoint.x();
+    int nRight = m_pCustomWidget->width() - filterWidget->width() - nLeft;
+    
+    nLeft -= KDialog::spacingHint();
+    nRight -= KDialog::spacingHint();
+    m_pLabels->setFixedWidth( ( nLeft > 0 )? nLeft: 80 );
+    // FIXME The following call sets the width of m_pPushButtons all right,
+    // but it also increases the width of m_pComboBoxes rapidly. Can we do
+    // anything about it?
+    m_pPushButtons->setFixedWidth( ( nRight > 0 )? nRight: 100 );
+}
+
+void FileDialog::customEvent( QCustomEvent *pEvent )
+{
+    if ( pEvent && pEvent->type() == CommandEvent::TypeId )
+    {
+        CommandEvent *pCommandEvent = static_cast< CommandEvent* >( pEvent );
+        QStringList *pStringList = pCommandEvent->stringList();
+
+        int nListSize = -1;
+        if ( pStringList )
+            nListSize = pStringList->size();
+
+        switch ( pCommandEvent->command() )
+        {
+            case CommandEvent::AppendControl:
+                if ( nListSize >= 3 )
+                {
+                    appendControl( (*pStringList)[0], (*pStringList)[1], (*pStringList)[2] );
+                }
+                break;
+            case CommandEvent::EnableControl:
+                if ( nListSize >= 2 )
+                {
+                    enableControl( (*pStringList)[0], (*pStringList)[1] );
+                }
+                break;
+            case CommandEvent::GetValue:
+                if ( nListSize >= 2 )
+                {
+                    getValue( (*pStringList)[0], (*pStringList)[1] );
+                }
+                break;
+            case CommandEvent::SetValue:
+                if ( nListSize >= 2 )
+                {
+                    QStringList qStringList = (*pStringList);
+                    qStringList.pop_front();
+                    qStringList.pop_front();
+
+                    setValue( (*pStringList)[0], (*pStringList)[1], qStringList );
+                }
+                break;
+            case CommandEvent::AppendFilter:
+                if ( nListSize >= 2 )
+                {
+                    appendFilter( (*pStringList)[0], (*pStringList)[1] );
+
+                    // update the filters widget
+                    setFilter( filters() );
+                }
+                break;
+            case CommandEvent::AppendFilterGroup:
+                if ( nListSize >= 1 )
+                {
+                    QStringList::const_iterator it = pStringList->begin();
+                    ++it; // We ignore the filter group name
+
+                    while ( it != pStringList->end() )
+                    {
+                        QString qTitle = *it;
+                        ++it;
+                        if ( it != pStringList->end() )
+                        {
+                            appendFilter( qTitle, (*it) );
+                            ++it;
+                        }
+                    }
+
+                    // update the filters widget
+                    setFilter( filters() );
+                }
+                break;
+            case CommandEvent::GetCurrentFilter:
+                {
+                    QString qCurrentFilter = filterWidget->currentText();
+                    sendCommand( "currentFilter " + escapeString( qCurrentFilter ) );
+                }
+                break;
+            case CommandEvent::SetCurrentFilter:
+                if ( nListSize >= 1 )
+                {
+                    static_cast< FileFilterComboHack* >( filterWidget )->setCurrentFilter( pStringList->front() );
+                }
+                break;
+            case CommandEvent::GetDirectory:
+                {
+                    QString qDirectory = baseURL().url();
+                    if ( qDirectory.startsWith( "file:/" ) && qDirectory.mid( 6, 1 ) != "/" )
+                        qDirectory.replace( "file:/", "file:///" );
+                    sendCommand( "currentDirectory " + escapeString( qDirectory ) );
+                }
+                break;
+            case CommandEvent::SetDirectory:
+                if ( nListSize >= 1 )
+                {
+                    setURL( pStringList->front() );
+                }
+                break;
+            case CommandEvent::GetFiles:
+                {
+                    QString qString;
+                    qString.reserve( 1024 );
+
+                    qString.append( "files" );
+
+                    if ( result() == QDialog::Accepted )
+                    {
+                        KURL::List qList( selectedURLs() );
+                        for ( KURL::List::const_iterator it = qList.begin(); it != qList.end(); ++it )
+                        {
+                            qString.append( " " );
+                            QString qUrlStr = (*it).url();
+                            if ( qUrlStr.startsWith( "file:/" ) && qUrlStr.mid( 6, 1 ) != "/" )
+                                qUrlStr.replace( "file:/", "file:///" );
+                            appendEscaped( qString, addExtension( qUrlStr ) );
+                        }
+                    }
+                    else
+                    {
+                        // we have to return the selected files anyway
+                        const KFileItemList *pItems = ops->selectedItems();
+                        for ( KFileItemListIterator it( *pItems ); it.current(); ++it )
+                        {
+                            qString.append( " " );
+                            QString qUrlStr = (*it)->url().url();
+                            if ( qUrlStr.startsWith( "file:/" ) && qUrlStr.mid( 6, 1 ) != "/" )
+                                qUrlStr.replace( "file:/", "file:///" );
+                            appendEscaped( qString, addExtension( qUrlStr ) );
+                        }
+                    }
+
+                    sendCommand( qString );
+                    setCanNotifySelection( true );
+                }
+                break;
+            case CommandEvent::SetTitle:
+                if ( nListSize >= 1 )
+                {
+                    setCaption( pStringList->front() );
+                }
+                break;
+            case CommandEvent::SetType:
+                if ( nListSize >= 1 )
+                {
+                    QString qType( pStringList->front() );
+                    if ( qType == "open" )
+                    {
+                        setIsSave( false );
+                        setCaption( i18n( "Open" ) );
+                    }
+                    else if ( qType == "save" )
+                    {
+                        setIsSave( true );
+                        setCaption( i18n( "Save As" ) );
+                    }
+                }
+                break;
+            case CommandEvent::SetDefaultName:
+                if ( nListSize >= 1 )
+                {
+                    setKeepLocation( true );
+                    setSelection( pStringList->front() );
+                }
+                break;
+            case CommandEvent::SetMultiSelection:
+                if ( nListSize >= 1 )
+                {
+                    if ( pStringList->front() == "true" )
+                        setMode( KFile::Files );
+                    else
+                        setMode( KFile::File );
+                }   
+                break;
+            case CommandEvent::Exec:
+                {
+                    filterWidget->setEditable( false );
+                    QString qSelectedURL;
+                    do {
+                        setCanNotifySelection( true );
+                        exec();
+                        qSelectedURL = addExtension( selectedURL().url() );
+                    } while ( isSave() &&
+                              result() == QDialog::Accepted &&
+                              ( qSelectedURL.startsWith( "file:" ) && QFile::exists( qSelectedURL.mid( 5 ) ) ) &&
+                              KMessageBox::warningYesNo( 0,
+                                  i18n( "A file named \"%1\" already exists. "
+                                      "Are you sure you want to overwrite it?" ).arg( qSelectedURL ),
+                                  i18n( "Overwrite File?" ),
+                                  i18n( "Overwrite" ), KStdGuiItem::cancel() ) != KMessageBox::Yes );
+
+                    if ( result() == QDialog::Accepted )
+                        sendCommand( "accept" );
+                    else
+                        sendCommand( "reject" );
+                }
+                break;
+            default:
+                break;
+        }
+
+        // FIXME Some cleanup of pEvent? delete something, etc.?
+    }
+}
+
+void FileDialog::appendControl( const QString &rId, const QString &rType, const QString &rTitle )
+{
+    QString qLabel( rTitle );
+    qLabel.replace( '~', '&' );
+
+    if ( rType == "checkbox" )
+    {
+        QCheckBox *pCheckBox = new QCheckBox( qLabel, m_pCheckBoxes, rId.utf8() );
+
+        pCheckBox->setEnabled( true );
+        pCheckBox->setChecked( false );
+    }
+    else if ( rType == "listbox" )
+    {
+        QLabel *pComboLabel = new QLabel( qLabel, m_pLabels );
+        QComboBox *pComboBox = new QComboBox( m_pComboBoxes, rId.utf8() );
+
+        pComboLabel->setBuddy( pComboBox );
+        pComboBox->setEnabled( true );
+    }
+    else if ( rType == "pushbutton" )
+    {
+        QPushButton *pPushButton = new QPushButton( qLabel, m_pPushButtons, rId.utf8() );
+        pPushButton->setEnabled( true );
+    }
+}
+
+QWidget* FileDialog::findControl( const QString &rId ) const
+{
+    QObjectList *pList = m_pCustomWidget->queryList();
+    QCString qName( rId.utf8() );
+    QObjectList::const_iterator it = pList->begin();
+    
+    for ( ; it != pList->end() && qName != (*it)->name(); ++it )
+        ;
+
+    QWidget *pWidget = NULL;
+    if ( it != pList->end() )
+        pWidget = static_cast< QWidget* >( *it );
+    
+    delete pList;
+
+    return pWidget;
+}
+
+void FileDialog::enableControl( const QString &rId, const QString &rValue )
+{
+    QWidget *pWidget = findControl( rId );
+
+    if ( pWidget )
+        pWidget->setEnabled( rValue.lower() == "true" );
+}
+
+void FileDialog::getValue( const QString &rId, const QString &rAction )
+{
+    QWidget *pWidget = findControl( rId );
+    QString qString;
+    qString.reserve( 1024 );
+    qString.append( "value" );
+
+    if ( pWidget )
+    {
+        QCString qClassName = pWidget->className();
+        if ( qClassName == "QCheckBox" )
+        {
+            QCheckBox *pCheckBox = static_cast< QCheckBox* >( pWidget );
+
+            if ( pCheckBox->isChecked() )
+                qString.append( " bool true" );
+            else
+                qString.append( " bool false" );
+        }
+        else if ( qClassName == "QComboBox" )
+        {
+            QComboBox *pComboBox = static_cast< QComboBox* >( pWidget );
+            if ( rAction == "getItems" )
+            {
+                qString.append( " stringList" );
+                for ( int nIdx = 0; nIdx < pComboBox->count(); ++nIdx )
+                {
+                    qString.append( ' ' );
+                    appendEscaped( qString, pComboBox->text( nIdx ) );
+                }
+            }
+            else if ( rAction == "getSelectedItem" )
+            {
+                qString.append( " string " );
+                appendEscaped( qString, pComboBox->currentText() );
+            }
+            else if ( rAction == "getSelectedItemIndex" )
+            {
+                qString.append( " int " );
+                qString.append( QString().setNum( pComboBox->currentItem() ) );
+            }
+            // TODO getHelpURL
+        }
+        // TODO push button
+    }
+
+    sendCommand( qString );
+}
+
+void FileDialog::setValue( const QString &rId, const QString &rAction, const QStringList &rValue )
+{
+    QWidget *pWidget = findControl( rId );
+
+    if ( pWidget )
+    {
+        QCString qClassName = pWidget->className();
+        if ( qClassName == "QCheckBox" )
+        {
+            QCheckBox *pCheckBox = static_cast< QCheckBox* >( pWidget );
+
+            bool bValue = ( !rValue.isEmpty() ) && ( rValue.front().lower() == "true" );
+            pCheckBox->setChecked( bValue );
+        }
+        else if ( qClassName == "QComboBox" )
+        {
+            QComboBox *pComboBox = static_cast< QComboBox* >( pWidget );
+            if ( rAction == "addItem" )
+            {
+                if ( !rValue.isEmpty() )
+                    pComboBox->insertItem( rValue.front() );
+            }
+            else if ( rAction == "addItems" )
+            {
+                pComboBox->insertStringList( rValue );
+            }
+            else if ( rAction == "deleteItem" )
+            {
+                if ( !rValue.isEmpty() )
+                    pComboBox->removeItem( rValue.front().toInt() );
+            }
+            else if ( rAction == "deleteItems" )
+            {
+                pComboBox->clear();
+            }
+            else if ( rAction == "setSelectedItem" )
+            {
+                if ( !rValue.isEmpty() )
+                    pComboBox->setCurrentItem( rValue.front().toInt() );
+            }
+            // FIXME setHelpURL is ignored
+        }
+        // TODO push button
+    }
+}
+
+void FileDialog::appendFilter( const QString &rTitle, const QString &rFilter )
+{
+    // Filters are separated by ';'
+    QString qFilter( rFilter );
+    qFilter.replace( QChar( ';' ), QChar( ' ' ) ).replace( "*.*", "*" );
+
+    m_aFilters.push_back( qMakePair( rTitle, qFilter ) );
+}
+
+QString FileDialog::filters() const
+{
+    QString qString, qTmp;
+    bool bFirstFilter = true;
+    
+    for ( FilterList::const_iterator it = m_aFilters.begin(); it != m_aFilters.end(); ++it )
+    {
+        if ( bFirstFilter )
+            bFirstFilter = false;
+        else
+            qString.append( '\n' );
+        
+        qString.append( (*it).second );
+        qString.append( '|' );
+        
+        qTmp = (*it).first;
+        qString.append( qTmp.replace( '/', "\\/" ) );
+    }
+
+    return qString;
+}
+
+QString FileDialog::addExtension( const QString &rFileName ) const
+{
+    if ( !isSave() )
+        return rFileName;
+
+    QString qExtension;
+
+    QWidget *pExtensionWidget = findControl( "100" ); // CHECKBOX_AUTOEXTENSION
+    QCheckBox *pExtensionCB = pExtensionWidget? static_cast< QCheckBox* >( pExtensionWidget->qt_cast( "QCheckBox" ) ): NULL;
+    if ( pExtensionCB && pExtensionCB->isChecked() )
+    {
+        // FIXME: qFilter can be a MIME; we ignore it now...
+        QStringList qFilterList = QStringList::split( " ", currentFilter() );
+        for ( QStringList::const_iterator it = qFilterList.begin();
+              qExtension.isEmpty() && it != qFilterList.end();
+              ++it )
+        {
+            int nUnwanted = (*it).findRev( '*' );
+            if ( nUnwanted < 0 )
+                nUnwanted = (*it).findRev( '?' );
+            else
+                nUnwanted = ::std::max( nUnwanted, (*it).find( '?', nUnwanted ) );
+
+            int nIdx = (*it).find( '.', ::std::max( nUnwanted, 0 ) );
+            if ( nIdx >= 0 )
+                qExtension = (*it).mid( nIdx ).lower();
+        }
+    }
+
+    if ( qExtension.isEmpty() || qExtension == "." || rFileName.endsWith( qExtension ) )
+        return rFileName;
+    else
+        return rFileName + qExtension;
+}
+
+void FileDialog::fileHighlightedCommand( const QString & )
+{
+    if ( canNotifySelection() )
+    {
+	sendCommand( "fileSelectionChanged" );
+	setCanNotifySelection( false );
+    }
+}
+
+void FileDialog::selectionChangedCommand()
+{
+    if ( canNotifySelection() )
+    {
+	sendCommand( "fileSelectionChanged" );
+	setCanNotifySelection( false );
+    }
+}
+
+void FileDialog::sendCommand( const QString &rCommand )
+{
+#if OSL_DEBUG_LEVEL > 0
+    ::std::cerr << "kdefilepicker sent: " << rCommand.latin1() << ::std::endl;
+#endif
+
+    //m_aOutputStream << rCommand << endl;
+    ::std::cout << rCommand.utf8() << ::std::endl;
+}
+
+void FileDialog::appendEscaped( QString &rBuffer, const QString &rString )
+{
+    const QChar *pUnicode = rString.unicode();
+    const QChar *pEnd     = pUnicode + rString.length();
+
+    rBuffer.append( '"' );
+    for ( ; pUnicode != pEnd; ++pUnicode )
+    {
+        if ( *pUnicode == '\\' )
+            rBuffer.append( "\\\\" );
+        else if ( *pUnicode == '"' )
+            rBuffer.append( "\\\"" );
+        else if ( *pUnicode == '\n' )
+            rBuffer.append( "\\\n" );
+        else
+            rBuffer.append( *pUnicode );
+    }
+    rBuffer.append( '"' );
+}
+
+QString FileDialog::escapeString( const QString &rString )
+{
+    QString qString;
+    qString.reserve( 2*rString.length() + 2 ); // every char escaped + quotes
+
+    appendEscaped( qString, rString );
+
+    return qString;
+}
+
+
+void FileFilterComboHack::setCurrentFilter( const QString& filter )
+{
+    setCurrentText( filter );
+    filterChanged();
+}
--- /dev/null	2004-04-06 15:27:52.000000000 +0200
+++ fpicker/source/unx/kde/kdefilepicker.hxx	2004-06-11 14:03:03.937359576 +0200
@@ -0,0 +1,147 @@
+/*************************************************************************
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *  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>
+ *
+ *
+ ************************************************************************/
+
+#ifndef _KDEFILEPICKER_HXX_
+#define _KDEFILEPICKER_HXX_
+
+#include <kfiledialog.h>
+#include <kfilefiltercombo.h>
+
+class QGrid;
+class QHBox;
+class QVBox;
+
+class FileDialog : public KFileDialog
+{
+    Q_OBJECT
+
+protected:
+    typedef QPair< QString, QString > FilterEntry;
+    typedef QValueList< FilterEntry > FilterList;
+    
+    QVBox                      *m_pCustomWidget;
+    QHBox                      *m_pCombosAndButtons;
+    
+    QVBox                      *m_pLabels;
+    QVBox                      *m_pComboBoxes;
+    QVBox                      *m_pPushButtons;
+
+    QGrid                      *m_pCheckBoxes;
+
+    FilterList                  m_aFilters;
+
+    /** Are we a "Save As" dialog?
+     * 
+     *  We cannot use KFileDialog::setOperationMode() here, because then
+     *  it automatically adds an "Automatically select filename extension"
+     *  check box, and completely destroys the dialog's layout
+     *  (custom list boxes are under this check box, which looks ugly).
+     */
+    bool                        m_bIsSave;
+
+    bool                        m_bCanNotifySelection;
+
+public:
+    FileDialog( const QString &startDir, const QString &filter,
+                QWidget *parent, const char *name );
+    virtual ~FileDialog();
+
+protected:
+    virtual void                resizeEvent( QResizeEvent *pEvent );
+    virtual void                showEvent( QShowEvent *pEvent );
+    void                        updateCustomWidgetLayout();
+
+    virtual void                customEvent( QCustomEvent *pEvent );
+
+protected:
+    void                        appendControl( const QString &rId, const QString &rType, const QString &rTitle );
+    QWidget*                    findControl( const QString &rId ) const;
+    void                        enableControl( const QString &rId, const QString &rValue );
+    void                        getValue( const QString &rId, const QString &rAction );
+    void                        setValue( const QString &rId, const QString &rAction, const QStringList &rValue );
+    
+    void                        appendFilter( const QString &rTitle, const QString &rFilter );
+    QString                     filters() const;
+    QString                     addExtension( const QString &rFileName ) const;
+
+    void                        setIsSave( bool bIsSave ) { m_bIsSave = bIsSave; }
+    bool                        isSave( void ) const { return m_bIsSave; }
+
+    void                        setCanNotifySelection( bool bCanNotifySelection ) { m_bCanNotifySelection = bCanNotifySelection; }
+    bool                        canNotifySelection( void ) const { return m_bCanNotifySelection; }
+
+protected slots:
+    void                        fileHighlightedCommand( const QString & );
+    void                        selectionChangedCommand();
+
+protected:
+    void                        sendCommand( const QString &rCommand );
+    void                        appendEscaped( QString &rBuffer, const QString &rString );
+    QString                     escapeString( const QString &rString );
+};
+
+class FileFilterComboHack : public KFileFilterCombo
+{
+public:
+    void setCurrentFilter( const QString& filter );
+};
+
+#endif // _KDEFILEPICKER_HXX_
--- /dev/null	2004-04-06 15:27:52.000000000 +0200
+++ fpicker/source/unx/kde/kdefpmain.cxx	2004-06-21 17:40:44.786843760 +0200
@@ -0,0 +1,109 @@
+/*************************************************************************
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *  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>
+ *
+ *
+ ************************************************************************/
+
+#include <kdemodalityfilter.hxx>
+#include <kdefilepicker.hxx>
+#include <kdecommandthread.hxx>
+
+#include <kaboutdata.h>
+#include <kapplication.h>
+#include <kcmdlineargs.h>
+
+#include <iostream>
+
+//////////////////////////////////////////////////////////////////////////
+// Main
+//////////////////////////////////////////////////////////////////////////
+
+int main( int argc, char* argv[] )
+{
+    // we fake the name of the application to have "OpenOffice.org" in the
+    // title
+    KAboutData qAboutData( "kdefilepicker", I18N_NOOP( "OpenOffice.org" ),
+            "0.1", I18N_NOOP( "kdefilepicker is an implementation of the KDE file dialog for OpenOffice.org." ),
+            KAboutData::License_LGPL,
+            "(c) 2004, Jan Holesovsky" );
+    qAboutData.addAuthor( "Jan Holesovsky", I18N_NOOP("Original author and current maintainer"), "kendy@openoffice.org" );
+
+    // Let the user see that this does something...
+    ::std::cerr << "kdefilepicker, an implementation of KDE file dialog for OOo." << ::std::endl
+        << "Type 'exit' and press Enter to finish." << ::std::endl;
+
+    KCmdLineArgs::init( argc, argv, &qAboutData );
+
+    KLocale::setMainCatalogue( "kdialog" );
+    
+    KApplication kApplication;
+    //ModalityFilter qFilter( /*winid*/ 79691780 );
+
+    FileDialog aFileDialog( NULL, QString(), NULL, "kdefiledialog" );
+    
+    CommandThread qCommandThread( &aFileDialog );
+    qCommandThread.start();
+
+    kApplication.exec();
+
+    qCommandThread.wait();
+
+    ::std::cout << "exited" << ::std::endl;
+
+    return 0;
+}
--- /dev/null	2004-04-06 15:27:52.000000000 +0200
+++ fpicker/source/unx/kde/kdemodalityfilter.cxx	2004-06-11 14:18:36.003663960 +0200
@@ -0,0 +1,100 @@
+/*************************************************************************
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *  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>
+ *
+ *
+ ************************************************************************/
+
+#include <kdemodalityfilter.hxx>
+
+#include <kapplication.h>
+#include <kdialogbase.h>
+
+#include <netwm.h>
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+
+//////////////////////////////////////////////////////////////////////////
+// Modality filter
+//////////////////////////////////////////////////////////////////////////
+
+ModalityFilter::ModalityFilter( WId nWinId )
+    : m_nWinId( nWinId )
+{
+    kapp->installEventFilter( this );
+}
+
+ModalityFilter::~ModalityFilter()
+{
+    kapp->removeEventFilter( this );
+}
+
+bool ModalityFilter::eventFilter( QObject *pObject, QEvent *pEvent )
+{
+    if ( pObject->isWidgetType() && pEvent->type() == QEvent::Show )
+    {
+        KDialogBase* pDlg = ::qt_cast< KDialogBase* >( pObject );
+        if ( pDlg != NULL && m_nWinId != 0 )
+        {
+            XSetTransientForHint( qt_xdisplay(), pDlg->winId(), m_nWinId );
+            NETWinInfo aInfo( qt_xdisplay(), pDlg->winId(), qt_xrootwin(), NET::WMState );
+            aInfo.setState( NET::Modal, NET::Modal );
+            m_nWinId = 0;
+        }
+    }
+    return false;
+}
--- /dev/null	2004-04-06 15:27:52.000000000 +0200
+++ fpicker/source/unx/kde/kdemodalityfilter.hxx	2004-06-11 13:50:46.856412912 +0200
@@ -0,0 +1,79 @@
+/*************************************************************************
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *  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>
+ *
+ *
+ ************************************************************************/
+
+#ifndef _KDEMODALITYFILTER_HXX_
+#define _KDEMODALITYFILTER_HXX_
+
+#include <qobject.h>
+
+class ModalityFilter : public QObject
+{
+private:
+    WId m_nWinId;
+
+public:
+    ModalityFilter( WId nWinId );
+    virtual ~ModalityFilter();
+
+    virtual bool eventFilter( QObject *pObject, QEvent *pEvent );
+};
+
+#endif // _KDEMODALITYFILTER_HXX_
--- /dev/null	2004-04-06 15:27:52.000000000 +0200
+++ fpicker/source/unx/kde/makefile.mk	2004-06-15 10:53:54.282583408 +0200
@@ -0,0 +1,110 @@
+#*************************************************************************
+#
+#
+#
+#
+#
+#
+#
+#   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=kdefilepicker
+LIBTARGET=NO
+ENABLE_EXCEPTIONS=TRUE
+#COMP1TYPELIST=$(TARGET)
+#COMPRDB=$(SOLARBINDIR)$/types.rdb
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE :  settings.mk
+
+# ------------------------------------------------------------------
+
+.IF "$(GUIBASE)" != "unx" || "$(ENABLE_KDE)" != "TRUE"
+
+dummy:
+	@echo "Nothing to build. GUIBASE == $(GUIBASE), ENABLE_KDE is not set"
+
+.ELSE # we build for KDE
+
+CFLAGS+= $(KDE_CFLAGS)
+
+# --- Files --------------------------------------------------------
+
+SLOFILES =\
+		$(SLO)$/kdecommandthread.obj \
+		$(SLO)$/kdefilepicker.obj \
+		$(SLO)$/kdefilepicker.moc.obj \
+		$(SLO)$/kdefpmain.obj \
+		$(SLO)$/kdemodalityfilter.obj
+
+APP1TARGET=$(TARGET)
+APP1OBJS=$(SLOFILES)
+APP1STDLIBS=\
+			$(SALLIB) \
+			$(KDE_LIBS) -lkio
+
+
+.ENDIF # "$(GUIBASE)" != "unx" || "$(ENABLE_KDE)" != "TRUE"
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE :	target.mk
+
+$(MISC)$/kdefilepicker.moc.cxx : kdefilepicker.hxx
+	$(MOC) $< -o $@
