Author: yamakenz
Date: Thu Sep 20 18:48:07 2007
New Revision: 4993
Added:
trunk/qt/quiminputcontextplugin-qt4/qhelpermanager.cpp
- copied, changed from r4979, /trunk/qt/immodule-qhelpermanager.cpp
trunk/qt/quiminputcontextplugin-qt4/qhelpermanager.h
- copied, changed from r4979, /trunk/qt/immodule-qhelpermanager.h
trunk/qt/quiminputcontextplugin-qt4/quiminfomanager.cpp
- copied, changed from r4979, /trunk/qt/immodule-quiminfomanager.cpp
trunk/qt/quiminputcontextplugin-qt4/quiminfomanager.h
- copied, changed from r4979, /trunk/qt/immodule-quiminfomanager.h
Modified:
trunk/qt/quiminputcontextplugin-qt4/plugin.cpp
trunk/qt/quiminputcontextplugin-qt4/plugin.h
trunk/qt/quiminputcontextplugin-qt4/quiminputcontext.cpp
trunk/qt/quiminputcontextplugin-qt4/quiminputcontext.h
trunk/qt/quiminputcontextplugin-qt4/quiminputcontextplugin.pro
Log:
* This commit make uim-helper IPC and focus handlings working. Now
toolbars are synced with this immodule
* qt/quiminputcontextplugin-qt4/quiminputcontext.h
- (QUimInputContext::setFocus, QUimInputContext::unsetFocus): Change
from public to protected. Qt4 withdrew the functions from
QInuputContext
- (QUimInputContext::commitString): Change from private to public
- (QUimInputContext::setFocusWidget): Add function decl
- (QUimInputContext::createUimInfo, struct UIMInfo): Removed
* qt/quiminputcontextplugin-qt4/quiminputcontext.cpp
- (uimInfo, QUimInputContext::createUimInfo): Removed
- (QUimInputContext::QUimInputContext): Fix QUimHelperManager
instantiation timing
- (QUimInputContext::setFocusWidget): New function. This func
dispatches the focus handling to setFocus() and unsetFocus()
- (QUimInputContext::setFocus, QUimInputContext::unsetFocus): Add
uim focus handlings (ported from Qt3's immodule)
- (QUimInputContext::reset): Add preedit clearance
- (QUimInputContext::update): Modify debug message
- (QUimInputContext::identifierName): Modify to "uim-<im>" to "uim"
- (QUimInputContext::pushbackPreeditString): Cleanup
* qt/quiminputcontextplugin-qt4/qhelpermanager.h
- Re-copied from qt/immodule-qhelpermanager.h
- (class QUimHelperManager): Change base class to public
- (QUimHelperManager::QUimHelperManager): Remove 2nd arg to adapt to Qt4
* qt/quiminputcontextplugin-qt4/qhelpermanager.cpp
- Re-copied from qt/immodule-qhelpermanager.cpp
- (contextList, QUimHelperManager::QUimHelperManager,
QUimHelperManager::slotStdinActivated,
QUimHelperManager::parseHelperStr,
QUimHelperManager::parseHelperStrImChange,
QUimHelperManager::sendImList,
QUimHelperManager::send_im_change_whole_desktop,
QUimHelperManager::update_prop_list_cb,
QUimHelperManager::update_prop_label_cb): Adapt to Qt4
* qt/quiminputcontextplugin-qt4/plugin.h
- Port updates of qt/immodule-plugin.h
- (UimInputContextPlugin::getQUimInfoManager): New function decl
- (UimInputContextPlugin::infoManager): New variable decl
* qt/quiminputcontextplugin-qt4/plugin.cpp
- Port updates of qt/immodule-plugin.cpp
- Include quiminfomanager.h
- (UimInputContextPlugin::infoManager): New variable
- (UimInputContextPlugin::getQUimInfoManager): New function
- (UimInputContextPlugin::uimInit, UimInputContextPlugin::uimQuit):
Add QUimInfoManager handlings
* qt/quiminputcontextplugin-qt4/quiminfomanager.h
- Copied from qt/immodule-quiminfomanager.h
- Adapt to Qt4
* qt/quiminputcontextplugin-qt4/quiminfomanager.cpp
- Copied from qt/immodule-quiminfomanager.cpp
- Adapt to Qt4
* qt/quiminputcontextplugin-qt4/quiminputcontextplugin.pro
- Add quiminfomanager.{h,cpp}
Modified: trunk/qt/quiminputcontextplugin-qt4/plugin.cpp
==============================================================================
--- trunk/qt/quiminputcontextplugin-qt4/plugin.cpp (original)
+++ trunk/qt/quiminputcontextplugin-qt4/plugin.cpp Thu Sep 20 18:48:07 2007
@@ -7,10 +7,14 @@
#include <uim/uim.h>
+#include "quiminfomanager.h"
#include "quiminputcontext_with_slave.h"
#define UIM_QT_LIST_SUBIM_AS_QTIM 0
+QUimInfoManager *UimInputContextPlugin::infoManager = NULL;
+
+
UimInputContextPlugin::UimInputContextPlugin()
{
uimReady = false;
@@ -61,10 +65,20 @@
return displayName( key ) + ": an input method provided via the uim input
method framework";
}
+QUimInfoManager *
+UimInputContextPlugin::getQUimInfoManager()
+{
+ return infoManager;
+}
+
void UimInputContextPlugin::uimInit()
{
- if ( !uim_init() )
+ if ( !uim_init() ) {
+ if (!infoManager)
+ infoManager = new QUimInfoManager();
+
uimReady = true;
+ }
}
void UimInputContextPlugin::uimQuit()
@@ -72,6 +86,7 @@
if ( uimReady )
{
uim_quit();
+ delete infoManager;
uimReady = false;
}
}
Modified: trunk/qt/quiminputcontextplugin-qt4/plugin.h
==============================================================================
--- trunk/qt/quiminputcontextplugin-qt4/plugin.h (original)
+++ trunk/qt/quiminputcontextplugin-qt4/plugin.h Thu Sep 20 18:48:07 2007
@@ -1,6 +1,8 @@
#include <qinputcontextplugin.h>
#include <qstringlist.h>
+class QUimInfoManager;
+
class UimInputContextPlugin : public QInputContextPlugin
{
Q_OBJECT
@@ -14,6 +16,8 @@
QString displayName( const QString &key );
QString description( const QString &key );
+ static QUimInfoManager *getQUimInfoManager();
+
protected:
void uimInit();
void uimQuit();
@@ -21,6 +25,7 @@
QStringList createImList() const;
QStringList createLanguageList( const QString &key ) const;
+ static QUimInfoManager *infoManager;
bool uimReady;
};
Copied: trunk/qt/quiminputcontextplugin-qt4/qhelpermanager.cpp (from r4979,
/trunk/qt/immodule-qhelpermanager.cpp)
==============================================================================
--- /trunk/qt/immodule-qhelpermanager.cpp (original)
+++ trunk/qt/quiminputcontextplugin-qt4/qhelpermanager.cpp Thu Sep 20
18:48:07 2007
@@ -30,11 +30,13 @@
SUCH DAMAGE.
*/
-#include <config.h>
+
+//#include <config.h>
#include <qsocketnotifier.h>
#include <qstring.h>
#include <qstringlist.h>
+#include <Q3PtrList>
#include <qtextcodec.h>
#include "uim/uim.h"
@@ -42,10 +44,10 @@
#include "uim/uim-helper.h"
#include "uim/uim-im-switcher.h"
-#include "immodule-qhelpermanager.h"
-#include "immodule-quiminputcontext.h"
-#include "immodule-quiminfomanager.h"
-#include "immodule-plugin.h"
+#include "qhelpermanager.h"
+#include "quiminputcontext.h"
+#include "quiminfomanager.h"
+#include "plugin.h"
static int im_uim_fd = 0;
static QSocketNotifier *notifier = NULL;
@@ -53,10 +55,10 @@
extern QUimInputContext *focusedInputContext;
extern bool disableFocusedContext;
-extern QPtrList<QUimInputContext> contextList;
+extern Q3PtrList<QUimInputContext> contextList;
-QUimHelperManager::QUimHelperManager( QObject *parent, const char *name )
- : QObject( parent, name )
+QUimHelperManager::QUimHelperManager( QObject *parent )
+ : QObject( parent )
{
notifier = NULL;
im_uim_fd = -1;
@@ -88,7 +90,7 @@
QString tmp;
uim_helper_read_proc( im_uim_fd );
- while ( ( tmp = QString::fromUtf8( uim_helper_get_message() ) ) )
+ while ( !( tmp = QString::fromUtf8( uim_helper_get_message() ) ).isEmpty()
)
parseHelperStr( tmp );
}
@@ -102,8 +104,9 @@
uim_prop_label_update( focusedInputContext->uimContext() );
else if ( str.startsWith( "prop_activate" ) )
{
- QStringList lines = QStringList::split( "\n", str );
- uim_prop_activate( focusedInputContext->uimContext(), ( const
char* ) lines[ 1 ] );
+ QStringList list = str.split( "\n" );
+ uim_prop_activate( focusedInputContext->uimContext(),
+ list[ 1 ].toUtf8() );
}
else if ( str.startsWith( "im_list_get" ) )
{
@@ -111,13 +114,13 @@
}
else if ( str.startsWith( "commit_string" ) )
{
- QStringList lines = QStringList::split( "\n", str );
+ QStringList lines = str.split( "\n" );
if ( !lines.isEmpty() && !lines[ 1 ].isEmpty() ) {
QString commit_str = QString::null;
if ( lines[ 1 ].startsWith( "charset" ) ) {
/* get charset */
- QString charset = QStringList::split( "=", lines[ 1 ] ) [
1 ];
+ QString charset = lines[ 1 ].split( "=" ) [ 1 ];
/* convert to unicode */
QTextCodec *codec = QTextCodec::codecForName( charset );
@@ -150,13 +153,15 @@
{
// for custom api
QUimInputContext * cc;
- QStringList list = QStringList::split( "\n", str );
+ QStringList list = str.split( "\n" );
if ( !list.isEmpty() && !list[ 0 ].isEmpty() &&
!list[ 1 ].isEmpty() && !list[ 2 ].isEmpty() )
{
for ( cc = contextList.first(); cc; cc = contextList.next() )
{
- uim_prop_update_custom( cc->uimContext(), list[ 1 ], list[ 2 ]
);
+ uim_prop_update_custom( cc->uimContext(),
+ list[ 1 ].toUtf8(),
+ list[ 2 ].toUtf8() );
break; /* all custom variables are global */
}
}
@@ -174,7 +179,7 @@
void QUimHelperManager::parseHelperStrImChange( const QString &str )
{
QUimInputContext * cc;
- QStringList list = QStringList::split( "\n", str );
+ QStringList list = str.split( "\n" );
QString im_name = list[ 1 ];
QString im_name_sym = "'" + im_name;
@@ -182,7 +187,8 @@
{
if ( focusedInputContext )
{
- uim_switch_im( focusedInputContext->uimContext(), ( const char* )
im_name );
+ uim_switch_im( focusedInputContext->uimContext(),
+ im_name.toUtf8() );
uim_prop_list_update( focusedInputContext->uimContext() );
focusedInputContext->readIMConf();
}
@@ -191,11 +197,11 @@
{
for ( cc = contextList.first(); cc; cc = contextList.next() )
{
- uim_switch_im( cc->uimContext(), ( const char* ) im_name );
+ uim_switch_im( cc->uimContext(), im_name.toUtf8() );
cc->readIMConf();
uim_prop_update_custom( cc->uimContext(),
"custom-preserved-default-im-name",
- ( const char* ) im_name_sym );
+ im_name_sym.toUtf8() );
}
}
else if ( str.startsWith( "im_change_this_application_only" ) )
@@ -204,11 +210,11 @@
{
for ( cc = contextList.first(); cc; cc = contextList.next() )
{
- uim_switch_im( cc->uimContext(), ( const char* ) im_name );
+ uim_switch_im( cc->uimContext(), im_name.toUtf8() );
cc->readIMConf();
uim_prop_update_custom( cc->uimContext(),
"custom-preserved-default-im-name",
- ( const char* ) im_name_sym );
+ im_name_sym.toUtf8() );
}
}
}
@@ -223,16 +229,16 @@
const char* current_im_name = uim_get_current_im_name(
focusedInputContext->uimContext() );
QUimInfoManager *infoManager = UimInputContextPlugin::getQUimInfoManager();
- QValueList<uimInfo> info = infoManager->getUimInfo();
- QValueList<uimInfo>::iterator it;
+ Q3ValueList<uimInfo> info = infoManager->getUimInfo();
+ Q3ValueList<uimInfo>::iterator it;
for ( it = info.begin(); it != info.end(); ++it )
{
QString leafstr;
leafstr.sprintf( "%s\t%s\t%s\t",
- (const char *)( *it ).name,
- uim_get_language_name_from_locale( ( *it ).lang ),
- (const char *)( *it).short_desc );
+ ( const char * )( *it ).name.toUtf8(),
+ uim_get_language_name_from_locale( ( *it
).lang.toUtf8() ),
+ ( const char * )( *it).short_desc.toUtf8() );
if ( QString::compare( ( *it ).name, current_im_name ) == 0 )
leafstr.append( "selected" );
@@ -242,7 +248,7 @@
msg += leafstr;
}
- uim_helper_send_message( im_uim_fd, ( const char* ) msg.utf8() );
+ uim_helper_send_message( im_uim_fd, ( const char* ) msg.toUtf8() );
}
void QUimHelperManager::send_im_change_whole_desktop( const char *name )
@@ -250,7 +256,7 @@
QString msg;
msg.sprintf("im_change_whole_desktop\n%s\n", name);
- uim_helper_send_message( im_uim_fd, ( const char* ) msg );
+ uim_helper_send_message( im_uim_fd, ( const char* ) msg.toUtf8() );
}
void QUimHelperManager::helper_disconnect_cb()
@@ -267,13 +273,14 @@
void QUimHelperManager::update_prop_list_cb( void *ptr, const char *str )
{
QUimInputContext *ic = ( QUimInputContext* ) ptr;
+
if ( ic != focusedInputContext || disableFocusedContext )
return;
QString msg = "prop_list_update\ncharset=UTF-8\n";
msg += QString::fromUtf8( str );
- uim_helper_send_message( im_uim_fd, ( const char* ) msg.utf8() );
+ uim_helper_send_message( im_uim_fd, ( const char* ) msg.toUtf8() );
}
void QUimHelperManager::update_prop_label_cb( void *ptr, const char *str )
@@ -285,7 +292,5 @@
QString msg = "prop_label_update\ncharset=UTF-8\n";
msg += QString::fromUtf8( str );
- uim_helper_send_message( im_uim_fd, ( const char* ) msg.utf8() );
+ uim_helper_send_message( im_uim_fd, ( const char* ) msg.toUtf8() );
}
-
-#include "immodule-qhelpermanager.moc"
Copied: trunk/qt/quiminputcontextplugin-qt4/qhelpermanager.h (from r4979,
/trunk/qt/immodule-qhelpermanager.h)
==============================================================================
--- /trunk/qt/immodule-qhelpermanager.h (original)
+++ trunk/qt/quiminputcontextplugin-qt4/qhelpermanager.h Thu Sep 20
18:48:07 2007
@@ -38,12 +38,12 @@
class QString;
class QSocketNotifier;
-class QUimHelperManager : QObject
+class QUimHelperManager : public QObject
{
Q_OBJECT
public:
- QUimHelperManager( QObject * parent = 0, const char * name = 0 );
+ QUimHelperManager( QObject * parent = 0 );
~QUimHelperManager();
void checkHelperConnection();
Copied: trunk/qt/quiminputcontextplugin-qt4/quiminfomanager.cpp (from r4979,
/trunk/qt/immodule-quiminfomanager.cpp)
==============================================================================
--- /trunk/qt/immodule-quiminfomanager.cpp (original)
+++ trunk/qt/quiminputcontextplugin-qt4/quiminfomanager.cpp Thu Sep 20
18:48:07 2007
@@ -30,13 +30,14 @@
SUCH DAMAGE.
*/
-#include <config.h>
-#include <qvaluelist.h>
+//#include <config.h>
-#include "uim.h"
+#include <Q3ValueList>
-#include "immodule-quiminfomanager.h"
+#include "uim/uim.h"
+
+#include "quiminfomanager.h"
QUimInfoManager::QUimInfoManager()
@@ -48,7 +49,7 @@
{
}
-QValueList<uimInfo>
+Q3ValueList<uimInfo>
QUimInfoManager::getUimInfo()
{
return info;
Copied: trunk/qt/quiminputcontextplugin-qt4/quiminfomanager.h (from r4979,
/trunk/qt/immodule-quiminfomanager.h)
==============================================================================
--- /trunk/qt/immodule-quiminfomanager.h (original)
+++ trunk/qt/quiminputcontextplugin-qt4/quiminfomanager.h Thu Sep 20
18:48:07 2007
@@ -33,7 +33,7 @@
#ifndef _IMMODULE_QUIM_INFO_MANAGER_H_
#define _IMMODULE_QUIM_INFO_MANAGER_H_
-#include <qptrlist.h>
+#include <Q3ValueList>
struct uimInfo
{
@@ -49,11 +49,11 @@
~QUimInfoManager();
void initUimInfo();
- QValueList<uimInfo> getUimInfo();
+ Q3ValueList<uimInfo> getUimInfo();
QString imLang( const QString &imname );
private:
- QValueList<uimInfo> info;
+ Q3ValueList<uimInfo> info;
};
#endif /* _IMMODULE_QUIM_INFO_MANAGER_H_ */
Modified: trunk/qt/quiminputcontextplugin-qt4/quiminputcontext.cpp
==============================================================================
--- trunk/qt/quiminputcontextplugin-qt4/quiminputcontext.cpp (original)
+++ trunk/qt/quiminputcontextplugin-qt4/quiminputcontext.cpp Thu Sep 20
18:48:07 2007
@@ -28,7 +28,6 @@
bool disableFocusedContext = false;
QList<QUimInputContext*> contextList;
-QList<UIMInfo> uimInfo;
QUimHelperManager * QUimInputContext::m_HelperManager = 0L;
@@ -43,6 +42,10 @@
{
contextList.append( this );
+ // must be initialized before createUimContext() call
+ if ( !m_HelperManager )
+ m_HelperManager = new QUimHelperManager();
+
if ( imname )
m_uc = createUimContext( imname );
@@ -54,11 +57,6 @@
cwin->setQUimInputContext( this );
cwin->hide();
- if ( !m_HelperManager )
- m_HelperManager = new QUimHelperManager();
-
- createUimInfo();
-
// read configuration
readIMConf();
@@ -230,6 +228,17 @@
return TRUE;
}
+void QUimInputContext::setFocusWidget( QWidget *w )
+{
+ qDebug( "QUimInputContext::setFocusWidget() w = %p", w );
+
+ if ( w )
+ setFocus();
+ else
+ unsetFocus();
+}
+
+// Qt4 does not have QInputContext::setFocus()
void QUimInputContext::setFocus()
{
qDebug( "QUimInputContext: %p->setFocus(), focusWidget()=%p",
@@ -246,13 +255,18 @@
uim_helper_client_focus_in( m_uc );
uim_prop_list_update( m_uc );
uim_prop_label_update( m_uc );
+
+ uim_focus_in_context( m_uc );
}
+// Qt4 does not have QInputContext::unsetFocus()
void QUimInputContext::unsetFocus()
{
qDebug( "QUimInputContext: %p->unsetFocus(), focusWidget()=%p",
this, focusWidget() );
+ uim_focus_out_context( m_uc );
+
// Don't reset Japanese input context here. Japanese input context
// sometimes contains a whole paragraph and has minutes of
// lifetime different to ephemeral one in other languages. The
@@ -302,14 +316,16 @@
candwinIsActive = FALSE;
cwin->hide();
uim_reset_context( m_uc );
+ clearPreedit();
+ updatePreedit();
}
void QUimInputContext::update()
{
- qDebug( "QUimInputContext::update()" );
-
QWidget *w = focusWidget();
+ qDebug( "QUimInputContext::update() w = %p", w );
+
if ( w ) {
QRect mf = w->inputMethodQuery( Qt::ImMicroFocus ).toRect();
QPoint p = w->mapToGlobal( mf.topLeft() );
@@ -319,7 +335,7 @@
QString QUimInputContext::identifierName()
{
- return ( QString( "uim-" ) + m_imname );
+ return QString( "uim" );
}
QString QUimInputContext::language()
@@ -426,7 +442,7 @@
void QUimInputContext::pushbackPreeditString( int attr, const QString& str )
{
PreeditSegment * ps = new PreeditSegment( attr, str );
- psegs.push_back( ps );
+ psegs.append( ps );
}
void QUimInputContext::updatePreedit()
@@ -624,30 +640,6 @@
{
cwin->deactivateCandwin();
candwinIsActive = false;
-}
-
-void QUimInputContext::createUimInfo()
-{
- if ( !uimInfo.isEmpty() )
- return ;
-
- uim_context tmp_uc = uim_create_context( NULL, "UTF-8", NULL, NULL,
uim_iconv, NULL );
- struct UIMInfo ui;
- int nr = uim_get_nr_im( tmp_uc );
- for ( int i = 0; i < nr; i++ )
- {
- ui.name = uim_get_im_name( tmp_uc, i );
- /* return value of uim_get_im_language() is an ISO 639-1
- compatible language code such as "ja". Since it is unfriendly
- for human reading, we convert it into friendly one by
- uim_get_language_name_from_locale() here */
- const char *langcode = uim_get_im_language( tmp_uc, i );
- ui.lang = uim_get_language_name_from_locale( langcode );
- ui.short_desc = uim_get_im_short_desc( tmp_uc, i );
-
- uimInfo.append( ui );
- }
- uim_release_context( tmp_uc );
}
void QUimInputContext::readIMConf()
Modified: trunk/qt/quiminputcontextplugin-qt4/quiminputcontext.h
==============================================================================
--- trunk/qt/quiminputcontextplugin-qt4/quiminputcontext.h (original)
+++ trunk/qt/quiminputcontextplugin-qt4/quiminputcontext.h Thu Sep 20
18:48:07 2007
@@ -40,10 +40,9 @@
virtual bool filterEvent( const QEvent *event );
virtual void reset();
virtual void update();
- virtual void setFocus();
- virtual void unsetFocus();
virtual void mouseHandler( int x, QMouseEvent *event );
virtual bool isComposing() const { return m_isComposing; }
+ virtual void setFocusWidget( QWidget *w );
virtual bool isPreeditRelocationEnabled();
@@ -51,13 +50,16 @@
static QUimInputContext *focusedIC();
+ void commitString( const QString& str );
+
void readIMConf();
protected:
uim_context createUimContext( const char *imname );
virtual bool isPreeditPreservationEnabled(); // not a QInputContext func
+ virtual void setFocus(); // not a QInputContext func
+ virtual void unsetFocus(); // not a QInputContext func
- void createUimInfo();
private:
void setMicroFocus( int x, int y, int w, int h, QFont *f = 0 );
QString getPreeditString();
@@ -77,7 +79,6 @@
static void cand_shift_page_cb( void* ptr, int index );
static void cand_deactivate_cb( void *ptr );
/* real functions for callbacks (correspond order) */
- void commitString( const QString& str );
//preedit
void clearPreedit();
void pushbackPreeditString( int attr, const QString& str );
@@ -98,13 +99,6 @@
CandidateWindow *cwin;
static QUimHelperManager *m_HelperManager;
-};
-
-struct UIMInfo
-{
- const char *lang;
- const char *name;
- const char *short_desc;
};
#endif /* Not def: _QUIMINPUT_CONTEXT_H_ */
Modified: trunk/qt/quiminputcontextplugin-qt4/quiminputcontextplugin.pro
==============================================================================
--- trunk/qt/quiminputcontextplugin-qt4/quiminputcontextplugin.pro
(original)
+++ trunk/qt/quiminputcontextplugin-qt4/quiminputcontextplugin.pro Thu Sep
20 18:48:07 2007
@@ -14,12 +14,14 @@
quiminputcontext.h \
plugin.h \
candidatewindow.h \
- subwindow.h
+ subwindow.h \
+ quiminfomanager.h
SOURCES += plugin.cpp \
qhelpermanager.cpp \
quiminputcontext.cpp \
candidatewindow.cpp \
- subwindow.cpp
+ subwindow.cpp \
+ quiminfomanager.cpp
TARGET = uiminputcontextplugin