diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp index 0b983e7..864a5a0 100644 --- a/src/widgets/kernel/qapplication.cpp +++ b/src/widgets/kernel/qapplication.cpp @@ -1685,6 +1685,7 @@ QWidget *QApplication::focusWidget() void QApplicationPrivate::setFocusWidget(QWidget *focus, Qt::FocusReason reason) { + qDebug() << __FUNCTION__ << focus << reason; #ifndef QT_NO_GRAPHICSVIEW if (focus && focus->window()->graphicsProxyWidget()) return; @@ -2076,9 +2077,10 @@ void QApplication::setActiveWindow(QWidget* act) } else { // If the focus widget is not in the activate_window, clear the focus w = QApplicationPrivate::focus_widget; - if (!w && QApplicationPrivate::active_window->focusPolicy() != Qt::NoFocus) + if (!w && QApplicationPrivate::active_window->focusPolicy() != Qt::NoFocus) { + qDebug() << __FUNCTION__ << "calling setFocusWidget" << QApplicationPrivate::active_window; QApplicationPrivate::setFocusWidget(QApplicationPrivate::active_window, Qt::ActiveWindowFocusReason); - else if (!QApplicationPrivate::active_window->isAncestorOf(w)) + } else if (!QApplicationPrivate::active_window->isAncestorOf(w)) QApplicationPrivate::setFocusWidget(0, Qt::ActiveWindowFocusReason); } } @@ -3039,8 +3041,10 @@ bool QApplication::notify(QObject *receiver, QEvent *e) QPoint relpos = mouse->pos(); if (e->spontaneous()) { - if (e->type() != QEvent::MouseMove) + if (e->type() != QEvent::MouseMove) { + qDebug() << __FUNCTION__ << w << "calling giveFocusAccordingToFocusPolicy()"; QApplicationPrivate::giveFocusAccordingToFocusPolicy(w, e, relpos); + } // ### Qt 5 These dynamic tool tips should be an OPT-IN feature. Some platforms // like Mac OS X (probably others too), can optimize their views by not @@ -3807,9 +3811,11 @@ void QApplicationPrivate::giveFocusAccordingToFocusPolicy(QWidget *widget, QEven QWidget *focusWidget = widget; while (focusWidget) { + qDebug() << __FUNCTION__ << "looping" << focusWidget << "starting from " << widget; if (focusWidget->isEnabled() && focusWidget->rect().contains(localPos) && QApplicationPrivate::shouldSetFocus(focusWidget, focusPolicy)) { + qDebug() << __FUNCTION__ << "setting" << focusWidget; focusWidget->setFocus(Qt::MouseFocusReason); break; } diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index 7396808..55d2ab7 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -5946,6 +5946,9 @@ bool QWidget::hasFocus() const void QWidget::setFocus(Qt::FocusReason reason) { + qDebug() << __FUNCTION__ << this << "reason=" << reason; + if (objectName() == "LineEdit0_0") + qDebug("QWidget::setFocusLE00!"); if (!isEnabled()) return; @@ -6001,6 +6004,7 @@ void QWidget::setFocus(Qt::FocusReason reason) f->d_func()->updateFocusChild(); + qDebug() << __FUNCTION__ << this << "calling setFocusWidget" << f; QApplicationPrivate::setFocusWidget(f, reason); #ifndef QT_NO_ACCESSIBILITY # ifdef Q_OS_WIN @@ -6057,6 +6061,7 @@ void QWidget::setFocus(Qt::FocusReason reason) void QWidgetPrivate::updateFocusChild() { Q_Q(QWidget); + qDebug() << __FUNCTION__ << q; QWidget *w = q; if (q->isHidden()) { @@ -6067,6 +6072,7 @@ void QWidgetPrivate::updateFocusChild() } else { while (w) { w->d_func()->focus_child = q; + qDebug() << __FUNCTION__ << w << "assigning focus_child" << q; w = w->isWindow() ? 0 : w->parentWidget(); } } @@ -6096,6 +6102,9 @@ void QWidgetPrivate::updateFocusChild() void QWidget::clearFocus() { + qDebug() << __FUNCTION__ << this; + if (objectName() == QLatin1String("LineEdit0_2")) + qDebug("clearFocusLE02"); if (hasFocus()) { if (testAttribute(Qt::WA_InputMethodEnabled)) qApp->inputMethod()->commit(); @@ -6106,8 +6115,10 @@ void QWidget::clearFocus() QWidget *w = this; while (w) { - if (w->d_func()->focus_child == this) + if (w->d_func()->focus_child == this) { + qDebug() << "Clearing focus child" << w; w->d_func()->focus_child = 0; + } w = w->parentWidget(); } #ifndef QT_NO_GRAPHICSVIEW diff --git a/src/widgets/widgets/qmdisubwindow.cpp b/src/widgets/widgets/qmdisubwindow.cpp index 9104074..9a7a56e 100644 --- a/src/widgets/widgets/qmdisubwindow.cpp +++ b/src/widgets/widgets/qmdisubwindow.cpp @@ -960,8 +960,10 @@ void QMdiSubWindowPrivate::_q_enterInteractiveMode() */ void QMdiSubWindowPrivate::_q_processFocusChanged(QWidget *old, QWidget *now) { + Q_UNUSED(old); Q_Q(QMdiSubWindow); + qDebug() << __FUNCTION__ << q << "old=" << old << "now=" << now; if (now && (now == q || q->isAncestorOf(now))) { if (now == q && !isInInteractiveMode) setFocusWidget(); @@ -1416,6 +1418,7 @@ void QMdiSubWindowPrivate::setMaximizeMode() void QMdiSubWindowPrivate::setActive(bool activate, bool changeFocus) { Q_Q(QMdiSubWindow); + qDebug() << __FUNCTION__ << q << "activate=" << activate <<"changeFocus" << changeFocus; if (!parent || !activationEnabled) return; @@ -1437,8 +1440,10 @@ void QMdiSubWindowPrivate::setActive(bool activate, bool changeFocus) q->overrideWindowState(q->windowState() & ~Qt::WindowActive); if (changeFocus) { QWidget *focusWidget = QApplication::focusWidget(); - if (focusWidget && (focusWidget == q || q->isAncestorOf(focusWidget))) + if (focusWidget && (focusWidget == q || q->isAncestorOf(focusWidget))) { + qDebug() << __FUNCTION__ << "Clear focus" << focusWidget; focusWidget->clearFocus(); + } } if (baseWidget) baseWidget->overrideWindowState(baseWidget->windowState() & ~Qt::WindowActive); @@ -2006,11 +2011,14 @@ void QMdiSubWindowPrivate::updateActions() void QMdiSubWindowPrivate::setFocusWidget() { + Q_Q(QMdiSubWindow); + qDebug() << __FUNCTION__ << q ; if (!baseWidget) { q->setFocus(); return; } + qDebug() << __FUNCTION__ << "focus of base" << baseWidget->focusWidget() << "base=" << baseWidget; // This will give focus to the next child if possible, otherwise // do nothing, hence it's not possible to tab between windows with @@ -2026,10 +2034,12 @@ void QMdiSubWindowPrivate::setFocusWidget() return; } + if (QWidget *focusWidget = baseWidget->focusWidget()) { if (!focusWidget->hasFocus() && q->isAncestorOf(focusWidget) && focusWidget->isVisible() && !q->isMinimized() && focusWidget->focusPolicy() != Qt::NoFocus) { + qDebug() << __FUNCTION__ << q << "focussing" << focusWidget; focusWidget->setFocus(); } else { q->setFocus(); @@ -2038,11 +2048,14 @@ void QMdiSubWindowPrivate::setFocusWidget() } QWidget *focusWidget = q->nextInFocusChain(); - while (focusWidget && focusWidget != q && focusWidget->focusPolicy() == Qt::NoFocus) + while (focusWidget && focusWidget != q && focusWidget->focusPolicy() == Qt::NoFocus) { + qDebug() << __FUNCTION__ << q << "looping" << focusWidget; focusWidget = focusWidget->nextInFocusChain(); - if (focusWidget && q->isAncestorOf(focusWidget)) + } + if (focusWidget && q->isAncestorOf(focusWidget)) { + qDebug() << __FUNCTION__ << q << "calling setFocus" << focusWidget ; focusWidget->setFocus(); - else if (baseWidget->focusPolicy() != Qt::NoFocus) + } else if (baseWidget->focusPolicy() != Qt::NoFocus) baseWidget->setFocus(); else if (!q->hasFocus()) q->setFocus();