19class ChildChangedEventFilter :
public QObject
23 ChildChangedEventFilter(QObject *watched, QObject *parent)
29 bool eventFilter(QObject *watched, QEvent *event)
override {
30 if (watched == m_watched &&
31 (event->type() == QEvent::ChildAdded || event->type() == QEvent::ChildRemoved)) {
37 QTimer::singleShot(0,
this, &ChildChangedEventFilter::sigChildrenChanged);
43 QObject *m_watched {
nullptr};
46 void sigChildrenChanged();
76 if (event->type() == QEvent::PlatformSurface) {
94 QWidget *topLevel =
static_cast<QWidget *
>(newHierarchy.last().data());
123 &ChildChangedEventFilter::sigChildrenChanged,
146 if (wdg->windowHandle()) {
149 wdg = wdg->parentWidget();
160 widget->removeEventFilter(
this);
166 widget->installEventFilter(
this);
172#include <KisRootSurfaceTrackerBase.moc>
KisRootSurfaceTrackerBase(QWidget *watched, QObject *parent=nullptr)
QPointer< QWindow > m_topLevelNativeWindow
~KisRootSurfaceTrackerBase()
virtual void disconnectFromNativeWindow()=0
bool eventFilter(QObject *watched, QEvent *event) override
void reconnectToHierarchy(const QVector< QPointer< QObject > > newHierarchy)
virtual void connectToNativeWindow(QWindow *nativeWindow)=0
QPointer< QObject > m_childChangedFilter
void tryReconnectToNativeWindow()
QWidget * trackedWidget() const
QVector< QPointer< QObject > > getCurrentHierarchy(QWidget *wdg)
void tryUpdateHierarchy()
QPointer< QWidget > m_topLevelWidgetWithSurface
QVector< QPointer< QObject > > m_watchedHierarchy
#define KIS_SAFE_ASSERT_RECOVER(cond)
ChildIterator< value_type, is_const > parent(const ChildIterator< value_type, is_const > &it)