Author: yamakenz
Date: Thu Sep 20 14:32:42 2007
New Revision: 4991

Added:
   trunk/qt/quiminputcontextplugin-qt4/candidatewindow.cpp
      - copied, changed from r4979, /trunk/qt/immodule-candidatewindow.cpp
   trunk/qt/quiminputcontextplugin-qt4/candidatewindow.h
      - copied, changed from r4979, /trunk/qt/immodule-candidatewindow.h
   trunk/qt/quiminputcontextplugin-qt4/subwindow.cpp
      - copied, changed from r4979, /trunk/qt/immodule-subwindow.cpp
   trunk/qt/quiminputcontextplugin-qt4/subwindow.h
      - copied, changed from r4979, /trunk/qt/immodule-subwindow.h
Modified:
   trunk/qt/quiminputcontextplugin-qt4/quiminputcontext.cpp
   trunk/qt/quiminputcontextplugin-qt4/quiminputcontext.h
   trunk/qt/quiminputcontextplugin-qt4/quiminputcontextplugin.pro

Log:
* This commit replace the obsolete candidate window with the latest
  Qt3 immodule's. And the broken candidate window positioning has been
  fixed with the Qt4's QInputContext::update() and
  QWidget::inputMethodQuery(Qt::ImMicroFocus)

* qt/quiminputcontextplugin-qt4/quiminputcontext.h
  - (QUimInputContext::update): New function decl
  - (QUimInputContext::setMicroFocus): Changed to non-virtual
    private. Qt4 does not have QInputContext::setMicroFocus()
  - (QUimInputContext::preeditString): Removed
* qt/quiminputcontextplugin-qt4/quiminputcontext.cpp
  - (QUimInputContext::update): New function
  - (QUimInputContext::reset, QUimInputContext::commitString): Follow
    the removal of preeditString
  - (QUimInputContext::updatePreedit):
    * Ditto
    * Simplify
    * Add microfocus handling required for Qt4
  - (QUimInputContext::setMicroFocus): Comment in debug message
* qt/quiminputcontextplugin-qt4/candidatewindow.h
  - Re-copied from updated qt/immodule-candidatewindow.h
  - (class CandidateWindow): Change base class QVBox to Q3VBox
  - (CandidateWindow::setCandidates,
    CandidateWindow::slotCandidateSelected,
    CandidateWindow::slotHookSubwindow, stores): Adapt to Qt4
  - (class CandidateListView): Change base class QListView to Q3ListView
  - (CandidateListView::CandidateListView,
    CandidateListView::itemIndex, CandidateListView::itemAtIndex):
    Adapt to Qt4
* qt/quiminputcontextplugin-qt4/candidatewindow.cpp
  - Re-copied from updated qt/immodule-candidatewindow.cpp
  - Exclude immodule-candidatewindow.moc
  - (candidateFlag, CandidateWindow::CandidateWindow,
    CandidateWindow::~CandidateWindow,
    CandidateWindow::clearCandidates, CandidateWindow::setCandidates,
    CandidateWindow::setPage, CandidateWindow::setIndexInPage,
    CandidateWindow::slotCandidateSelected,
    CandidateWindow::slotHookSubwindow, CandidateListView::sizeHint):
    Adapt to Qt4
* qt/quiminputcontextplugin-qt4/subwindow.h
  - Copied from qt/immodule-subwindow.h
  - (class SubWindow): Change base class QVBox to Q3VBox
* qt/quiminputcontextplugin-qt4/subwindow.cpp
  - Copied from qt/immodule-subwindow.cpp
  - Exclude immodule-subwindow.moc
  - (subwindowFlag, SubWindow::SubWindow): Adapt to Qt4
* qt/quiminputcontextplugin-qt4/quiminputcontextplugin.pro
  - Add subwindow.{h,cpp}


Copied: trunk/qt/quiminputcontextplugin-qt4/candidatewindow.cpp (from r4979, 
/trunk/qt/immodule-candidatewindow.cpp)
==============================================================================
--- /trunk/qt/immodule-candidatewindow.cpp      (original)
+++ trunk/qt/quiminputcontextplugin-qt4/candidatewindow.cpp     Thu Sep 20 
14:32:42 2007
@@ -30,19 +30,21 @@
 SUCH DAMAGE.
 
 */
-#include <config.h>
+
+//#include <config.h>
 
 #include <qapplication.h>
+#include <QDesktopWidget>
 #include <qlabel.h>
