diff options
Diffstat (limited to 'src/inputmethod')
-rw-r--r-- | src/inputmethod/qinputcontextfactory.cpp | 186 | ||||
-rw-r--r-- | src/inputmethod/qinputcontextfactory.h | 59 | ||||
-rw-r--r-- | src/inputmethod/qinputcontextinterface_p.h | 87 | ||||
-rw-r--r-- | src/inputmethod/qinputcontextplugin.cpp | 231 | ||||
-rw-r--r-- | src/inputmethod/qinputcontextplugin.h | 67 | ||||
-rw-r--r-- | src/inputmethod/qt_inputmethod.pri | 10 |
6 files changed, 640 insertions, 0 deletions
diff --git a/src/inputmethod/qinputcontextfactory.cpp b/src/inputmethod/qinputcontextfactory.cpp new file mode 100644 index 0000000..50aa7fb --- /dev/null +++ b/src/inputmethod/qinputcontextfactory.cpp @@ -0,0 +1,186 @@ +/**************************************************************************** +** $Id: qinputcontextfactory.cpp,v 1.2 2004/06/20 18:43:11 daisuke Exp $ +** +** Implementation of QInputContextFactory class +** +** Created : 001103 +** +** Copyright (C) 1992-2002 Trolltech AS. All rights reserved. +** +** This file is part of the widgets module of the Qt GUI Toolkit. +** +** This file may be distributed under the terms of the Q Public License +** as defined by Trolltech AS of Norway and appearing in the file +** LICENSE.QPL included in the packaging of this file. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** Licensees holding valid Qt Enterprise Edition licenses may use this +** file in accordance with the Qt Commercial License Agreement provided +** with the Software. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for +** information about Qt Commercial License Agreements. +** See http://www.trolltech.com/qpl/ for QPL licensing information. +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#include "qinputcontextinterface_p.h" // up here for GCC 2.7.* compatibility +#include "qinputcontextfactory.h" +#include "qinputcontext.h" + +#ifndef QT_NO_IM + +#include "qapplication.h" + +#ifdef QT_THREAD_SUPPORT +#include <private/qmutexpool_p.h> +#endif // QT_THREAD_SUPPORT + +#include <stdlib.h> + +#include "qcleanuphandler.h" +#include <private/qpluginmanager_p.h> +#ifndef QT_NO_COMPONENT + + +static QPluginManager<QInputContextFactoryInterface> *manager = 0; +static QSingleCleanupHandler< QPluginManager<QInputContextFactoryInterface> > cleanup_manager; + +static void create_manager() +{ + if( manager ) // already created + return; + +#ifdef QT_THREAD_SUPPORT + // protect manager creation + QMutexLocker locker( qt_global_mutexpool ? + qt_global_mutexpool->get( &manager ) : 0); + + // we check the manager pointer again to make sure that another thread + // has not created the manager before us. + + if ( manager ) // already created + return; +#endif + + manager = new QPluginManager<QInputContextFactoryInterface>( IID_QInputContextFactory, QApplication::libraryPaths(), "/inputmethods", FALSE ); + + Q_CHECK_PTR( manager ); + cleanup_manager.set( &manager ); +} + +#endif //QT_NO_COMPONENT + + +/*! + This function generates the input context that has the identifier + name which is in agreement with \a key. \a widget is the client + widget of QInputContext. \a widget may be null. +*/ +QInputContext *QInputContextFactory::create( const QString& key, QWidget *widget ) +{ + QInputContext *ret = 0; + QString inputcontext = key; +#ifndef QT_NO_COMPONENT + // make sure the manager is created + create_manager(); + + QInterfacePtr<QInputContextFactoryInterface> iface; + manager->queryInterface( inputcontext, &iface ); + + if ( iface ) { + ret = iface->create( inputcontext ); +#ifdef Q_WS_X11 + if ( ret ) + ret->setHolderWidget( widget ); +#endif + } +#endif + return ret; +} + + +/*! + This function returns the list of the names input methods. + Only input methods included in default and placed under + $QTDIR/plugins/inputmethods are listed. +*/ +QStringList QInputContextFactory::keys() +{ + QStringList list; +#ifndef QT_NO_COMPONENT + // make sure the manager is created + create_manager(); + + list = manager->featureList(); +#endif //QT_NO_COMPONENT + + return list; +} + + +QStringList QInputContextFactory::languages( const QString &key ) +{ + QStringList result; +#ifndef QT_NO_COMPONENT + // make sure the manager is created + create_manager(); + + QInterfacePtr<QInputContextFactoryInterface> iface; + manager->queryInterface( key, &iface ); + + if ( iface ) + result = iface->languages( key ); +#endif //QT_NO_COMPONENT + + return result; +} + + +QString QInputContextFactory::displayName( const QString &key ) +{ + QString result( "" ); +#ifndef QT_NO_COMPONENT + // make sure the manager is created + create_manager(); + + QInterfacePtr<QInputContextFactoryInterface> iface; + manager->queryInterface( key, &iface ); + + if ( iface ) + result = iface->displayName( key ); +#endif //QT_NO_COMPONENT + + return result; +} + + +QString QInputContextFactory::description( const QString &key ) +{ + QString result( "" ); +#ifndef QT_NO_COMPONENT + // make sure the manager is created + create_manager(); + + QInterfacePtr<QInputContextFactoryInterface> iface; + manager->queryInterface( key, &iface ); + + if ( iface ) + result = iface->description( key ); +#endif //QT_NO_COMPONENT + + return result; +} + +#endif // QT_NO_IM diff --git a/src/inputmethod/qinputcontextfactory.h b/src/inputmethod/qinputcontextfactory.h new file mode 100644 index 0000000..a5422ad --- /dev/null +++ b/src/inputmethod/qinputcontextfactory.h @@ -0,0 +1,59 @@ +/**************************************************************************** +** $Id: qinputcontextfactory.h,v 1.1.1.1 2004/05/11 11:16:49 daisuke Exp $ +** +** Definition of QInputContextFactory class +** +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. +** +** This file is part of the widgets module of the Qt GUI Toolkit. +** +** This file may be distributed under the terms of the Q Public License +** as defined by Trolltech AS of Norway and appearing in the file +** LICENSE.QPL included in the packaging of this file. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition +** licenses may use this file in accordance with the Qt Commercial License +** Agreement provided with the Software. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for +** information about Qt Commercial License Agreements. +** See http://www.trolltech.com/qpl/ for QPL licensing information. +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#ifndef QINPUTCONTEXTFACTORY_H +#define QINPUTCONTEXTFACTORY_H + +#ifndef QT_H +#include "qstringlist.h" +#endif // QT_H + +#ifndef QT_NO_IM + +class QInputContext; +class QWidget; + +class Q_EXPORT QInputContextFactory +{ +public: + static QStringList keys(); + static QInputContext *create( const QString &key, QWidget *widget ); // should be a toplevel widget + static QStringList languages( const QString &key ); + static QString displayName( const QString &key ); + static QString description( const QString &key ); +}; +#endif //QT_NO_IM + +#endif //QINPUTCONTEXTFACTORY_H diff --git a/src/inputmethod/qinputcontextinterface_p.h b/src/inputmethod/qinputcontextinterface_p.h new file mode 100644 index 0000000..f8e1f2d --- /dev/null +++ b/src/inputmethod/qinputcontextinterface_p.h @@ -0,0 +1,87 @@ +/**************************************************************************** +** $Id: qinputcontextinterface_p.h,v 1.2 2004/06/20 18:43:11 daisuke Exp $ +** +** ... +** +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. +** +** This file is part of the widgets module of the Qt GUI Toolkit. +** +** This file may be distributed under the terms of the Q Public License +** as defined by Trolltech AS of Norway and appearing in the file +** LICENSE.QPL included in the packaging of this file. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition +** licenses may use this file in accordance with the Qt Commercial License +** Agreement provided with the Software. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for +** information about Qt Commercial License Agreements. +** See http://www.trolltech.com/qpl/ for QPL licensing information. +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#ifndef QINPUTCONTEXTINTERFACE_P_H +#define QINPUTCONTEXTINTERFACE_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. This header file may +// change from version to version without notice, or even be +// removed. +// +// We mean it. +// +// + +#ifndef QT_H +#include <private/qcom_p.h> +#endif // QT_H + +#ifndef QT_NO_IM +#ifndef QT_NO_COMPONENT + +class QWidget; +class QInputContext; + +// old version interface in qt-x11-immodule-bc-qt3.3.2-20040623.diff: +// {6C2B9EDE-B63C-14c9-A729-3C7643739C4C} +// +// new version interface: +// {a5f5c63d-e044-11d8-9718-000d6077a78d} +// {b0bf3e59-e526-11d8-80da-000d6077a78d} +// {9ef05c7f-0272-11d9-846c-000d6077a78d} + +#ifndef IID_QInputContextFactory +//#define IID_QInputContextFactory QUuid(0x6c2b9ede, 0xb63c, 0x14c9, 0xa7, 0x29, 0x3c, 0x76, 0x43, 0x73, 0x9c, 0x4c) +//#define IID_QInputContextFactory QUuid(0xa5f5c63d, 0xe044, 0x11d8, 0x97, 0x18, 0x00, 0x0d, 0x60, 0x77, 0xa7, 0x8d) +//#define IID_QInputContextFactory QUuid(0xb0bf3e59, 0xe526, 0x11d8, 0x80, 0xda, 0x00, 0x0d, 0x60, 0x77, 0xa7, 0x8d) +#define IID_QInputContextFactory QUuid(0x9ef05c7f, 0x0272, 0x11d9, 0x84, 0x6c, 0x00, 0x0d, 0x60, 0x77, 0xa7, 0x8d) +#endif + +struct Q_EXPORT QInputContextFactoryInterface : public QFeatureListInterface +{ + virtual QInputContext *create( const QString &key ) = 0; + virtual QStringList languages( const QString &key ) = 0; + virtual QString displayName( const QString &key ) = 0; + virtual QString description( const QString &key ) = 0; +}; + +#endif //QT_NO_COMPONENT +#endif //QT_NO_IM + +#endif //QINPUTCONTEXTINTERFACE_P_H diff --git a/src/inputmethod/qinputcontextplugin.cpp b/src/inputmethod/qinputcontextplugin.cpp new file mode 100644 index 0000000..3d16717 --- /dev/null +++ b/src/inputmethod/qinputcontextplugin.cpp @@ -0,0 +1,231 @@ +/**************************************************************************** +** $Id: qinputcontextplugin.cpp,v 1.2 2004/06/20 18:43:11 daisuke Exp $ +** +** Implementation of QInputContextPlugin class +** +** Created : 010920 +** +** Copyright (C) 2001 Trolltech AS. All rights reserved. +** +** This file is part of the widgets module of the Qt GUI Toolkit. +** +** This file may be distributed under the terms of the Q Public License +** as defined by Trolltech AS of Norway and appearing in the file +** LICENSE.QPL included in the packaging of this file. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition +** licenses may use this file in accordance with the Qt Commercial License +** Agreement provided with the Software. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for +** information about Qt Commercial License Agreements. +** See http://www.trolltech.com/qpl/ for QPL licensing information. +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#include "qinputcontextplugin.h" + +#ifndef QT_NO_IM +#ifndef QT_NO_COMPONENT + +#include "qinputcontextinterface_p.h" + +/*! + \class QInputContextPlugin qinputcontextplugin.h + \brief The QInputContextPlugin class provides an abstract base for custom QInputContext plugins. + \reentrant + \ingroup plugins + + The input context plugin is a simple plugin interface that makes it + easy to create custom input contexts that can be loaded dynamically + into applications. + + Writing a input context plugin is achieved by subclassing this + base class, reimplementing the pure virtual functions keys(), + create(), languages(), displayName() description() and exporting + the class with the \c Q_EXPORT_PLUGIN macro. See the \link + plugins-howto.html Qt Plugins documentation \endlink for details. + + \sa QInputContext +*/ + +/*! + \fn QStringList QInputContextPlugin::keys() const + + Returns the list of QInputContext keys this plugin provides. + + These keys are usually the class names of the custom input context + that are implemented in the plugin. + + Return value is the names to identify and specify input methods + for the input method switching mechanism and so on. The names have + to be consistent with QInputContext::identifierName(). The names + have to consist of ASCII characters only. See also + QInputContext::identifierName() for further information. + + \sa create(), displayName(), QInputContext::identifierName() +*/ + +/*! + \fn QInputContext* QInputContextPlugin::create( const QString& key ) + + Creates and returns a QInputContext instance for the input context key \a key. + The input context key is usually the class name of the required input method. + + \sa keys() +*/ + +/*! + \fn QStringList languages( const QString &key ) + + Returns what languages are supported by the QInputContext instance + specified by \a key. + + The languages are expressed as language code (e.g. "zh_CN", + "zh_TW", "zh_HK", "ja", "ko", ...). An input context that suports + multiple languages can return all supported languages as + QStringList. The name has to be consistent with + QInputContextPlugin::language(). + + This information may be used to optimize user interface. + + \sa QInputContext::language() +*/ + +/*! + \fn QString displayName( const QString &key ) + + Returns a user friendly i18n-ized name of the QInputContext + instance specified by \a key. This string may be appeared in a + menu and so on for users. + + There are two different names with different responsibility in the + input method domain. This function returns one of them. Another + name is called 'identifier name' to identify and specify input + methods for the input method switching mechanism and so on. + + Although tr( identifierName ) can provide user friendly i18n-ized + name without this function, the message catalog have to be managed + by Qt in the case. However, some sophisticated input method + framework manages their own message catalogs to provide this + i18n-ized name string. So we need this function rather than just + call tr() for identifier name. + + \sa keys(), QInputContext::identifierName() +*/ + +/*! + \fn QString description( const QString &key ) + + Returns a i18n-ized brief description of the QInputContext + instance specified by \a key. This string may be appeared in some + user interfaces. +*/ + + + +class QInputContextPluginPrivate : public QInputContextFactoryInterface +{ +public: + QInputContextPluginPrivate( QInputContextPlugin *p ) + : plugin( p ) + { + } + + virtual ~QInputContextPluginPrivate(); + + QRESULT queryInterface( const QUuid &iid, QUnknownInterface **iface ); + Q_REFCOUNT; + + QStringList featureList() const; + QInputContext *create( const QString &key ); + QStringList languages( const QString &key ); + QString displayName( const QString &key ); + QString description( const QString &key ); + +private: + QInputContextPlugin *plugin; +}; + +QRESULT QInputContextPluginPrivate::queryInterface( const QUuid &iid, QUnknownInterface **iface ) +{ + *iface = 0; + + if ( iid == IID_QUnknown ) + *iface = this; + else if ( iid == IID_QFeatureList ) + *iface = this; + else if ( iid == IID_QInputContextFactory ) + *iface = this; + else + return QE_NOINTERFACE; + + (*iface)->addRef(); + return QS_OK; +} + +QInputContextPluginPrivate::~QInputContextPluginPrivate() +{ + delete plugin; +} + +QStringList QInputContextPluginPrivate::featureList() const +{ + return plugin->keys(); +} + +QInputContext *QInputContextPluginPrivate::create( const QString &key ) +{ + return plugin->create( key ); +} + +QStringList QInputContextPluginPrivate::languages( const QString &key ) +{ + return plugin->languages( key ); +} + +QString QInputContextPluginPrivate::displayName( const QString &key ) +{ + return plugin->displayName( key ); +} + +QString QInputContextPluginPrivate::description( const QString &key ) +{ + return plugin->description( key ); +} + + +/*! + Constructs a input context plugin. This is invoked automatically by the + \c Q_EXPORT_PLUGIN macro. +*/ +QInputContextPlugin::QInputContextPlugin() + : QGPlugin( d = new QInputContextPluginPrivate( this ) ) +{ +} + +/*! + Destroys the input context plugin. + + You never have to call this explicitly. Qt destroys a plugin + automatically when it is no longer used. +*/ +QInputContextPlugin::~QInputContextPlugin() +{ + // don't delete d, as this is deleted by d +} + +#endif // QT_NO_COMPONENT +#endif // QT_NO_IM diff --git a/src/inputmethod/qinputcontextplugin.h b/src/inputmethod/qinputcontextplugin.h new file mode 100644 index 0000000..5028903 --- /dev/null +++ b/src/inputmethod/qinputcontextplugin.h @@ -0,0 +1,67 @@ +/**************************************************************************** +** $Id: qinputcontextplugin.h,v 1.2 2004/06/20 18:43:11 daisuke Exp $ +** +** Definition of QInputContextPlugin class +** +** Created : 010920 +** +** Copyright (C) 2001 Trolltech AS. All rights reserved. +** +** This file is part of the tools module of the Qt GUI Toolkit. +** +** This file may be distributed under the terms of the Q Public License +** as defined by Trolltech AS of Norway and appearing in the file +** LICENSE.QPL included in the packaging of this file. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition +** licenses may use this file in accordance with the Qt Commercial License +** Agreement provided with the Software. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for +** information about Qt Commercial License Agreements. +** See http://www.trolltech.com/qpl/ for QPL licensing information. +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#ifndef QINPUTCONTEXTPLUGIN_H +#define QINPUTCONTEXTPLUGIN_H + +#ifndef QT_H +#include "qgplugin.h" +#include "qstringlist.h" +#endif // QT_H + +#ifndef QT_NO_IM +class QInputContext; +class QInputContextPluginPrivate; + +class Q_EXPORT QInputContextPlugin : public QGPlugin +{ + Q_OBJECT +public: + QInputContextPlugin(); + ~QInputContextPlugin(); + + virtual QStringList keys() const = 0; + virtual QInputContext *create( const QString &key ) = 0; + virtual QStringList languages( const QString &key ) = 0; + virtual QString displayName( const QString &key ) = 0; + virtual QString description( const QString &key ) = 0; + +private: + QInputContextPluginPrivate *d; +}; +#endif // QT_NO_IM +#endif // QINPUTCONTEXTPLUGIN_H diff --git a/src/inputmethod/qt_inputmethod.pri b/src/inputmethod/qt_inputmethod.pri new file mode 100644 index 0000000..d9ac32a --- /dev/null +++ b/src/inputmethod/qt_inputmethod.pri @@ -0,0 +1,10 @@ +# Qt inputmetod module + +inputmethod { + INPUTMETHOD_P = inputmethod + HEADERS +=$$INPUTMETHOD_H/qinputcontextfactory.h \ + $$INPUTMETHOD_P/qinputcontextinterface_p.h \ + $$INPUTMETHOD_H/qinputcontextplugin.h + SOURCES +=$$INPUTMETHOD_CPP/qinputcontextfactory.cpp \ + $$INPUTMETHOD_CPP/qinputcontextplugin.cpp +} |