diff -ur qt-x11-free-3.1.0.orig/src/kernel/qapplication_x11.cpp qt-x11-free-3.1.0/src/kernel/qapplication_x11.cpp
--- qt-x11-free-3.1.0.orig/src/kernel/qapplication_x11.cpp	Thu Nov  7 22:07:29 2002
+++ qt-x11-free-3.1.0/src/kernel/qapplication_x11.cpp	Mon Dec 23 13:14:27 2002
@@ -3072,7 +3072,7 @@
 		if ( inPopupMode() ) // no focus widget, see if we have a popup
 		    keywidget = (QETWidget*) activePopupWidget();
 		else if ( widget )
-		    keywidget = (QETWidget*)widget->topLevelWidget();
+		    keywidget = widget->focusWidget()?(QETWidget*)widget->focusWidget():widget;
 	    }
 	}
     }
@@ -3103,7 +3103,7 @@
 		    if ( inPopupMode() ) // no focus widget, see if we have a popup
 		        keywidget = (QETWidget*) activePopupWidget();
 		    else if ( widget )
-		        keywidget = (QETWidget*)widget->topLevelWidget();
+		        keywidget = widget->focusWidget()?(QETWidget*)widget->focusWidget():widget;
 	        }
 	    }
         }
