@@ -0,0 +1,61 @@
1+/*
2+ * Copyright (C) 2015 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "activefocuslogger.h"
18+
19+#include <QQuickWindow>
20+
21+ActiveFocusLogger::ActiveFocusLogger(QQuickItem *parent)
22+ : QQuickItem(parent)
23+{
24+ connect(this, &QQuickItem::windowChanged,
25+ this, &ActiveFocusLogger::setupFilterOnWindow);
26+}
27+
28+void ActiveFocusLogger::setupFilterOnWindow(QQuickWindow *window)
29+{
30+ if (!m_window.isNull()) {
31+ disconnect(m_window.data(), nullptr, this, nullptr);
32+ m_window.clear();
33+ }
34+
35+ if (window) {
36+ m_window = window;
37+ QObject::connect(window, &QQuickWindow::activeFocusItemChanged,
38+ this, &ActiveFocusLogger::printActiveFocusInfo);
39+ }
40+}
41+
42+void ActiveFocusLogger::printActiveFocusInfo()
43+{
44+ if (!m_window || !isEnabled()) {
45+ return;
46+ }
47+
48+ qDebug() << "============== Active focus info START ================";
49+ if (m_window->activeFocusItem()) {
50+ qDebug() << m_window->activeFocusItem();
51+ qDebug() << "Ancestry:";
52+ QQuickItem *item = m_window->activeFocusItem()->parentItem();
53+ while (item != nullptr) {
54+ qDebug() << item << ", isFocusScope =" << item->isFocusScope();
55+ item = item->parentItem();
56+ }
57+ } else {
58+ qDebug() << "NULL";
59+ }
60+ qDebug() << "============== Active focus info END ================";
61+}