diff --git a/ui/layers/layer_widget.cpp b/ui/layers/layer_widget.cpp index 6a05357..91df272 100644 --- a/ui/layers/layer_widget.cpp +++ b/ui/layers/layer_widget.cpp @@ -462,10 +462,10 @@ void LayerStackWidget::setCacheImages() { void LayerStackWidget::closeLayer(not_null layer) { const auto weak = Ui::MakeWeak(layer.get()); - if (weak->inFocusChain()) { + if (Ui::InFocusChain(layer)) { setFocus(); } - if (!weak || !weak->setClosing()) { + if (!layer->setClosing()) { // This layer is already closing. return; } else if (!weak) { @@ -734,9 +734,11 @@ void LayerStackWidget::appendBox( LayerWidget *LayerStackWidget::pushBox( object_ptr box, anim::type animated) { - auto oldLayer = currentLayer(); + const auto oldLayer = currentLayer(); if (oldLayer) { - if (oldLayer->inFocusChain()) setFocus(); + if (Ui::InFocusChain(oldLayer)) { + setFocus(); + } oldLayer->hide(); } _layers.push_back( @@ -793,7 +795,7 @@ void LayerStackWidget::clearClosingLayers() { while (!_closingLayers.empty()) { const auto index = _closingLayers.size() - 1; const auto layer = _closingLayers.back().get(); - if (layer->inFocusChain()) { + if (Ui::InFocusChain(layer)) { setFocus(); } diff --git a/ui/rp_widget.h b/ui/rp_widget.h index bfadb9f..8cffbe5 100644 --- a/ui/rp_widget.h +++ b/ui/rp_widget.h @@ -28,10 +28,6 @@ public: return QMargins(); } - bool inFocusChain() const { - return Ui::InFocusChain(this); - } - void hideChildren() { for (auto child : Base::children()) { if (child->isWidgetType()) { diff --git a/ui/ui_utility.cpp b/ui/ui_utility.cpp index e7e5e59..2b3d6e2 100644 --- a/ui/ui_utility.cpp +++ b/ui/ui_utility.cpp @@ -8,8 +8,8 @@ #include "ui/style/style_core.h" +#include #include -#include #include #include @@ -82,6 +82,10 @@ void SendPendingEventsRecursive(QWidget *target, bool parentHiddenFlag) { } // namespace +bool AppInFocus() { + return QApplication::focusWidget() != nullptr; +} + void SendPendingMoveResizeEvents(not_null target) { CreateWidgetStateRecursive(target); SendPendingEventsRecursive(target, !target->isVisible()); diff --git a/ui/ui_utility.h b/ui/ui_utility.h index 3b2f77a..4a1ce5e 100644 --- a/ui/ui_utility.h +++ b/ui/ui_utility.h @@ -98,6 +98,8 @@ inline not_null*> AttachAsChild( std::forward(value))->value(); } +[[nodiscard]] bool AppInFocus(); + [[nodiscard]] inline bool InFocusChain(not_null widget) { if (const auto top = widget->window()) { if (auto focused = top->focusWidget()) {