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;
 };


Reply via email to