diff options
Diffstat (limited to 'tqt3integration/libqtkde/qtkde.cpp')
| -rw-r--r-- | tqt3integration/libqtkde/qtkde.cpp | 147 | 
1 files changed, 147 insertions, 0 deletions
diff --git a/tqt3integration/libqtkde/qtkde.cpp b/tqt3integration/libqtkde/qtkde.cpp new file mode 100644 index 000000000..96ad72429 --- /dev/null +++ b/tqt3integration/libqtkde/qtkde.cpp @@ -0,0 +1,147 @@ + /* + *  This file is part of the Trinity Desktop Environment + * + *  Original file taken from the OpenSUSE tdebase builds + * + *  This program is free software; you can redistribute it and/or modify + *  it under the terms of the GNU General Public License as published by + *  the Free Software Foundation; either version 2 of the License, or + *  (at your option) any later version. + * + *  This program 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 General Public License for more details. + * + *  You should have received a copy of the GNU General Public License + *  along with this program; if not, write to the Free Software + *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. + */ + +#include "qtkde.h" + +#include <assert.h> +#include <dcopclient.h> +#include <dcoptypes.h> +#include <tqapplication.h> +#include <tqregexp.h> +#include <tqstringlist.h> +#include <tqwidget.h> +#include <unistd.h> + +#include <X11/Xlib.h> + +extern Time tqt_x_time; + +static TQString convertFileFilter( const TQString& filter ) +    { +    if( filter.isEmpty()) +        return filter; +    TQString f2 = filter; +    f2.replace( '\n', ";;" ); // TQt says separator is ";;", but it also silently accepts newline +    f2.replace( '/', "\\/" ); // escape /'s for KFileDialog +    TQStringList items = TQStringList::split( ";;", f2 ); +    TQRegExp reg( "\\((.*)\\)" ); +    for( TQStringList::Iterator it = items.begin(); +         it != items.end(); +         ++it ) +        { +        if( reg.search( *it )) +            *it = reg.cap( 1 ) + '|' + *it; +        } +    return items.join( "\n" ); +    } + +static TQString convertBackFileFilter( const TQString& filter ) +    { +    if( filter.isEmpty()) +        return filter; +    TQStringList items = TQStringList::split( "\n", filter ); +    for( TQStringList::Iterator it = items.begin(); +         it != items.end(); +         ++it ) +        { +        int pos = (*it).find( '|' ); +        if( pos >= 0 ) +            (*it) = (*it).mid( pos + 1 ); +        } +    return items.join( ";;" ); +    } + +static DCOPClient* dcopClient() +    { +    DCOPClient* dcop = DCOPClient::mainClient(); +    if( dcop == NULL ) +        { +        static DCOPClient* dcop_private; +        if( dcop_private == NULL ) +            { +            dcop_private = new DCOPClient; +            dcop_private->attach(); +            } +        dcop = dcop_private; +        } +    static bool prepared = false; +    if( !prepared ) +        { +        assert( tqApp != NULL ); // TODO +        prepared = true; +        dcop->bindToApp(); +        if( !tqApp->inherits( "TDEApplication" )) // KApp takes care of input blocking +            { +            static qtkde_EventLoop* loop = new qtkde_EventLoop; +            TQObject::connect( dcop, TQT_SIGNAL( blockUserInput( bool )), loop, TQT_SLOT( block( bool ))); +            } +        } +    return dcop; +    } + +// defined in qapplication_x11.cpp +typedef int (*QX11EventFilter) (XEvent*); +extern QX11EventFilter tqt_set_x11_event_filter (QX11EventFilter filter); + +static QX11EventFilter old_filter; + +static int input_filter( XEvent* e ) +    { +    switch( e->type ) +        { +        case ButtonPress: +        case ButtonRelease: +        case KeyPress: +        case KeyRelease: +        case MotionNotify: +        case EnterNotify: +        case LeaveNotify: +            return true; +        default: +            break; +        } +    if( old_filter != NULL ) +        return old_filter( e ); +    return false; +    } + +void qtkde_EventLoop::block( bool b ) +    { +    if( b ) +        old_filter = tqt_set_x11_event_filter( input_filter ); +    else +        tqt_set_x11_event_filter( old_filter ); +    } + +// duped in kded module +static TQString getHostname() +    { +    char hostname[ 256 ]; +    if( gethostname( hostname, 255 ) == 0 ) +        { +        hostname[ 255 ] = '\0'; +        return hostname; +        } +    return ""; +    } + +#include "tqtkde_functions.cpp" + +#include "qtkde.moc"  | 
