tdesktop/Telegram/SourceFiles/ui/focus_persister.h

43 lines
845 B
C
Raw Normal View History

2017-09-25 16:06:53 +00:00
/*
This file is part of Telegram Desktop,
the official desktop application for the Telegram messaging service.
2017-09-25 16:06:53 +00:00
For license and copyright information please follow this link:
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
2017-09-25 16:06:53 +00:00
*/
#pragma once
namespace Ui {
class FocusPersister {
public:
FocusPersister(QWidget *parent, QWidget *steal = nullptr)
: _weak(GrabFocused(parent)) {
if (steal) {
steal->setFocus();
}
}
~FocusPersister() {
if (auto strong = _weak.data()) {
if (auto window = strong->window()) {
if (window->focusWidget() != strong) {
strong->setFocus();
}
}
}
}
private:
static QWidget *GrabFocused(QWidget *parent) {
if (auto window = parent ? parent->window() : nullptr) {
return window->focusWidget();
}
return nullptr;
}
QPointer<QWidget> _weak;
};
} // namespace Ui