diff options
author | Norwegian Rock Cat <qt-info@nokia.com> | 2009-03-26 15:10:05 (GMT) |
---|---|---|
committer | Norwegian Rock Cat <qt-info@nokia.com> | 2009-03-26 15:51:32 (GMT) |
commit | f5ef0eb1a6543abdd29e07c23de7fa1128f6d623 (patch) | |
tree | 8ed87026657dd93186144780c34acf11e4609b4b /src/gui/kernel/qwidget_mac.mm | |
parent | 6bcf2ca6645409ffa1aaadd1bd302c6e86b5b028 (diff) | |
download | Qt-f5ef0eb1a6543abdd29e07c23de7fa1128f6d623.zip Qt-f5ef0eb1a6543abdd29e07c23de7fa1128f6d623.tar.gz Qt-f5ef0eb1a6543abdd29e07c23de7fa1128f6d623.tar.bz2 |
Fix a bug where lineedits in a second page of a stack widget would not get key events.
We need to be more explicit in setting the first responder, and a bit
more agressing about rejecting it when called with no responder.
It seems that Cocoa has a tendency to reset the first responder when
lots of widgets get hidden or shown. During this it will call
"makeFirstResponder" on the window with a nil responder. Doing this will
reset our what Cocoa thinks is the focus widget, but Qt will still show
a focus widget. The way to solve it is to reject the make first
responder if the responder is nil. I'm not sure if there will be far
reaching implications for this, but it seems to be doing the right thing
at the moment.
We also need to share this code between QCocoaWindow and QCocoaPanel.
Thanks to the dynamic nature of objective-C we have to have a copy of
the code in both places. It's unfortunate.
Finally, it's also important to have the QWidget let Cocoa know it has
focus after it has been created. So, make sure that is in sync.
Task-number: 249296
Reviewed-by: Prasanth Ullattil
Diffstat (limited to 'src/gui/kernel/qwidget_mac.mm')
-rw-r--r-- | src/gui/kernel/qwidget_mac.mm | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm index f599b7c..7a586e1 100644 --- a/src/gui/kernel/qwidget_mac.mm +++ b/src/gui/kernel/qwidget_mac.mm @@ -2514,6 +2514,8 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO } updateIsOpaque(); + if (q->hasFocus()) + setFocus_sys(); if (!topLevel && initializeWindow) setWSGeometry(); |