Fix crash in TWidgetHelper::show/hideChildren.

This commit is contained in:
John Preston 2021-11-02 00:08:10 +04:00
parent d9953c29b8
commit 402b73f5cf
2 changed files with 32 additions and 10 deletions

View file

@ -12,6 +12,30 @@
#include <QtGui/QtEvents>
namespace Ui {
namespace {
[[nodiscard]] std::vector<QPointer<QWidget>> GetChildWidgets(
not_null<QWidget*> widget) {
const auto &children = widget->children();
auto result = std::vector<QPointer<QWidget>>();
result.reserve(children.size());
for (const auto child : children) {
if (child && child->isWidgetType()) {
result.push_back(static_cast<QWidget*>(child));
}
}
return result;
}
} // namespace
void ToggleChildrenVisibility(not_null<QWidget*> widget, bool visible) {
for (const auto &child : GetChildWidgets(widget)) {
if (child) {
child->setVisible(visible);
}
}
}
void ResizeFitChild(
not_null<RpWidget*> parent,

View file

@ -18,6 +18,12 @@
#include <QtCore/QPointer>
#include <QtGui/QtEvents>
namespace Ui {
void ToggleChildrenVisibility(not_null<QWidget*> widget, bool visible);
} // namespace Ui
class TWidget;
template <typename Base>
@ -30,18 +36,10 @@ public:
}
void hideChildren() {
for (auto child : Base::children()) {
if (child->isWidgetType()) {
static_cast<QWidget*>(child)->hide();
}
}
Ui::ToggleChildrenVisibility(this, false);
}
void showChildren() {
for (auto child : Base::children()) {
if (child->isWidgetType()) {
static_cast<QWidget*>(child)->show();
}
}
Ui::ToggleChildrenVisibility(this, true);
}
void moveToLeft(int x, int y, int outerw = 0) {