-#include <qheader.h>
+#include <Q3Header>
 #include <qfontmetrics.h>
 #include <qevent.h>
 
 #include "uim/uim.h"
 
-#include "immodule-candidatewindow.h"
-#include "immodule-quiminputcontext.h"
-#include "immodule-subwindow.h"
+#include "candidatewindow.h"
+#include "subwindow.h"
+#include "quiminputcontext.h"
 
 static const int MIN_CAND_WIDTH = 80;
 
@@ -50,18 +52,17 @@
 static const int CANDIDATE_COLUMN = 1;
 static const int ANNOTATION_COLUMN = 2;
 
-const Qt::WFlags candidateFlag = ( Qt::WType_TopLevel
-                                   | Qt::WStyle_Customize
-                                   | Qt::WStyle_StaysOnTop
-                                   | Qt::WStyle_NoBorder
-                                   | Qt::WStyle_Tool
+const Qt::WFlags candidateFlag = ( Qt::Window
+                                   | Qt::WindowStaysOnTopHint
+                                   | Qt::FramelessWindowHint
+                                   | Qt::Tool
 #if defined(Q_WS_X11)
-                                   | Qt::WX11BypassWM
+                                   | Qt::X11BypassWindowManagerHint
 #endif
                                  );
 
 CandidateWindow::CandidateWindow( QWidget *parent, const char * name )
-        : QVBox( parent, name, candidateFlag )
+        : Q3VBox( parent, name, candidateFlag )
 {
     setFrameStyle( Raised | NoFrame );
 
@@ -70,19 +71,19 @@
     //setup CandidateList
     cList = new CandidateListView( this, "candidateListView" );
     cList->setSorting( -1 );
-    cList->setSelectionMode( QListView::Single );
+    cList->setSelectionMode( Q3ListView::Single );
     cList->addColumn( "0" );
-    cList->setColumnWidthMode( 0, QListView::Maximum );
+    cList->setColumnWidthMode( 0, Q3ListView::Maximum );
     cList->addColumn( "1" );
-    cList->setColumnWidthMode( 1, QListView::Maximum );
+    cList->setColumnWidthMode( 1, Q3ListView::Maximum );
     cList->header() ->hide();
-    cList->setVScrollBarMode( QScrollView::AlwaysOff );
-    cList->setHScrollBarMode( QScrollView::AlwaysOff );
+    cList->setVScrollBarMode( Q3ScrollView::AlwaysOff );
+    cList->setHScrollBarMode( Q3ScrollView::AlwaysOff );
     cList->setAllColumnsShowFocus( true );
-    QObject::connect( cList, SIGNAL( clicked( QListViewItem * ) ),
-                      this , SLOT( slotCandidateSelected( QListViewItem * ) ) 
);
-    QObject::connect( cList, SIGNAL( selectionChanged( QListViewItem * ) ),
-                      this , SLOT( slotHookSubwindow( QListViewItem * ) ) );
+    QObject::connect( cList, SIGNAL( clicked( Q3ListViewItem * ) ),
+                      this , SLOT( slotCandidateSelected( Q3ListViewItem * ) ) 
);
+    QObject::connect( cList, SIGNAL( selectionChanged( Q3ListViewItem * ) ),
+                      this , SLOT( slotHookSubwindow( Q3ListViewItem * ) ) );
 
     //setup NumberLabel
     numLabel = new QLabel( this, "candidateLabel" );
@@ -104,7 +105,7 @@
     if ( !stores.isEmpty() )
     {
         // clear stored candidate datas
-        for ( unsigned int i = 0; i < stores.size(); i++ )
+        for ( int i = 0; i < stores.size(); i++ )
             uim_candidate_free( stores[ i ] );
         stores.clear();
     }
@@ -142,13 +143,13 @@
     nrCandidates = 0;
 
     // clear stored candidate datas
-    for ( unsigned int i = 0; i < stores.size(); i++ )
+    for ( int i = 0; i < stores.size(); i++ )
         uim_candidate_free( stores[ i ] );
     stores.clear();
 }
 
 
-void CandidateWindow::setCandidates( int dl, const QValueList<uim_candidate> 
&candidates )
+void CandidateWindow::setCandidates( int dl, const Q3ValueList<uim_candidate> 
&candidates )
 {
 #ifdef ENABLE_DEBUG
     qDebug( "setCandidates" );
@@ -243,7 +244,7 @@
         QString annotationString = "";
 
         // insert new item to the candidate list
-        new QListViewItem( cList, headString, candString, annotationString );
+        new Q3ListViewItem( cList, headString, candString, annotationString );
     }
 
     // set index
@@ -297,14 +298,14 @@
 
 void CandidateWindow::setIndexInPage( int index )
 {
-    QListViewItem * selectedItem = cList->itemAtIndex( index );
+    Q3ListViewItem * selectedItem = cList->itemAtIndex( index );
     cList->setSelected( selectedItem, true );
 
     slotCandidateSelected( selectedItem );
 }
 
 
-void CandidateWindow::slotCandidateSelected( QListViewItem * item )
+void CandidateWindow::slotCandidateSelected( Q3ListViewItem * item )
 {
     candidateIndex = ( pageIndex * displayLimit ) + cList->itemIndex( item );
     if ( ic && ic->uimContext() )
@@ -374,7 +375,7 @@
     numLabel->setText( indexString );
 }
 
-void CandidateWindow::slotHookSubwindow( QListViewItem * item )
+void CandidateWindow::slotHookSubwindow( Q3ListViewItem * item )
 {
     // cancel previous hook
     subWin->cancelHook();
@@ -418,14 +419,14 @@
     
     int width = 0;
     int height = 0;
-    QListViewItem *item = firstChild();
+    Q3ListViewItem *item = firstChild();
     if ( item )
         height = item->height() * childCount() + 3;
     
     // 2004-08-02 Kazuki Ohta <[EMAIL PROTECTED]>
     // FIXME!:
     //    There may be more proper way. Now width is adjusted by indeterminal 
3 spaces.
-    unsigned int maxCharIndex = 0, maxCharCount = 0;
+    int maxCharIndex = 0, maxCharCount = 0;
     for ( int i = 0; i < childCount(); i++ )
     {
         if ( maxCharCount < itemAtIndex( i )->text( 1 ).length() )
@@ -441,5 +442,3 @@
     
     return QSize( width, height );
 }
-
-#include "immodule-candidatewindow.moc"

Copied: trunk/qt/quiminputcontextplugin-qt4/candidatewindow.h (from r4979, 
/trunk/qt/immodule-candidatewindow.h)
==============================================================================
--- /trunk/qt/immodule-candidatewindow.h        (original)
+++ trunk/qt/quiminputcontextplugin-qt4/candidatewindow.h       Thu Sep 20 
14:32:42 2007
@@ -35,9 +35,9 @@
 
 #include <uim/uim.h>
 
-#include <qvbox.h>
-#include <qlistview.h>
-#include <qvaluelist.h>
+#include <Q3VBox>
+#include <Q3ListView>
+#include <Q3ValueList>
 #include <qevent.h>
 #include <qfontmetrics.h>
 
@@ -47,7 +47,7 @@
 class CandidateListView;
 class SubWindow;
 
-class CandidateWindow : public QVBox
+class CandidateWindow : public Q3VBox
 {
     Q_OBJECT
 
@@ -63,7 +63,7 @@
     void setAlwaysLeftPosition( bool left ) { isAlwaysLeft = left; }
     bool isAlwaysLeftPosition() const { return isAlwaysLeft; }
 
-    void setCandidates( int displayLimit, const QValueList<uim_candidate> 
&candidates );
+    void setCandidates( int displayLimit, const Q3ValueList<uim_candidate> 
&candidates );
     void setPage( int page );
     void shiftPage( bool forward );
     void layoutWindow( int x, int y, int w, int h );
@@ -75,8 +75,8 @@
     QSize sizeHint(void) const;
 
 protected slots:
-    void slotCandidateSelected( QListViewItem* );
-    void slotHookSubwindow( QListViewItem* );
+    void slotCandidateSelected( Q3ListViewItem* );
+    void slotHookSubwindow( Q3ListViewItem* );
 
 protected:
     void updateLabel();
@@ -90,7 +90,7 @@
     CandidateListView *cList;
     QLabel *numLabel;
 
-    QValueList<uim_candidate> stores;
+    Q3ValueList<uim_candidate> stores;
 
     int nrCandidates;
     int candidateIndex;
@@ -103,15 +103,15 @@
 };
 
 
-class CandidateListView : public QListView
+class CandidateListView : public Q3ListView
 {
     Q_OBJECT
 
 public:
-    CandidateListView( QWidget *parent, const char *name = 0, WFlags f = 0 ) : 
QListView( parent, name, f ) {}
+    CandidateListView( QWidget *parent, const char *name = 0, Qt::WFlags f = 0 
) : Q3ListView( parent, name, f ) {}
     ~CandidateListView() {}
 
-    int itemIndex( const QListViewItem *item ) const
+    int itemIndex( const Q3ListViewItem *item ) const
     {
         if ( !item )
             return -1;
@@ -119,7 +119,7 @@
             return 0;
         else
         {
-            QListViewItemIterator it( firstChild() );
+            Q3ListViewItemIterator it( firstChild() );
             uint j = 0;
             for ( ; it.current() && it.current() != item; ++it, ++j )
                 ;
@@ -129,12 +129,12 @@
         }
     }
 
-    QListViewItem* itemAtIndex( int index ) const
+    Q3ListViewItem* itemAtIndex( int index ) const
     {
         if ( index < 0 )
             return 0;
         int j = 0;
-        for ( QListViewItemIterator it = firstChild(); it.current(); ++it )
+        for ( Q3ListViewItemIterator it = firstChild(); it.current(); ++it )
         {
             if ( j == index )
                 return it.current();

Modified: trunk/qt/quiminputcontextplugin-qt4/quiminputcontext.cpp
==============================================================================
--- trunk/qt/quiminputcontextplugin-qt4/quiminputcontext.cpp    (original)
+++ trunk/qt/quiminputcontextplugin-qt4/quiminputcontext.cpp    Thu Sep 20 
14:32:42 2007
@@ -275,7 +275,7 @@
 
 void QUimInputContext::setMicroFocus( int x, int y, int w, int h, QFont *f )
 {
-    // qDebug("IC setMicroFocus (%d, %d), (%d, %d)", x, y, w, h);
+    qDebug("IC setMicroFocus (%d, %d), (%d, %d)", x, y, w, h);
     cwin->layoutWindow( x, y, w, h );
 }
 
@@ -299,12 +299,24 @@
 {
     qDebug( "QUimInputContext::reset()" );
 
-    preeditString = QString::null;
     candwinIsActive = FALSE;
     cwin->hide();
     uim_reset_context( m_uc );
 }
 
+void QUimInputContext::update()
+{
+    qDebug( "QUimInputContext::update()" );
+
+    QWidget *w = focusWidget();
+
+    if ( w ) {
+       QRect mf = w->inputMethodQuery( Qt::ImMicroFocus ).toRect();
+       QPoint p = w->mapToGlobal( mf.topLeft() );
+       setMicroFocus( p.x(), p.y(), mf.width(), mf.height() );
+    }
+}
+
 QString QUimInputContext::identifierName()
 {
     return ( QString( "uim-" ) + m_imname );
@@ -394,8 +406,6 @@
 
 void QUimInputContext::commitString( const QString& str )
 {
-    preeditString = QString::null;
-
     QInputMethodEvent e;
     e.setCommitString( str );
     sendEvent( e );
@@ -423,36 +433,23 @@
 {
     QString newString = getPreeditString();
 
-    if ( newString.isEmpty() && preeditString.isEmpty() && ! isComposing() )
-        return ;
+    if ( !isComposing() ) {
+       if ( newString.isEmpty() )
+           return;
 
-    // Activating the IM
-    if ( ! newString.isEmpty() && ! isComposing() )
-    {
-        sendEvent( QInputMethodEvent() );
-        m_isComposing = true;
+       // Start conversion
+       m_isComposing = true;
     }
 
-    if ( ! newString.isEmpty() )
-    {
+    if ( !newString.isEmpty() ) {
         QInputMethodEvent e( newString, getPreeditAttrs() );
-
-        sendEvent( e );
-    }
-
-    // Preedit's length is Zero, we should deactivate IM and
-    // cancel the inputting, that is, sending IMEnd event with
-    // empty string.
-    if ( newString.isEmpty() && isComposing() )
-    {
-       QInputMethodEvent e;
-       e.setCommitString( "" );
-
         sendEvent( e );
-        m_isComposing = false;
+       // Qt4.3.1 does not call back update() here
+       update();
+    } else {
+       // Complete conversion implicitly since the preedit is empty
+       commitString( "" );
     }
-
-    preeditString = newString;
 }
 
 bool QUimInputContext::isPreeditRelocationEnabled()

Modified: trunk/qt/quiminputcontextplugin-qt4/quiminputcontext.h
==============================================================================
--- trunk/qt/quiminputcontextplugin-qt4/quiminputcontext.h      (original)
+++ trunk/qt/quiminputcontextplugin-qt4/quiminputcontext.h      Thu Sep 20 
14:32:42 2007
@@ -39,9 +39,9 @@
 
     virtual bool filterEvent( const QEvent *event );
     virtual void reset();
+    virtual void update();
     virtual void setFocus();
     virtual void unsetFocus();
-    virtual void setMicroFocus( int x, int y, int w, int h, QFont *f = 0 );
     virtual void mouseHandler( int x, QMouseEvent *event );
     virtual bool isComposing() const { return m_isComposing; }
 
@@ -59,6 +59,7 @@
 
     void createUimInfo();
 private:
+    void setMicroFocus( int x, int y, int w, int h, QFont *f = 0 );
     QString getPreeditString();
     int getPreeditCursorPosition();
     int getPreeditSelectionLength();
@@ -94,7 +95,6 @@
     bool m_isComposing;
 
     QList<PreeditSegment*> psegs;
-    QString preeditString;
 
     CandidateWindow *cwin;
     static QUimHelperManager *m_HelperManager;

Modified: trunk/qt/quiminputcontextplugin-qt4/quiminputcontextplugin.pro
==============================================================================
--- trunk/qt/quiminputcontextplugin-qt4/quiminputcontextplugin.pro      
(original)
+++ trunk/qt/quiminputcontextplugin-qt4/quiminputcontextplugin.pro      Thu Sep 
20 14:32:42 2007
@@ -13,11 +13,13 @@
 HEADERS += qhelpermanager.h \
            quiminputcontext.h \
            plugin.h \
-           candidatewindow.h
+           candidatewindow.h \
+           subwindow.h
 
 SOURCES += plugin.cpp \
            qhelpermanager.cpp \
            quiminputcontext.cpp \
-           candidatewindow.cpp
+           candidatewindow.cpp \
+           subwindow.cpp
 
 TARGET = uiminputcontextplugin

Copied: trunk/qt/quiminputcontextplugin-qt4/subwindow.cpp (from r4979, 
/trunk/qt/immodule-subwindow.cpp)
==============================================================================
--- /trunk/qt/immodule-subwindow.cpp    (original)
+++ trunk/qt/quiminputcontextplugin-qt4/subwindow.cpp   Thu Sep 20 14:32:42 2007
@@ -30,31 +30,32 @@
 SUCH DAMAGE.
 
 */
-#include <config.h>
+
+//#include <config.h>
 
 #include <qlabel.h>
 #include <qtextbrowser.h>
 #include <qtimer.h>
 #include <qapplication.h>
+#include <QDesktopWidget>
 #include <qrect.h>
 #include <qpoint.h>
 
-#include "immodule-subwindow.h"
+#include "subwindow.h"
 
-const Qt::WFlags subwindowFlag = ( Qt::WType_TopLevel
-                                   | Qt::WStyle_Customize
-                                   | Qt::WStyle_StaysOnTop
-                                   | Qt::WStyle_NoBorder
-                                   | Qt::WStyle_Tool
+const Qt::WFlags subwindowFlag = ( Qt::Window
+                                   | Qt::WindowStaysOnTopHint
+                                   | Qt::FramelessWindowHint
+                                   | Qt::Tool
 #if defined(Q_WS_X11)
-                                   | Qt::WX11BypassWM
+                                   | Qt::X11BypassWindowManagerHint
 #endif
                                  );
 
 static const int TIMER_INTERVAL = 1000; // 1000ms = 1second
 
 SubWindow::SubWindow( QWidget *parent, const char *name )
-        : QVBox( parent, name, subwindowFlag )
+        : Q3VBox( parent, name, subwindowFlag )
 {
     m_titleLabel = new QLabel( this );
     m_titleLabel->setAlignment( Qt::AlignHCenter );
@@ -123,5 +124,3 @@
 
     return QPoint( new_x, new_y );
 }
-
-#include "immodule-subwindow.moc"

Copied: trunk/qt/quiminputcontextplugin-qt4/subwindow.h (from r4979, 
/trunk/qt/immodule-subwindow.h)
==============================================================================
--- /trunk/qt/immodule-subwindow.h      (original)
+++ trunk/qt/quiminputcontextplugin-qt4/subwindow.h     Thu Sep 20 14:32:42 2007
@@ -33,13 +33,13 @@
 #ifndef _SUBWINDOW_H_
 #define _SUBWINDOW_H_
 
-#include <qvbox.h>
-#include <qtimer.h>
+#include <Q3VBox>
+#include <QTimer>
 
 class QLabel;
 class QTextBrowser;
 
-class SubWindow : public QVBox
+class SubWindow : public Q3VBox
 {
     Q_OBJECT
 

Reply via email to