Unity 8
activefocuslogger.cpp
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 }