summaryrefslogtreecommitdiffstats
path: root/tqt3integration/utils
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2011-10-19 18:56:47 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2011-10-19 18:56:47 +0000
commit337f18fe5d032a59084a5d6516bcb0ff070128b6 (patch)
treeb8e5fa7014c3aa5672f15c86ddba5e53462d6f6f /tqt3integration/utils
parent1944004a4c57c4c87efc66084579b595da720af8 (diff)
downloadtdebase-337f18fe5d032a59084a5d6516bcb0ff070128b6.tar.gz
tdebase-337f18fe5d032a59084a5d6516bcb0ff070128b6.zip
Add tqt3integration
These files were originally taken from the GPLed OpenSUSE kdebase builds git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebase@1259731 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'tqt3integration/utils')
-rw-r--r--tqt3integration/utils/CMakeLists.txt44
-rw-r--r--tqt3integration/utils/Makefile.am19
-rw-r--r--tqt3integration/utils/gen.cpp970
-rw-r--r--tqt3integration/utils/gen.txt546
-rw-r--r--tqt3integration/utils/qt/CMakeLists.txt12
-rw-r--r--tqt3integration/utils/qt/Makefile.am1
-rw-r--r--tqt3integration/utils/qt/in/CMakeLists.txt12
-rw-r--r--tqt3integration/utils/qt/in/qt.patch270
-rw-r--r--tqt3integration/utils/qt/in/qtkdeintegration_x11_0.cpp.cmake1
-rw-r--r--tqt3integration/utils/qt/in/qtkdeintegration_x11_1.cpp73
-rw-r--r--tqt3integration/utils/qt/in/qtkdeintegration_x11_2.cpp81
-rw-r--r--tqt3integration/utils/qt/in/qtkdeintegration_x11_p_1.h35
-rw-r--r--tqt3integration/utils/qt/in/qtkdeintegration_x11_p_2.h28
13 files changed, 2092 insertions, 0 deletions
diff --git a/tqt3integration/utils/CMakeLists.txt b/tqt3integration/utils/CMakeLists.txt
new file mode 100644
index 000000000..8386a95f7
--- /dev/null
+++ b/tqt3integration/utils/CMakeLists.txt
@@ -0,0 +1,44 @@
+#################################################
+#
+# (C) 2011 Timothy Pearson
+# kb9vqf (AT) pearsoncomputing.net
+#
+# Improvements and feedback are welcome
+#
+# This file is released under GPL >= 2
+#
+#################################################
+
+add_subdirectory( qt )
+
+include_directories(
+ ${CMAKE_CURRENT_BINARY_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_BINARY_DIR}
+ ${TDE_INCLUDE_DIR}
+ ${TQT_INCLUDE_DIRS}
+)
+
+link_directories(
+ ${TQT_LIBRARY_DIRS}
+)
+
+##### gen (internal executable) ########################
+
+tde_add_executable( gen AUTOMOC
+ SOURCES
+ gen.cpp
+ LINK kdecore-shared
+)
+
+ADD_CUSTOM_COMMAND(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/qtkde_functions.cpp ${CMAKE_CURRENT_BINARY_DIR}/module_functions.cpp ${CMAKE_CURRENT_BINARY_DIR}/module_functions.h
+ COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/qt
+ COMMAND ${CMAKE_CURRENT_BINARY_DIR}/gen ${CMAKE_CURRENT_SOURCE_DIR}/gen.txt
+ COMMAND cat ${CMAKE_CURRENT_BINARY_DIR}/qt/in/qtkdeintegration_x11_0.cpp ${CMAKE_CURRENT_SOURCE_DIR}/qt/in/qtkdeintegration_x11_1.cpp ${CMAKE_CURRENT_BINARY_DIR}/qtkdeintegration_x11.cpp.gen ${CMAKE_CURRENT_SOURCE_DIR}/qt/in/qtkdeintegration_x11_2.cpp > ${CMAKE_CURRENT_BINARY_DIR}/qt/qtkdeintegration_x11.cpp
+ COMMAND cat ${CMAKE_CURRENT_SOURCE_DIR}/qt/in/qtkdeintegration_x11_p_1.h ${CMAKE_CURRENT_BINARY_DIR}/qtkdeintegration_x11_p.h.gen ${CMAKE_CURRENT_SOURCE_DIR}/qt/in/qtkdeintegration_x11_p_2.h > ${CMAKE_CURRENT_BINARY_DIR}/qt/qtkdeintegration_x11_p.h
+ COMMAND rm -f ${CMAKE_CURRENT_BINARY_DIR}/qtkdeintegration_x11.cpp.gen ${CMAKE_CURRENT_BINARY_DIR}/qtkdeintegration_x11_p.h.gen
+# COMMAND cp -f ${CMAKE_CURRENT_SOURCE_DIR}/qt/in/qt.patch ${CMAKE_CURRENT_BINARY_DIR}/qt/
+ DEPENDS gen
+)
+ADD_CUSTOM_TARGET(generate_tqt3_bindings DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/qtkde_functions.cpp) \ No newline at end of file
diff --git a/tqt3integration/utils/Makefile.am b/tqt3integration/utils/Makefile.am
new file mode 100644
index 000000000..f4f22e3b8
--- /dev/null
+++ b/tqt3integration/utils/Makefile.am
@@ -0,0 +1,19 @@
+noinst_PROGRAMS = gen
+gen_SOURCES = gen.cpp
+gen_LDADD = $(LIB_KDECORE)
+gen_LDFLAGS = $(all_libraries)
+INCLUDES = $(all_includes)
+CLEANFILES = qtkde_functions.cpp module_functions.cpp module_functions.h generated
+SUBDIRS = qt
+
+generate: generated
+
+generated: gen gen.txt
+ ./gen || exit 1
+ cat qt/in/qtkdeintegration_x11_0.cpp qt/in/qtkdeintegration_x11_1.cpp qtkdeintegration_x11.cpp.gen qt/in/qtkdeintegration_x11_2.cpp >qt/qtkdeintegration_x11.cpp
+ cat qt/in/qtkdeintegration_x11_p_1.h qtkdeintegration_x11_p.h.gen qt/in/qtkdeintegration_x11_p_2.h >qt/qtkdeintegration_x11_p.h
+ rm -f qtkdeintegration_x11.cpp.gen qtkdeintegration_x11_p.h.gen
+ cp -f qt/in/qt.patch qt/
+ touch generated
+
+qtkde_functions.cpp module_functions.cpp module_functions.h : generated
diff --git a/tqt3integration/utils/gen.cpp b/tqt3integration/utils/gen.cpp
new file mode 100644
index 000000000..178d67a3b
--- /dev/null
+++ b/tqt3integration/utils/gen.cpp
@@ -0,0 +1,970 @@
+ /*
+ * This file is part of the Trinity Desktop Environment
+ *
+ * Original file taken from the OpenSUSE kdebase 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 <qfile.h>
+#include <qstring.h>
+#include <qvaluelist.h>
+#include <stdlib.h>
+
+// TODO includes, forwards
+
+
+/*
+
+FUNCTION <name>
+ RETURN_TYPE <type>
+ DELAYED_RETURN - use DCOP transaction in kded module, function will take some time to finish
+ SKIP_QT - don't generate in qt file
+ ONLY_QT - generate only in qt file
+ ADD_APPINFO - generate wmclass arguments
+ ARG <name>
+ TYPE <type>
+ ORIG_TYPE <type> - for example when the function accepts QWidget*, but WId is really used
+ ORIG_CONVERSION <conversion>
+ IGNORE
+ NEEDS_DEREF
+ CONST_REF
+ OUT_ARGUMENT
+ CONVERSION <function>
+ BACK_CONVERSION <function> - for out arguments
+ CREATE <function> - doesn't exist in Qt, create in qtkde using function
+ PARENT - the argument is a parent window to be used for windows
+ ENDARG
+ENDFUNCTION
+
+*/
+
+struct Arg
+ {
+ Arg() : ignore( false ), needs_deref( false ), const_ref( false ), out_argument( false ), parent( false ) {}
+ QString name;
+ QString type;
+ QString orig_type;
+ QString orig_conversion;
+ bool ignore;
+ bool needs_deref;
+ bool const_ref;
+ bool out_argument;
+ QString conversion;
+ QString back_conversion;
+ QString create;
+ bool parent;
+ };
+
+struct Function
+ {
+ Function() : delayed_return( false ), skip_qt( false ), only_qt( false ), add_appinfo( false ) {}
+ QString name;
+ QString return_type;
+ bool delayed_return;
+ bool skip_qt;
+ bool only_qt;
+ bool add_appinfo;
+ QValueList< Arg > args;
+ void stripNonOutArguments();
+ void stripCreatedArguments();
+ };
+
+void Function::stripNonOutArguments()
+ {
+ QValueList< Arg > new_args;
+ for( QValueList< Arg >::ConstIterator it = args.begin();
+ it != args.end();
+ ++it )
+ {
+ const Arg& arg = (*it);
+ if( arg.out_argument )
+ new_args.append( arg );
+ }
+ args = new_args;
+ }
+
+void Function::stripCreatedArguments()
+ {
+ QValueList< Arg > new_args;
+ for( QValueList< Arg >::ConstIterator it = args.begin();
+ it != args.end();
+ ++it )
+ {
+ const Arg& arg = (*it);
+ if( arg.create.isEmpty())
+ new_args.append( arg );
+ }
+ args = new_args;
+ }
+
+QValueList< Function > functions;
+
+QFile* input_file = NULL;
+QTextStream* input_stream = NULL;
+static QString last_line;
+int last_lineno = 0;
+
+#define check( arg ) my_check( __FILE__, __LINE__, arg )
+#define error() my_error( __FILE__, __LINE__ )
+
+void my_error( const char* file, int line )
+ {
+ fprintf( stderr, "Error: %s: %d\n", file, line );
+ fprintf( stderr, "Line %d: %s\n", last_lineno, last_line.utf8().data());
+ abort();
+ }
+
+void my_check( const char* file, int line, bool arg )
+ {
+ if( !arg )
+ my_error( file, line );
+ }
+
+void openInputFile( const QString& filename )
+ {
+ check( input_file == NULL );
+ input_file = new QFile( filename );
+ printf("[INFO] Reading bindings definitions from file %s\n\r", filename.ascii());
+ if( !input_file->open( IO_ReadOnly ))
+ error();
+ input_stream = new QTextStream( input_file );
+ last_lineno = 0;
+ }
+
+QString getInputLine()
+ {
+ while( !input_stream->atEnd())
+ {
+ QString line = input_stream->readLine().stripWhiteSpace();
+ ++last_lineno;
+ last_line = line;
+ if( line.isEmpty() || line[ 0 ] == '#' )
+ continue;
+ return line;
+ }
+ return QString::null;
+ }
+
+void closeInputFile()
+ {
+ delete input_stream;
+ delete input_file;
+ input_stream = NULL;
+ input_file = NULL;
+ }
+
+void parseArg( Function& function, const QString& details )
+ {
+ Arg arg;
+ arg.name = details;
+ QString line = getInputLine();
+ while( !line.isNull() )
+ {
+ if( line.startsWith( "ENDARG" ))
+ {
+ check( !arg.type.isEmpty());
+ function.args.append( arg );
+ return;
+ }
+ else if( line.startsWith( "TYPE" ))
+ {
+ check( arg.type.isEmpty());
+ arg.type = line.mid( strlen( "TYPE" )).stripWhiteSpace();
+ }
+ else if( line.startsWith( "ORIG_TYPE" ))
+ {
+ check( arg.orig_type.isEmpty());
+ arg.orig_type = line.mid( strlen( "ORIG_TYPE" )).stripWhiteSpace();
+ }
+ else if( line.startsWith( "ORIG_CONVERSION" ))
+ {
+ check( arg.orig_conversion.isEmpty());
+ arg.orig_conversion = line.mid( strlen( "ORIG_CONVERSION" )).stripWhiteSpace();
+ }
+ else if( line.startsWith( "IGNORE" ))
+ {
+ check( !arg.out_argument );
+ arg.ignore = true;
+ }
+ else if( line.startsWith( "NEEDS_DEREF" ))
+ {
+ check( !arg.const_ref );
+ arg.needs_deref = true;
+ }
+ else if( line.startsWith( "CONST_REF" ))
+ {
+ check( !arg.needs_deref );
+ check( !arg.out_argument );
+ arg.const_ref = true;
+ }
+ else if( line.startsWith( "OUT_ARGUMENT" ))
+ {
+ check( !arg.ignore );
+ check( !arg.const_ref );
+ arg.out_argument = true;
+ }
+ else if( line.startsWith( "CONVERSION" ))
+ {
+ check( arg.conversion.isEmpty());
+ arg.conversion = line.mid( strlen( "CONVERSION" )).stripWhiteSpace();
+ }
+ else if( line.startsWith( "BACK_CONVERSION" ))
+ {
+ check( arg.back_conversion.isEmpty());
+ arg.back_conversion = line.mid( strlen( "BACK_CONVERSION" )).stripWhiteSpace();
+ }
+ else if( line.startsWith( "CREATE" ))
+ {
+ check( arg.create.isEmpty());
+ arg.create = line.mid( strlen( "CREATE" )).stripWhiteSpace();
+ }
+ else if( line.startsWith( "PARENT" ))
+ {
+ arg.parent = true;
+ }
+ else
+ error();
+ line = getInputLine();
+ }
+ error();
+ }
+
+void parseFunction( const QString& details )
+ {
+ Function function;
+ function.name = details;
+ QString line = getInputLine();
+ while( !line.isNull() )
+ {
+ if( line.startsWith( "ENDFUNCTION" ))
+ {
+ if( function.add_appinfo )
+ {
+ Arg arg;
+ arg.name = "wmclass1";
+ arg.type = "QCString";
+ arg.const_ref = true;
+ arg.create = "qAppName";
+ function.args.append( arg );
+ arg.name = "wmclass2";
+ arg.create = "qAppClass";
+ function.args.append( arg );
+ }
+ check( !function.return_type.isEmpty());
+ functions.append( function );
+ return;
+ }
+ else if( line.startsWith( "RETURN_TYPE" ))
+ {
+ check( function.return_type.isEmpty());
+ function.return_type = line.mid( strlen( "RETURN_TYPE" )).stripWhiteSpace();
+ }
+ else if( line.startsWith( "DELAYED_RETURN" ))
+ function.delayed_return = true;
+ else if( line.startsWith( "SKIP_QT" ))
+ function.skip_qt = true;
+ else if( line.startsWith( "ONLY_QT" ))
+ function.only_qt = true;
+ else if( line.startsWith( "ADD_APPINFO" ))
+ function.add_appinfo = true;
+ else if( line.startsWith( "ARG" ))
+ {
+ parseArg( function, line.mid( strlen( "ARG" )).stripWhiteSpace());
+ }
+ else
+ error();
+ line = getInputLine();
+ }
+ error();
+ }
+
+void parse(TQString filename)
+ {
+ openInputFile( filename );
+ QString line = getInputLine();
+ while( !line.isNull() )
+ {
+ if( line.startsWith( "FUNCTION" ))
+ {
+ parseFunction( line.mid( strlen( "FUNCTION" )).stripWhiteSpace());
+ }
+ else
+ error();
+ line = getInputLine();
+ }
+ closeInputFile();
+ }
+
+QString makeIndent( int indent )
+ {
+ return indent > 0 ? QString().fill( ' ', indent ) : "";
+ }
+
+void generateFunction( QTextStream& stream, const Function& function, const QString name,
+ int indent, bool staticf, bool orig_type, bool ignore_deref, int ignore_level )
+ {
+ QString line;
+ line += makeIndent( indent );
+ if( staticf )
+ line += "static ";
+ line += function.return_type + " " + name + "(";
+ bool need_comma = false;
+ for( QValueList< Arg >::ConstIterator it = function.args.begin();
+ it != function.args.end();
+ ++it )
+ {
+ const Arg& arg = (*it);
+ if( ignore_level >= 2 && arg.ignore )
+ continue;
+ if( need_comma )
+ {
+ line += ",";
+ if( line.length() > 80 )
+ {
+ stream << line << "\n";
+ line = makeIndent( indent + 4 );
+ }
+ else
+ line += " ";
+ }
+ else
+ line += " ";
+ need_comma = true;
+ if( orig_type && !arg.orig_type.isEmpty())
+ line += arg.orig_type;
+ else
+ {
+ if( arg.const_ref )
+ line += "const ";
+ line += arg.type;
+ if( !ignore_deref && arg.needs_deref )
+ line += "*";
+ if( arg.const_ref )
+ line += "&";
+ }
+ if( ignore_level >= 1 && arg.ignore )
+ line += " /*" + arg.name + "*/";
+ else
+ line += " " + arg.name;
+ }
+ line += " )";
+ stream << line;
+ }
+
+void generateQtH()
+ {
+ QFile file( "qtkdeintegration_x11_p.h.gen" );
+ if( !file.open( IO_WriteOnly ))
+ error();
+ QTextStream stream( &file );
+ for( QValueList< Function >::ConstIterator it = functions.begin();
+ it != functions.end();
+ ++it )
+ {
+ Function f = *it;
+ if( f.skip_qt )
+ continue;
+ f.stripCreatedArguments();
+ generateFunction( stream, f, f.name, 8,
+ true /*static*/, true /*orig type*/, false /*ignore deref*/, 0 /*ignore level*/ );
+ stream << ";\n";
+ }
+ }
+
+void generateQtCpp()
+ {
+ QFile file( "qtkdeintegration_x11.cpp.gen" );
+ if( !file.open( IO_WriteOnly ))
+ error();
+ QTextStream stream( &file );
+ for( QValueList< Function >::ConstIterator it = functions.begin();
+ it != functions.end();
+ ++it )
+ {
+ Function f = *it;
+ if( f.only_qt )
+ continue;
+ f.stripCreatedArguments();
+ generateFunction( stream, f, "(*qtkde_" + f.name + ")", 0,
+ true /*static*/, false /*orig type*/, false /*ignore deref*/, 0 /*ignore level*/ );
+ stream << ";\n";
+ }
+ stream <<
+"\n"
+"void QKDEIntegration::initLibrary()\n"
+" {\n"
+" if( !inited )\n"
+" {\n"
+" enable = false;\n"
+" inited = true;\n"
+" QString libpath = findLibrary();\n"
+" if( libpath.isEmpty())\n"
+" return;\n"
+" QLibrary lib( libpath );\n"
+" if( !QFile::exists( lib.library())) // avoid stupid Qt warning\n"
+" return;\n"
+" lib.setAutoUnload( false );\n";
+ for( QValueList< Function >::ConstIterator it = functions.begin();
+ it != functions.end();
+ ++it )
+ {
+ Function function = *it;
+ if( function.only_qt )
+ continue;
+ stream << makeIndent( 8 ) + "qtkde_" + function.name + " = (\n";
+ function.stripCreatedArguments();
+ generateFunction( stream, function, "(*)", 12,
+ false /*static*/, false /*orig type*/, false /*ignore deref*/, 0 /*ignore level*/ );
+ stream << "\n" + makeIndent( 12 ) + ")\n";
+ stream << makeIndent( 12 ) + "lib.resolve(\"" + (*it).name + "\");\n";
+ stream << makeIndent( 8 ) + "if( qtkde_" + (*it).name + " == NULL )\n";
+ stream << makeIndent( 12 ) + "return;\n";
+ }
+ stream <<
+" enable = qtkde_initializeIntegration();\n"
+" }\n"
+" }\n"
+"\n";
+ for( QValueList< Function >::ConstIterator it1 = functions.begin();
+ it1 != functions.end();
+ ++it1 )
+ {
+ Function function = *it1;
+ if( function.skip_qt || function.only_qt )
+ continue;
+ function.stripCreatedArguments();
+ generateFunction( stream, function, "QKDEIntegration::" + function.name, 0,
+ false /*static*/, true /*orig type*/, false /*ignore deref*/, 0 /*ignore level*/ );
+ stream << "\n";
+ stream << makeIndent( 4 ) + "{\n";
+ stream << makeIndent( 4 ) + "return qtkde_" + function.name + "(\n";
+ stream << makeIndent( 8 );
+ bool need_comma = false;
+ for( QValueList< Arg >::ConstIterator it2 = function.args.begin();
+ it2 != function.args.end();
+ ++it2 )
+ {
+ const Arg& arg = (*it2);
+ if( need_comma )
+ stream << ", ";
+ need_comma = true;
+ if( !arg.orig_conversion.isEmpty())
+ {
+ stream << arg.orig_conversion + "( " + arg.name + " )";
+ }
+ else
+ stream << arg.name;
+ }
+ stream << " );\n";
+ stream << makeIndent( 4 ) + "}\n";
+ }
+ }
+
+void generateQt()
+ {
+ generateQtH();
+ generateQtCpp();
+ }
+
+void generateQtKde()
+ {
+ QFile file( "qtkde_functions.cpp" );
+ if( !file.open( IO_WriteOnly ))
+ error();
+ QTextStream stream( &file );
+ for( QValueList< Function >::ConstIterator it1 = functions.begin();
+ it1 != functions.end();
+ ++it1 )
+ {
+ const Function& function = *it1;
+ if( function.only_qt )
+ continue;
+ Function stripped_function = function;
+ stripped_function.stripCreatedArguments();
+ stream << "extern \"C\"\n";
+ generateFunction( stream, stripped_function, stripped_function.name, 0,
+ false /*static*/, false /*orig type*/, false /*ignore deref*/, 1 /*ignore level*/ );
+ stream << "\n";
+ stream <<
+" {\n"
+" if( qt_xdisplay() != NULL )\n"
+" XSync( qt_xdisplay(), False );\n";
+ QString parent_arg;
+ for( QValueList< Arg >::ConstIterator it2 = function.args.begin();
+ it2 != function.args.end();
+ ++it2 )
+ {
+ const Arg& arg = (*it2);
+ if( arg.ignore )
+ continue;
+ if( arg.parent )
+ {
+ parent_arg = arg.name;
+ break;
+ }
+ }
+ if( !parent_arg.isEmpty())
+ {
+ stream << " if( " << parent_arg << " == 0 )\n";
+ stream << " DCOPRef( \"kded\", \"MainApplication-Interface\" ).call( \"updateUserTimestamp\", qt_x_time );\n";
+ }
+ stream <<
+" QByteArray data, replyData;\n"
+" QCString replyType;\n";
+ if( !function.args.isEmpty())
+ {
+ stream << " QDataStream datastream( data, IO_WriteOnly );\n";
+ stream << " datastream";
+ for( QValueList< Arg >::ConstIterator it2 = function.args.begin();
+ it2 != function.args.end();
+ ++it2 )
+ {
+ const Arg& arg = (*it2);
+ if( arg.ignore )
+ continue;
+ stream << " << ";
+ if( !(arg.conversion).isNull() )
+ stream << arg.conversion + "( ";
+ if( !arg.create.isEmpty())
+ stream << arg.create + "()";
+ else
+ {
+ if( arg.needs_deref )
+ stream << "( " << arg.name << " != NULL ? *" << arg.name << " : " << arg.type << "())";
+ else
+ stream << arg.name;
+ }
+ if( !(arg.conversion).isNull() )
+ stream << " )";
+ }
+ stream << ";\n";
+ }
+ stream << " if( !dcopClient()->call( \"kded\", \"kdeintegration\",\"" + function.name + "(";
+ bool need_comma = false;
+ for( QValueList< Arg >::ConstIterator it2 = function.args.begin();
+ it2 != function.args.end();
+ ++it2 )
+ {
+ const Arg& arg = (*it2);
+ if( arg.ignore )
+ continue;
+ if( need_comma )
+ stream << ",";
+ need_comma = true;
+ stream << arg.type;
+ }
+ stream << ")\", data, replyType, replyData, true ))\n";
+ stream << " {\n";
+ if( function.return_type != "void" )
+ {
+ stream << " " + function.return_type << " ret;\n";
+ stream << " dcopTypeInit( ret ); // set to false/0/whatever\n";
+ stream << " return ret;\n";
+ }
+ else
+ stream << " return;\n";
+ stream << " }\n";
+ bool return_data = false;
+ for( QValueList< Arg >::ConstIterator it2 = function.args.begin();
+ !return_data && it2 != function.args.end();
+ ++it2 )
+ {
+ if( (*it2).out_argument )
+ return_data = true;
+ }
+ if( return_data || function.return_type != "void" )
+ stream << " QDataStream replystream( replyData, IO_ReadOnly );\n";
+ if( function.return_type != "void" )
+ {
+ stream << " " + function.return_type << " ret;\n";
+ stream << " replystream >> ret;\n";
+ }
+ if( return_data )
+ {
+ for( QValueList< Arg >::ConstIterator it2 = function.args.begin();
+ it2 != function.args.end();
+ ++it2 )
+ {
+ const Arg& arg = (*it2);
+ if( arg.out_argument && arg.needs_deref )
+ stream << " " << arg.type << " " << arg.name + "_dummy;\n";
+ }
+ stream << " replystream";
+ for( QValueList< Arg >::ConstIterator it2 = function.args.begin();
+ it2 != function.args.end();
+ ++it2 )
+ {
+ const Arg& arg = (*it2);
+ if( arg.out_argument )
+ {
+ stream << " >> ";
+ if( !(arg.back_conversion).isNull() )
+ stream << arg.name + "_dummy";
+ else
+ {
+ if( arg.needs_deref )
+ stream << "( " << arg.name << " != NULL ? *" << arg.name << " : " << arg.name << "_dummy )";
+ else
+ stream << arg.name;
+ }
+ }
+ }
+ stream << ";\n";
+ for( QValueList< Arg >::ConstIterator it2 = function.args.begin();
+ it2 != function.args.end();
+ ++it2 )
+ {
+ const Arg& arg = (*it2);
+ if( arg.out_argument && (!(arg.back_conversion).isNull()) )
+ stream << " if( " << arg.name << " != NULL )\n"
+ << makeIndent( 8 ) << "*" << arg.name << " = " << arg.back_conversion << "( " << arg.name + "_dummy );\n";
+ }
+ }
+ if( function.return_type != "void" )
+ stream << " return ret;\n";
+ stream << " }\n";
+ stream << "\n";
+ }
+ }
+
+void generateKdeDcop( QTextStream& stream )
+ {
+ stream <<
+"bool Module::process(const QCString &fun, const QByteArray &data,\n"
+" QCString &replyType, QByteArray &replyData)\n"
+" {\n";
+ for( QValueList< Function >::ConstIterator it1 = functions.begin();
+ it1 != functions.end();
+ ++it1 )
+ {
+ const Function& function = *it1;
+ if( function.only_qt )
+ continue;
+ stream << " if( fun == \"" + function.name + "(";
+ bool need_comma = false;
+ for( QValueList< Arg >::ConstIterator it2 = function.args.begin();
+ it2 != function.args.end();
+ ++it2 )
+ {
+ const Arg& arg = (*it2);
+ if( arg.ignore )
+ continue;
+ if( need_comma )
+ stream << ",";
+ need_comma = true;
+ stream << arg.type;
+ }
+ stream << ")\" )\n";
+ stream << " {\n";
+ if( function.delayed_return )
+ stream << " pre_" + function.name + "( data );\n";
+ else
+ {
+ stream << " pre_" + function.name + "( data, replyData );\n";
+ stream << " replyType = \"" << function.return_type << "\";\n";
+ }
+ stream << " return true;\n";
+ stream << " }\n";
+ }
+ stream <<
+" return KDEDModule::process( fun, data, replyType, replyData );\n"
+" }\n"
+"\n";
+ stream <<
+"QCStringList Module::functions()\n"
+" {\n"
+" QCStringList funcs = KDEDModule::functions();\n";
+ for( QValueList< Function >::ConstIterator it1 = functions.begin();
+ it1 != functions.end();
+ ++it1 )
+ {
+ const Function& function = *it1;
+ if( function.only_qt )
+ continue;
+ stream << " funcs << \"" + function.name + "(";
+ bool need_comma = false;
+ for( QValueList< Arg >::ConstIterator it2 = function.args.begin();
+ it2 != function.args.end();
+ ++it2 )
+ {
+ const Arg& arg = (*it2);
+ if( arg.ignore )
+ continue;
+ if( need_comma )
+ stream << ",";
+ need_comma = true;
+ stream << arg.type;
+ }
+ stream << ")\";\n";
+ }
+ stream <<
+" return funcs;\n"
+" }\n"
+"\n"
+"QCStringList Module::interfaces()\n"
+" {\n"
+" QCStringList ifaces = KDEDModule::interfaces();\n"
+" ifaces << \"KDEIntegration\";\n"
+" return ifaces;\n"
+" }\n"
+"\n";
+ }
+
+void generateKdePreStub( QTextStream& stream )
+ {
+ for( QValueList< Function >::ConstIterator it1 = functions.begin();
+ it1 != functions.end();
+ ++it1 )
+ {
+ const Function& function = *it1;
+ if( function.only_qt )
+ continue;
+ stream << "void Module::pre_" + function.name + "( const QByteArray& "
+ + ( function.args.isEmpty() ? "" : "data" )
+ + ( function.delayed_return ? "" : ", QByteArray& replyData" )
+ + " )\n";
+ stream << " {\n";
+ if( function.delayed_return )
+ {
+ stream << " JobData job;\n";
+ stream << " job.transaction = kapp->dcopClient()->beginTransaction();\n";
+ stream << " job.type = JobData::" + QString( function.name[ 0 ].upper()) + function.name.mid( 1 ) + ";\n";
+ }
+ for( QValueList< Arg >::ConstIterator it2 = function.args.begin();
+ it2 != function.args.end();
+ ++it2 )
+ {
+ const Arg& arg = (*it2);
+ if( arg.ignore )
+ continue;
+ stream << " " + arg.type + " " + arg.name + ";\n";
+ }
+ if( !function.args.isEmpty())
+ {
+ stream << " QDataStream datastream( data, IO_ReadOnly );\n";
+ stream << " datastream";
+ for( QValueList< Arg >::ConstIterator it2 = function.args.begin();
+ it2 != function.args.end();
+ ++it2 )
+ {
+ const Arg& arg = (*it2);
+ if( arg.ignore )
+ continue;
+ stream << " >> " + arg.name;
+ }
+ stream << ";\n";
+ }
+ if( function.delayed_return )
+ stream << " void* handle = " + function.name + "( ";
+ else
+ stream << " post_" + function.name + "( " + function.name + "( ";
+ bool need_comma = false;
+ for( QValueList< Arg >::ConstIterator it2 = function.args.begin();
+ it2 != function.args.end();
+ ++it2 )
+ {
+ const Arg& arg = (*it2);
+ if( arg.ignore )
+ continue;
+ if( need_comma )
+ stream << ", ";
+ need_comma = true;
+ stream << arg.name;
+ }
+ if( function.delayed_return )
+ {
+ stream << " );\n";
+ stream << " jobs[ handle ] = job;\n";
+ }
+ else
+ stream << " ), replyData );\n";
+ stream << " }\n";
+ stream << "\n";
+ }
+ }
+
+void generateKdePostStub( QTextStream& stream )
+ {
+ for( QValueList< Function >::ConstIterator it1 = functions.begin();
+ it1 != functions.end();
+ ++it1 )
+ {
+ const Function& function = *it1;
+ if( function.only_qt )
+ continue;
+ stream << "void Module::post_" + function.name + "( ";
+ bool needs_comma = false;
+ if( function.delayed_return )
+ {
+ stream << "void* handle";
+ needs_comma = true;
+ }
+ if( function.return_type != "void" )
+ {
+ if( needs_comma )
+ stream << ", ";
+ needs_comma = true;
+ stream << function.return_type + " ret";
+ }
+ for( QValueList< Arg >::ConstIterator it2 = function.args.begin();
+ it2 != function.args.end();
+ ++it2 )
+ {
+ const Arg& arg = (*it2);
+ if( arg.out_argument )
+ {
+ if( needs_comma )
+ stream << ", ";
+ needs_comma = true;
+ stream << arg.type + " " + arg.name;
+ }
+ }
+ if( !function.delayed_return )
+ stream << ( needs_comma ? "," : "" ) << " QByteArray& replyData";
+ stream << " )\n";
+ stream << " {\n";
+ if( function.delayed_return )
+ {
+ stream << " assert( jobs.contains( handle ));\n";
+ stream << " JobData job = jobs[ handle ];\n";
+ stream << " jobs.remove( handle );\n";
+ stream << " QByteArray replyData;\n";
+ stream << " QCString replyType = \"qtkde\";\n";
+ }
+ bool return_data = false;
+ for( QValueList< Arg >::ConstIterator it2 = function.args.begin();
+ !return_data && it2 != function.args.end();
+ ++it2 )
+ {
+ if( (*it2).out_argument )
+ return_data = true;
+ }
+ if( function.return_type != "void" || return_data )
+ stream << " QDataStream replystream( replyData, IO_WriteOnly );\n";
+ if( function.return_type != "void" )
+ stream << " replystream << ret;\n";
+ if( return_data )
+ {
+ stream << " replystream";
+ for( QValueList< Arg >::ConstIterator it2 = function.args.begin();
+ it2 != function.args.end();
+ ++it2 )
+ {
+ const Arg& arg = (*it2);
+ if( arg.out_argument )
+ stream << " << " + arg.name;
+ }
+ stream << ";\n";
+ }
+ if( function.delayed_return )
+ stream << " kapp->dcopClient()->endTransaction( job.transaction, replyType, replyData );\n";
+ stream << " }\n";
+ stream << "\n";
+ }
+ }
+
+void generateKdeStubs( QTextStream& stream )
+ {
+ generateKdePreStub( stream );
+ generateKdePostStub( stream );
+// TODO udelat i predbezne deklarace pro skutecne funkce?
+ }
+
+void generateKdeCpp()
+ {
+ QFile file( "module_functions.cpp" );
+ if( !file.open( IO_WriteOnly ))
+ error();
+ QTextStream stream( &file );
+ generateKdeDcop( stream );
+ generateKdeStubs( stream );
+ }
+
+void generateKdeH()
+ {
+ QFile file( "module_functions.h" );
+ if( !file.open( IO_WriteOnly ))
+ error();
+ QTextStream stream( &file );
+ for( QValueList< Function >::ConstIterator it1 = functions.begin();
+ it1 != functions.end();
+ ++it1 )
+ {
+ const Function& function = *it1;
+ if( function.only_qt )
+ continue;
+ Function real_function = function;
+ if( function.delayed_return )
+ real_function.return_type = "void*";
+ generateFunction( stream, real_function, real_function.name, 8,
+ false /*static*/, false /*orig type*/, true /*ignore deref*/, 2 /*ignore level*/ );
+ stream << ";\n";
+ stream << makeIndent( 8 ) + "void pre_" + function.name + "( const QByteArray& data"
+ + ( function.delayed_return ? "" : ", QByteArray& replyData" ) + " );\n";
+ Function post_function = function;
+ post_function.stripNonOutArguments();
+ if( function.return_type != "void" )
+ {
+ Arg return_arg;
+ return_arg.name = "ret";
+ return_arg.type = function.return_type;
+ post_function.args.prepend( return_arg );
+ }
+ if( function.delayed_return )
+ {
+ Arg handle_arg;
+ handle_arg.name = "handle";
+ handle_arg.type = "void*";
+ post_function.args.prepend( handle_arg );
+ }
+ else
+ {
+ Arg handle_arg;
+ handle_arg.name = "replyData";
+ handle_arg.type = "QByteArray&";
+ post_function.args.append( handle_arg );
+ }
+ post_function.return_type = "void";
+ generateFunction( stream, post_function, "post_" + post_function.name, 8,
+ false /*static*/, false /*orig type*/, true /*ignore deref*/, 2 /*ignore level*/ );
+ stream << ";\n";
+ }
+ }
+
+void generateKde()
+ {
+ generateKdeCpp();
+ generateKdeH();
+ }
+
+void generate()
+ {
+ generateQt();
+ generateQtKde();
+ generateKde();
+ }
+
+int main (int argc, char *argv[])
+ {
+ if (argc > 1) {
+ parse(TQString(argv[1]));
+ }
+ else {
+ parse(TQString("gen.txt"));
+ }
+ generate();
+ return 0;
+ }
diff --git a/tqt3integration/utils/gen.txt b/tqt3integration/utils/gen.txt
new file mode 100644
index 000000000..2bd4b1b3b
--- /dev/null
+++ b/tqt3integration/utils/gen.txt
@@ -0,0 +1,546 @@
+# bool initializeIntegration()
+#
+FUNCTION initializeIntegration
+ RETURN_TYPE bool
+ ARG hostname
+ TYPE QString
+ CONST_REF
+ CREATE getHostname
+ ENDARG
+ENDFUNCTION
+# QStringList getOpenFileNames( const QString &filter,
+# QString* workingDirectory, QWidget *parent, const char* name,
+# const QString& caption, QString* selectedFilter, bool multiple );
+#
+FUNCTION getOpenFileNames
+ RETURN_TYPE QStringList
+ DELAYED_RETURN
+ ADD_APPINFO
+ ARG filter
+ TYPE QString
+ CONST_REF
+ CONVERSION convertFileFilter
+ ENDARG
+ ARG workingDirectory
+ TYPE QString
+ NEEDS_DEREF
+ OUT_ARGUMENT
+ ENDARG
+ ARG parent
+ TYPE long
+ ORIG_TYPE QWidget*
+ ORIG_CONVERSION parentToWinId
+ PARENT
+ ENDARG
+ ARG name
+ TYPE QCString
+ CONST_REF
+ ORIG_TYPE const char*
+ ENDARG
+ ARG caption
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG selectedFilter
+ TYPE QString
+ NEEDS_DEREF
+ OUT_ARGUMENT
+ CONVERSION convertFileFilter
+ BACK_CONVERSION convertBackFileFilter
+ ENDARG
+ ARG multiple
+ TYPE bool
+ ENDARG
+ENDFUNCTION
+
+# QString getSaveFileName( const QString &initialSelection,
+# const QString &filter, QString* workingDirectory, QWidget *parent,
+# const char* name, const QString& caption, QString* selectedFilter );
+#
+FUNCTION getSaveFileName
+ RETURN_TYPE QString
+ DELAYED_RETURN
+ ADD_APPINFO
+ ARG initialSelection
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG filter
+ TYPE QString
+ CONST_REF
+ CONVERSION convertFileFilter
+ ENDARG
+ ARG workingDirectory
+ TYPE QString
+ NEEDS_DEREF
+ OUT_ARGUMENT
+ ENDARG
+ ARG parent
+ TYPE long
+ ORIG_TYPE QWidget*
+ ORIG_CONVERSION parentToWinId
+ PARENT
+ ENDARG
+ ARG name
+ TYPE QCString
+ CONST_REF
+ ORIG_TYPE const char*
+ ENDARG
+ ARG caption
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG selectedFilter
+ TYPE QString
+ NEEDS_DEREF
+ OUT_ARGUMENT
+ CONVERSION convertFileFilter
+ BACK_CONVERSION convertBackFileFilter
+ ENDARG
+ENDFUNCTION
+
+# QString getExistingDirectory( const QString &initialDirectory,
+# QWidget* parent, const char* name, const QString& caption );
+#
+FUNCTION getExistingDirectory
+ RETURN_TYPE QString
+ DELAYED_RETURN
+ ADD_APPINFO
+ ARG initialDirectory
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG parent
+ TYPE long
+ ORIG_TYPE QWidget*
+ ORIG_CONVERSION parentToWinId
+ PARENT
+ ENDARG
+ ARG name
+ TYPE QCString
+ CONST_REF
+ ORIG_TYPE const char*
+ ENDARG
+ ARG caption
+ TYPE QString
+ CONST_REF
+ ENDARG
+ENDFUNCTION
+
+# QColor getColor( const QColor& color, QWidget* parent, const char* name );
+#
+FUNCTION getColor
+ RETURN_TYPE QColor
+ DELAYED_RETURN
+ ADD_APPINFO
+ ARG color
+ TYPE QColor
+ CONST_REF
+ ENDARG
+ ARG parent
+ TYPE long
+ ORIG_TYPE QWidget*
+ ORIG_CONVERSION parentToWinId
+ PARENT
+ ENDARG
+ ARG name
+ TYPE QCString
+ CONST_REF
+ ORIG_TYPE const char*
+ ENDARG
+ENDFUNCTION
+
+# QFont getFont( bool* ok, const QFont* def, QWidget *parent, const char* name);
+FUNCTION getFont
+ RETURN_TYPE QFont
+ DELAYED_RETURN
+ ADD_APPINFO
+ ARG ok
+ TYPE bool
+ NEEDS_DEREF
+ OUT_ARGUMENT
+ ENDARG
+ ARG def
+ TYPE QFont
+ ORIG_TYPE const QFont*
+ ORIG_CONVERSION fontPtrToFontRef
+ CONST_REF
+ ENDARG
+ ARG parent
+ TYPE long
+ ORIG_TYPE QWidget*
+ ORIG_CONVERSION parentToWinId
+ PARENT
+ ENDARG
+ ARG name
+ TYPE QCString
+ CONST_REF
+ ORIG_TYPE const char*
+ ENDARG
+ENDFUNCTION
+
+# int messageBox1( int type, QWidget *parent, const QString& caption, const QString& text,
+# int button0, int button1, int button2 );
+FUNCTION messageBox1
+ RETURN_TYPE int
+ DELAYED_RETURN
+ ADD_APPINFO
+ ARG type
+ TYPE int
+ ENDARG
+ ARG parent
+ TYPE long
+ ORIG_TYPE QWidget*
+ ORIG_CONVERSION parentToWinId
+ PARENT
+ ENDARG
+ ARG caption
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG text
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG button0
+ TYPE int
+ ENDARG
+ ARG button1
+ TYPE int
+ ENDARG
+ ARG button2
+ TYPE int
+ ENDARG
+ENDFUNCTION
+
+# int information( QWidget *parent, const QString& caption, const QString& text,
+# int button0, int button1, int button2 );
+FUNCTION information
+ RETURN_TYPE int
+ DELAYED_RETURN
+ ONLY_QT
+ ARG parent
+ TYPE long
+ ORIG_TYPE QWidget*
+ ORIG_CONVERSION parentToWinId
+ PARENT
+ ENDARG
+ ARG caption
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG text
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG button0
+ TYPE int
+ ENDARG
+ ARG button1
+ TYPE int
+ ENDARG
+ ARG button2
+ TYPE int
+ ENDARG
+ENDFUNCTION
+
+# int question( QWidget *parent, const QString& caption, const QString& text,
+# int button0, int button1, int button2 );
+FUNCTION question
+ RETURN_TYPE int
+ DELAYED_RETURN
+ ONLY_QT
+ ARG parent
+ TYPE long
+ ORIG_TYPE QWidget*
+ ORIG_CONVERSION parentToWinId
+ PARENT
+ ENDARG
+ ARG caption
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG text
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG button0
+ TYPE int
+ ENDARG
+ ARG button1
+ TYPE int
+ ENDARG
+ ARG button2
+ TYPE int
+ ENDARG
+ENDFUNCTION
+
+# int warning( QWidget *parent, const QString& caption, const QString& text,
+# int button0, int button1, int button2 );
+FUNCTION warning
+ RETURN_TYPE int
+ DELAYED_RETURN
+ ONLY_QT
+ ARG parent
+ TYPE long
+ ORIG_TYPE QWidget*
+ ORIG_CONVERSION parentToWinId
+ PARENT
+ ENDARG
+ ARG caption
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG text
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG button0
+ TYPE int
+ ENDARG
+ ARG button1
+ TYPE int
+ ENDARG
+ ARG button2
+ TYPE int
+ ENDARG
+ENDFUNCTION
+
+# int critical( QWidget *parent, const QString& caption, const QString& text,
+# int button0, int button1, int button2 );
+FUNCTION critical
+ RETURN_TYPE int
+ DELAYED_RETURN
+ ONLY_QT
+ ARG parent
+ TYPE long
+ ORIG_TYPE QWidget*
+ ORIG_CONVERSION parentToWinId
+ PARENT
+ ENDARG
+ ARG caption
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG text
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG button0
+ TYPE int
+ ENDARG
+ ARG button1
+ TYPE int
+ ENDARG
+ ARG button2
+ TYPE int
+ ENDARG
+ENDFUNCTION
+
+# int messageBox2( int type, QWidget* parent, const QString& caption, const QString& text,
+# const QString& button0Text, const QString& button1Text, const QString& button2Text,
+# int defaultButton, int escapeButton );
+FUNCTION messageBox2
+ RETURN_TYPE int
+ DELAYED_RETURN
+ ADD_APPINFO
+ ARG type
+ TYPE int
+ ENDARG
+ ARG parent
+ TYPE long
+ ORIG_TYPE QWidget*
+ ORIG_CONVERSION parentToWinId
+ PARENT
+ ENDARG
+ ARG caption
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG text
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG button0Text
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG button1Text
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG button2Text
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG defaultButton
+ TYPE int
+ ENDARG
+ ARG escapeButton
+ TYPE int
+ ENDARG
+ENDFUNCTION
+
+# int information( QWidget* parent, const QString& caption, const QString& text,
+# const QString& button0Text, const QString& button1Text, const QString& button2Text,
+# int defaultButton, int escapeButton );
+FUNCTION information
+ RETURN_TYPE int
+ DELAYED_RETURN
+ ONLY_QT
+ ARG parent
+ TYPE long
+ ORIG_TYPE QWidget*
+ ORIG_CONVERSION parentToWinId
+ PARENT
+ ENDARG
+ ARG caption
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG text
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG button0Text
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG button1Text
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG button2Text
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG defaultButton
+ TYPE int
+ ENDARG
+ ARG escapeButton
+ TYPE int
+ ENDARG
+ENDFUNCTION
+
+# int question( QWidget* parent, const QString& caption, const QString& text,
+# const QString& button0Text, const QString& button1Text, const QString& button2Text,
+# int defaultButton, int escapeButton );
+FUNCTION question
+ RETURN_TYPE int
+ DELAYED_RETURN
+ ONLY_QT
+ ARG parent
+ TYPE long
+ ORIG_TYPE QWidget*
+ ORIG_CONVERSION parentToWinId
+ PARENT
+ ENDARG
+ ARG caption
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG text
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG button0Text
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG button1Text
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG button2Text
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG defaultButton
+ TYPE int
+ ENDARG
+ ARG escapeButton
+ TYPE int
+ ENDARG
+ENDFUNCTION
+
+# int warning( QWidget* parent, const QString& caption, const QString& text,
+# const QString& button0Text, const QString& button1Text, const QString& button2Text,
+# int defaultButton, int escapeButton );
+FUNCTION warning
+ RETURN_TYPE int
+ DELAYED_RETURN
+ ONLY_QT
+ ARG parent
+ TYPE long
+ ORIG_TYPE QWidget*
+ ORIG_CONVERSION parentToWinId
+ PARENT
+ ENDARG
+ ARG caption
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG text
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG button0Text
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG button1Text
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG button2Text
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG defaultButton
+ TYPE int
+ ENDARG
+ ARG escapeButton
+ TYPE int
+ ENDARG
+ENDFUNCTION
+
+# int critical( QWidget* parent, const QString& caption, const QString& text,
+# const QString& button0Text, const QString& button1Text, const QString& button2Text,
+# int defaultButton, int escapeButton );
+FUNCTION critical
+ RETURN_TYPE int
+ DELAYED_RETURN
+ ONLY_QT
+ ARG parent
+ TYPE long
+ ORIG_TYPE QWidget*
+ ORIG_CONVERSION parentToWinId
+ PARENT
+ ENDARG
+ ARG caption
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG text
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG button0Text
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG button1Text
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG button2Text
+ TYPE QString
+ CONST_REF
+ ENDARG
+ ARG defaultButton
+ TYPE int
+ ENDARG
+ ARG escapeButton
+ TYPE int
+ ENDARG
+ENDFUNCTION
diff --git a/tqt3integration/utils/qt/CMakeLists.txt b/tqt3integration/utils/qt/CMakeLists.txt
new file mode 100644
index 000000000..de5ffb4e8
--- /dev/null
+++ b/tqt3integration/utils/qt/CMakeLists.txt
@@ -0,0 +1,12 @@
+#################################################
+#
+# (C) 2011 Timothy Pearson
+# kb9vqf (AT) pearsoncomputing.net
+#
+# Improvements and feedback are welcome
+#
+# This file is released under GPL >= 2
+#
+#################################################
+
+add_subdirectory( in ) \ No newline at end of file
diff --git a/tqt3integration/utils/qt/Makefile.am b/tqt3integration/utils/qt/Makefile.am
new file mode 100644
index 000000000..c4667d0bd
--- /dev/null
+++ b/tqt3integration/utils/qt/Makefile.am
@@ -0,0 +1 @@
+CLEANFILES = qt.patch qtkdeintegration_x11.cpp qtkdeintegration_x11_p.h
diff --git a/tqt3integration/utils/qt/in/CMakeLists.txt b/tqt3integration/utils/qt/in/CMakeLists.txt
new file mode 100644
index 000000000..e6fa392d5
--- /dev/null
+++ b/tqt3integration/utils/qt/in/CMakeLists.txt
@@ -0,0 +1,12 @@
+#################################################
+#
+# (C) 2011 Timothy Pearson
+# kb9vqf (AT) pearsoncomputing.net
+#
+# Improvements and feedback are welcome
+#
+# This file is released under GPL >= 2
+#
+#################################################
+
+configure_file( qtkdeintegration_x11_0.cpp.cmake qtkdeintegration_x11_0.cpp @ONLY ) \ No newline at end of file
diff --git a/tqt3integration/utils/qt/in/qt.patch b/tqt3integration/utils/qt/in/qt.patch
new file mode 100644
index 000000000..578388440
--- /dev/null
+++ b/tqt3integration/utils/qt/in/qt.patch
@@ -0,0 +1,270 @@
+--- src/dialogs/qfiledialog.cpp.sav 2004-12-08 15:39:41.000000000 +0100
++++ src/dialogs/qfiledialog.cpp 2004-12-13 16:53:40.000000000 +0100
+@@ -92,6 +92,10 @@
+ #include "qvbox.h"
+ #include "qwidgetstack.h"
+
++#ifdef Q_WS_X11
++#include "private/qtkdeintegration_x11_p.h"
++#endif
++
+ #ifdef Q_WS_WIN
+ #ifdef QT_THREAD_SUPPORT
+ # include <private/qmutexpool_p.h>
+@@ -3428,7 +3432,11 @@ QString QFileDialog::getOpenFileName( co
+ if ( workingDirectory->isNull() )
+ *workingDirectory = QDir::currentDirPath();
+
+-#if defined(Q_WS_WIN)
++#if defined(Q_WS_X11)
++ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
++ return QKDEIntegration::getOpenFileNames( filter, workingDirectory, parent, name,
++ caption, selectedFilter, false ).first();
++#elif defined(Q_WS_WIN)
+ if ( qt_use_native_dialogs && qApp->style().styleHint( QStyle::SH_GUIStyle ) == WindowsStyle )
+ return winGetOpenFileName( initialSelection, filter, workingDirectory,
+ parent, name, caption, selectedFilter );
+@@ -3546,7 +3554,11 @@ QString QFileDialog::getSaveFileName( co
+ if ( workingDirectory->isNull() )
+ *workingDirectory = QDir::currentDirPath();
+
+-#if defined(Q_WS_WIN)
++#if defined(Q_WS_X11)
++ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
++ return QKDEIntegration::getSaveFileName( initialSelection, filter, workingDirectory,
++ parent, name, caption, selectedFilter );
++#elif defined(Q_WS_WIN)
+ if ( qt_use_native_dialogs && qApp->style().styleHint( QStyle::SH_GUIStyle ) == WindowsStyle )
+ return winGetSaveFileName( initialSelection, filter, workingDirectory,
+ parent, name, caption, selectedFilter );
+@@ -4433,7 +4445,17 @@ QString QFileDialog::getExistingDirector
+ if ( workingDirectory )
+ wd = *workingDirectory;
+
+-#if defined(Q_WS_WIN)
++#if defined(Q_WS_X11)
++ QString initialDir;
++ if ( !dir.isEmpty() ) {
++ QUrlOperator u( dir );
++ if ( QFileInfo( u.path() ).isDir() )
++ initialDir = dir;
++ } else
++ initialDir = QString::null;
++ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
++ return QKDEIntegration::getExistingDirectory( initialDir, parent, name, caption );
++#elif defined(Q_WS_WIN)
+ QString initialDir;
+ if ( !dir.isEmpty() ) {
+ QUrlOperator u( dir );
+@@ -5586,7 +5608,10 @@ QStringList QFileDialog::getOpenFileName
+ }
+ }
+
+-#if defined(Q_WS_WIN)
++#if defined(Q_WS_X11)
++ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
++ return QKDEIntegration::getOpenFileNames( filter, workingDirectory, parent, name, caption, selectedFilter, true );
++#elif defined(Q_WS_WIN)
+ if ( qt_use_native_dialogs && qApp->style().styleHint( QStyle::SH_GUIStyle ) == WindowsStyle )
+ return winGetOpenFileNames( filter, workingDirectory, parent, name, caption, selectedFilter );
+ #elif defined(Q_WS_MAC)
+--- src/dialogs/qmessagebox.cpp.sav 2003-12-22 12:24:32.000000000 +0100
++++ src/dialogs/qmessagebox.cpp 2005-01-05 18:05:29.638723917 +0100
+@@ -54,6 +54,12 @@
+ #endif
+
+
++#ifdef Q_WS_X11
++#include "private/qtkdeintegration_x11_p.h"
++#endif
++
++extern bool qt_use_native_dialogs;
++
+ // Internal class - don't touch
+
+ class QMessageBoxLabel : public QLabel
+@@ -1104,6 +1110,10 @@ int QMessageBox::information( QWidget *p
+ const QString& caption, const QString& text,
+ int button0, int button1, int button2 )
+ {
++#if defined(Q_WS_X11)
++ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
++ return QKDEIntegration::information( parent, caption, text, button0, button1, button2 );
++#endif
+ QMessageBox *mb = new QMessageBox( caption, text, Information,
+ button0, button1, button2,
+ parent, "qt_msgbox_information", TRUE,
+@@ -1151,6 +1161,10 @@ int QMessageBox::question( QWidget *pare
+ const QString& caption, const QString& text,
+ int button0, int button1, int button2 )
+ {
++#if defined(Q_WS_X11)
++ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
++ return QKDEIntegration::question( parent, caption, text, button0, button1, button2 );
++#endif
+ QMessageBox *mb = new QMessageBox( caption, text, Question,
+ button0, button1, button2,
+ parent, "qt_msgbox_information", TRUE,
+@@ -1199,6 +1213,10 @@ int QMessageBox::warning( QWidget *paren
+ const QString& caption, const QString& text,
+ int button0, int button1, int button2 )
+ {
++#if defined(Q_WS_X11)
++ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
++ return QKDEIntegration::warning( parent, caption, text, button0, button1, button2 );
++#endif
+ QMessageBox *mb = new QMessageBox( caption, text, Warning,
+ button0, button1, button2,
+ parent, "qt_msgbox_warning", TRUE,
+@@ -1247,6 +1265,10 @@ int QMessageBox::critical( QWidget *pare
+ const QString& caption, const QString& text,
+ int button0, int button1, int button2 )
+ {
++#if defined(Q_WS_X11)
++ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
++ return QKDEIntegration::critical( parent, caption, text, button0, button1, button2 );
++#endif
+ QMessageBox *mb = new QMessageBox( caption, text, Critical,
+ button0, button1, button2,
+ parent, "qt_msgbox_critical", TRUE,
+@@ -1394,6 +1416,11 @@ int QMessageBox::information( QWidget *p
+ int defaultButtonNumber,
+ int escapeButtonNumber )
+ {
++#if defined(Q_WS_X11)
++ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
++ return QKDEIntegration::information( parent, caption, text,
++ button0Text, button1Text, button2Text, defaultButtonNumber, escapeButtonNumber );
++#endif
+ return textBox( parent, Information, caption, text,
+ button0Text, button1Text, button2Text,
+ defaultButtonNumber, escapeButtonNumber );
+@@ -1436,6 +1463,11 @@ int QMessageBox::question( QWidget *pare
+ int defaultButtonNumber,
+ int escapeButtonNumber )
+ {
++#if defined(Q_WS_X11)
++ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
++ return QKDEIntegration::question( parent, caption, text,
++ button0Text, button1Text, button2Text, defaultButtonNumber, escapeButtonNumber );
++#endif
+ return textBox( parent, Question, caption, text,
+ button0Text, button1Text, button2Text,
+ defaultButtonNumber, escapeButtonNumber );
+@@ -1480,6 +1512,11 @@ int QMessageBox::warning( QWidget *paren
+ int defaultButtonNumber,
+ int escapeButtonNumber )
+ {
++#if defined(Q_WS_X11)
++ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
++ return QKDEIntegration::warning( parent, caption, text,
++ button0Text, button1Text, button2Text, defaultButtonNumber, escapeButtonNumber );
++#endif
+ return textBox( parent, Warning, caption, text,
+ button0Text, button1Text, button2Text,
+ defaultButtonNumber, escapeButtonNumber );
+@@ -1520,6 +1557,11 @@ int QMessageBox::critical( QWidget *pare
+ int defaultButtonNumber,
+ int escapeButtonNumber )
+ {
++#if defined(Q_WS_X11)
++ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
++ return QKDEIntegration::critical( parent, caption, text,
++ button0Text, button1Text, button2Text, defaultButtonNumber, escapeButtonNumber );
++#endif
+ return textBox( parent, Critical, caption, text,
+ button0Text, button1Text, button2Text,
+ defaultButtonNumber, escapeButtonNumber );
+--- src/dialogs/qfontdialog.cpp.sav 2004-08-12 14:32:06.000000000 +0200
++++ src/dialogs/qfontdialog.cpp 2004-12-13 19:02:31.000000000 +0100
+@@ -56,6 +56,10 @@
+ #include <private/qfontdata_p.h>
+ #include <qvalidator.h>
+
++#ifdef Q_WS_X11
++#include "private/qtkdeintegration_x11_p.h"
++#endif
++
+ /*!
+ \class QFontDialog qfontdialog.h
+ \ingroup dialogs
+@@ -384,9 +388,15 @@ QFont QFontDialog::getFont( bool *ok, QW
+ return getFont( ok, 0, parent, name );
+ }
+
++extern bool qt_use_native_dialogs;
++
+ QFont QFontDialog::getFont( bool *ok, const QFont *def,
+ QWidget *parent, const char* name)
+ {
++#if defined(Q_WS_X11)
++ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
++ return QKDEIntegration::getFont( ok, def, parent, name );
++#endif
+ QFont result;
+ if ( def )
+ result = *def;
+--- src/dialogs/qcolordialog.cpp.sav 2004-04-30 12:00:05.000000000 +0200
++++ src/dialogs/qcolordialog.cpp 2004-12-13 16:53:40.000000000 +0100
+@@ -60,6 +60,10 @@ QRgb macGetRgba( QRgb initial, bool *ok,
+ QColor macGetColor( const QColor& initial, QWidget *parent, const char *name );
+ #endif
+
++#ifdef Q_WS_X11
++#include "private/qtkdeintegration_x11_p.h"
++#endif
++
+ //////////// QWellArray BEGIN
+
+ struct QWellArrayData;
+@@ -1478,7 +1482,10 @@ QColorDialog::QColorDialog(QWidget* pare
+ QColor QColorDialog::getColor( const QColor& initial, QWidget *parent,
+ const char *name )
+ {
+-#if defined(Q_WS_MAC)
++#if defined(Q_WS_X11)
++ if( QKDEIntegration::enabled())
++ return QKDEIntegration::getColor( initial, parent, name );
++#elif defined(Q_WS_MAC)
+ return macGetColor(initial, parent, name);
+ #endif
+
+@@ -1516,6 +1523,13 @@ QRgb QColorDialog::getRgba( QRgb initial
+ QWidget *parent, const char* name )
+ {
+ #if defined(Q_WS_MAC)
++ if( QKDEIntegration::enabled()) {
++ QColor color = QKDEIntegration::getColor( QColor( initial ), parent, name );
++ if( ok )
++ *ok = color.isValid();
++ return color.rgba();
++ }
++#elif defined(Q_WS_MAC)
+ return macGetRgba(initial, ok, parent, name);
+ #endif
+
+--- src/kernel/qt_x11.pri.sav 2004-11-15 17:51:45.000000000 +0100
++++ src/kernel/qt_x11.pri 2004-12-13 16:53:40.000000000 +0100
+@@ -10,6 +10,9 @@ unix {
+
+ SOURCES += $$KERNEL_CPP/qtaddons_x11.cpp
+ PRECOMPILED_HEADER = kernel/qt_pch.h
++
++ SOURCES += $$KERNEL_CPP/qtkdeintegration_x11.cpp
++ HEADERS += $$KERNEL_H/qtkdeintegration_x11_p.h
+ }
+
+ nas {
+--- src/kernel/qt.h.sav 2004-02-16 15:05:19.000000000 +0100
++++ src/kernel/qt.h 2004-12-13 16:53:40.000000000 +0100
+@@ -313,6 +313,10 @@
+ #endif // Private headers
+
+
++#ifdef Q_WS_X11
++#include "private/qtkdeintegration_x11_p.h"
++#endif
++
+ #ifdef Q_WS_MAC
+ #include <qaquastyle.h>
+ #include <qmacstyle_mac.h>
diff --git a/tqt3integration/utils/qt/in/qtkdeintegration_x11_0.cpp.cmake b/tqt3integration/utils/qt/in/qtkdeintegration_x11_0.cpp.cmake
new file mode 100644
index 000000000..37b84a776
--- /dev/null
+++ b/tqt3integration/utils/qt/in/qtkdeintegration_x11_0.cpp.cmake
@@ -0,0 +1 @@
+#define QTKDELIBDIR @PLUGIN_INSTALL_DIR@/plugins/integration
diff --git a/tqt3integration/utils/qt/in/qtkdeintegration_x11_1.cpp b/tqt3integration/utils/qt/in/qtkdeintegration_x11_1.cpp
new file mode 100644
index 000000000..0fe1b3baf
--- /dev/null
+++ b/tqt3integration/utils/qt/in/qtkdeintegration_x11_1.cpp
@@ -0,0 +1,73 @@
+ /*
+ * This file is part of the Trinity Desktop Environment
+ *
+ * Original file taken from the OpenSUSE kdebase 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 "qtkdeintegration_x11_p.h"
+
+#include <qcolordialog.h>
+#include <qfiledialog.h>
+#include <qfontdialog.h>
+#include <qlibrary.h>
+#include <qregexp.h>
+#include <qmessagebox.h>
+#include <qapplication.h>
+#include <stdlib.h>
+
+bool QKDEIntegration::inited = false;
+bool QKDEIntegration::enable = false;
+
+bool QKDEIntegration::enabled()
+ {
+ if( !inited )
+ initLibrary();
+ return enable;
+ }
+
+static QCString findLibrary()
+ {
+ if( getenv( "KDE_FULL_SESSION" ) == NULL )
+ return "";
+ if( getenv( "KDE_FULL_SESSION" )[ 0 ] != 't' && getenv( "KDE_FULL_SESSION" )[ 0 ] != '1' )
+ return "";
+ if( getenv( "QT_NO_KDE_INTEGRATION" ) == NULL
+ || getenv( "QT_NO_KDE_INTEGRATION" )[ 0 ] == '0' )
+ {
+ return QCString( QTKDELIBDIR ) + "/libqtkde";
+ }
+ return "";
+ }
+
+static long parentToWinId( const QWidget* w )
+ {
+ if( w != NULL )
+ return w->topLevelWidget()->winId();
+ // try to find some usable parent
+ if( qApp->activeWindow() && w != qApp->activeWindow())
+ return qApp->activeWindow()->winId();
+ if( qApp->mainWidget() && w != qApp->mainWidget())
+ return qApp->mainWidget()->winId();
+ return 0;
+ }
+
+inline static QFont fontPtrToFontRef( const QFont* f )
+ {
+ return f != NULL ? *f : QFont();
+ }
+
+// ---
diff --git a/tqt3integration/utils/qt/in/qtkdeintegration_x11_2.cpp b/tqt3integration/utils/qt/in/qtkdeintegration_x11_2.cpp
new file mode 100644
index 000000000..d22f5e9af
--- /dev/null
+++ b/tqt3integration/utils/qt/in/qtkdeintegration_x11_2.cpp
@@ -0,0 +1,81 @@
+ /*
+ * This file is part of the Trinity Desktop Environment
+ *
+ * Original file taken from the OpenSUSE kdebase 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.
+ */
+
+// ---
+
+int QKDEIntegration::information( QWidget* parent, const QString& caption,
+ const QString& text, int button0, int button1, int button2 )
+ {
+ return qtkde_messageBox1(
+ QMessageBox::Information, parentToWinId( parent ), caption, text, button0, button1, button2 );
+ }
+
+int QKDEIntegration::question( QWidget* parent, const QString& caption,
+ const QString& text, int button0, int button1, int button2 )
+ {
+ return qtkde_messageBox1(
+ QMessageBox::Question, parentToWinId( parent ), caption, text, button0, button1, button2 );
+ }
+
+int QKDEIntegration::warning( QWidget* parent, const QString& caption,
+ const QString& text, int button0, int button1, int button2 )
+ {
+ return qtkde_messageBox1(
+ QMessageBox::Warning, parentToWinId( parent ), caption, text, button0, button1, button2 );
+ }
+
+int QKDEIntegration::critical( QWidget* parent, const QString& caption,
+ const QString& text, int button0, int button1, int button2 )
+ {
+ return qtkde_messageBox1(
+ QMessageBox::Critical, parentToWinId( parent ), caption, text, button0, button1, button2 );
+ }
+
+int QKDEIntegration::information( QWidget* parent, const QString& caption,
+ const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text,
+ int defaultButton, int escapeButton )
+ {
+ return qtkde_messageBox2(
+ QMessageBox::Information, parentToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton );
+ }
+
+int QKDEIntegration::question( QWidget* parent, const QString& caption,
+ const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text,
+ int defaultButton, int escapeButton )
+ {
+ return qtkde_messageBox2(
+ QMessageBox::Question, parentToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton );
+ }
+
+int QKDEIntegration::warning( QWidget* parent, const QString& caption,
+ const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text,
+ int defaultButton, int escapeButton )
+ {
+ return qtkde_messageBox2(
+ QMessageBox::Warning, parentToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton );
+ }
+
+int QKDEIntegration::critical( QWidget* parent, const QString& caption,
+ const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text,
+ int defaultButton, int escapeButton )
+ {
+ return qtkde_messageBox2(
+ QMessageBox::Critical, parentToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton );
+ }
diff --git a/tqt3integration/utils/qt/in/qtkdeintegration_x11_p_1.h b/tqt3integration/utils/qt/in/qtkdeintegration_x11_p_1.h
new file mode 100644
index 000000000..118e861e7
--- /dev/null
+++ b/tqt3integration/utils/qt/in/qtkdeintegration_x11_p_1.h
@@ -0,0 +1,35 @@
+ /*
+ * This file is part of the Trinity Desktop Environment
+ *
+ * Original file taken from the OpenSUSE kdebase 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.
+ */
+
+#ifndef QKDEINTEGRATION_H
+#define QKDEINTEGRATION_H
+
+#include <qstringlist.h>
+
+class QLibrary;
+class QWidget;
+class QColor;
+class QFont;
+
+class QKDEIntegration
+ {
+ public:
+ static bool enabled();
+// ---
diff --git a/tqt3integration/utils/qt/in/qtkdeintegration_x11_p_2.h b/tqt3integration/utils/qt/in/qtkdeintegration_x11_p_2.h
new file mode 100644
index 000000000..4ce56ff97
--- /dev/null
+++ b/tqt3integration/utils/qt/in/qtkdeintegration_x11_p_2.h
@@ -0,0 +1,28 @@
+ /*
+ * This file is part of the Trinity Desktop Environment
+ *
+ * Original file taken from the OpenSUSE kdebase 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.
+ */
+
+// ---
+ private:
+ static void initLibrary();
+ static bool inited;
+ static bool enable;
+ };
+
+#endif