Revision: 6236
Author: nogu.dev
Date: Mon Mar 8 02:25:45 2010
Log: * qt4/immodule/candidatewindow.cpp
- (CandidateWindow::CandidateWindow, CandidateWindow::popup,
CandidateWindow::eventFilter): Add event filter to fix bug #13911.
A candidate window follows the move of a main window with this commit.
* qt4/immodule/candidatewindow.h
- Ditto.
http://code.google.com/p/uim/source/detail?r=6236
Modified:
/trunk/qt4/immodule/candidatewindow.cpp
/trunk/qt4/immodule/candidatewindow.h
=======================================
--- /trunk/qt4/immodule/candidatewindow.cpp Sat Mar 6 15:42:04 2010
+++ /trunk/qt4/immodule/candidatewindow.cpp Mon Mar 8 02:25:45 2010
@@ -64,7 +64,7 @@
: QFrame( parent, candidateFlag ), nrCandidates( 0 ), displayLimit( 0 ),
candidateIndex( -1 ), pageIndex( -1 ), ic( 0 ), isAlwaysLeft( false ),
subWin( 0 ), hasAnnotation( uim_scm_symbol_value_bool(
- "eb-enable-for-annotation?" ) == UIM_TRUE )
+ "eb-enable-for-annotation?" ) == UIM_TRUE ), window( 0 )
{
setFrameStyle( Raised | NoFrame );
@@ -113,6 +113,8 @@
void CandidateWindow::popup()
{
+ window = QApplication::focusWidget()->window();
+ window->installEventFilter( this );
raise();
show();
}
@@ -508,6 +510,18 @@
return QSize( width, height );
}
+
+bool CandidateWindow::eventFilter( QObject *obj, QEvent *event )
+{
+ if ( obj == window ) {
+ if ( event->type() == QEvent::Move ) {
+ QMoveEvent *moveEvent = static_cast<QMoveEvent *>( event );
+ move( pos() + moveEvent->pos() - moveEvent->oldPos() );
+ }
+ return false;
+ }
+ return QFrame::eventFilter( obj, event );
+}
QSize CandidateListView::sizeHint() const
{
=======================================
--- /trunk/qt4/immodule/candidatewindow.h Fri Mar 5 06:02:52 2010
+++ /trunk/qt4/immodule/candidatewindow.h Mon Mar 8 02:25:45 2010
@@ -89,6 +89,8 @@
virtual void moveEvent( QMoveEvent * );
virtual void resizeEvent( QResizeEvent * );
+ bool eventFilter( QObject *obj, QEvent *event );
+
QUimInputContext *ic;
CandidateListView *cList;
@@ -102,6 +104,8 @@
SubWindow *subWin;
const bool hasAnnotation;
+
+ QWidget *window;
};