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