aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Hartmann <thomas.hartmann@qt.io>2022-05-19 19:09:59 +0200
committerThomas Hartmann <thomas.hartmann@qt.io>2022-05-19 19:48:13 +0000
commite10b3bc98b8928e28e6d9dd9cddf9b9338a4f8a2 (patch)
tree5f9d01ca91c72f77173c3df68a31367aec0eb512
parent21710b3bed63665479276cc1c0d351879b474cf6 (diff)
QmlDesigner: Use single function trackWidgetFocusTime to track view usage
This is simpler and not all widgets get focus events. Change-Id: I91769abee7ee73017ba57811c124ddc509cac3fe Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
-rw-r--r--src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp15
-rw-r--r--src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.h4
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp15
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.h4
-rw-r--r--src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp2
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/propertyeditorwidget.cpp14
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/propertyeditorwidget.h6
-rw-r--r--src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp14
-rw-r--r--src/plugins/qmldesigner/components/texteditor/texteditorwidget.h4
-rw-r--r--src/plugins/qmldesigner/qmldesignerconstants.h2
-rw-r--r--src/plugins/qmldesigner/qmldesignerplugin.cpp32
-rw-r--r--src/plugins/qmldesigner/qmldesignerplugin.h2
12 files changed, 44 insertions, 70 deletions
diff --git a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp
index 992096b438..221f9ec0f4 100644
--- a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp
+++ b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp
@@ -110,19 +110,6 @@ bool AssetsLibraryWidget::eventFilter(QObject *obj, QEvent *event)
return QObject::eventFilter(obj, event);
}
-void AssetsLibraryWidget::focusOutEvent(QFocusEvent *focusEvent)
-{
- QmlDesignerPlugin::emitUsageStatisticsTime(Constants::EVENT_ASSETSLIBRARY_TIME,
- m_usageTimer.elapsed());
- QFrame::focusOutEvent(focusEvent);
-}
-
-void AssetsLibraryWidget::focusInEvent(QFocusEvent *focusEvent)
-{
- m_usageTimer.restart();
- QFrame::focusInEvent(focusEvent);
-}
-
AssetsLibraryWidget::AssetsLibraryWidget(AsynchronousImageCache &asynchronousFontImageCache,
SynchronousImageCache &synchronousFontImageCache)
: m_itemIconSize(24, 24)
@@ -201,6 +188,8 @@ AssetsLibraryWidget::AssetsLibraryWidget(AsynchronousImageCache &asynchronousFon
}
});
+ QmlDesignerPlugin::trackWidgetFocusTime(this, Constants::EVENT_ASSETSLIBRARY_TIME);
+
// init the first load of the QML UI elements
reloadQmlSource();
}
diff --git a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.h b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.h
index c651bc26ce..18baef0d6c 100644
--- a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.h
+++ b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.h
@@ -28,7 +28,6 @@
#include <previewtooltip/previewtooltipbackend.h>
#include "assetslibrarymodel.h"
-#include <QElapsedTimer>
#include <QFileIconProvider>
#include <QFrame>
#include <QPointF>
@@ -90,8 +89,6 @@ signals:
protected:
bool eventFilter(QObject *obj, QEvent *event) override;
- void focusOutEvent(QFocusEvent *focusEvent) override;
- void focusInEvent(QFocusEvent *focusEvent) override;
private:
void reloadQmlSource();
@@ -117,7 +114,6 @@ private:
bool m_updateRetry = false;
QString m_filterText;
QPoint m_dragStartPoint;
- QElapsedTimer m_usageTimer;
};
} // namespace QmlDesigner
diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp
index 5382d74ba7..511ef37f19 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp
+++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp
@@ -140,19 +140,6 @@ void ItemLibraryWidget::resizeEvent(QResizeEvent *event)
isHorizontalLayout = event->size().width() >= HORIZONTAL_LAYOUT_WIDTH_LIMIT;
}
-void ItemLibraryWidget::focusOutEvent(QFocusEvent *focusEvent)
-{
- QmlDesignerPlugin::emitUsageStatisticsTime(Constants::EVENT_ITEMLIBRARY_TIME,
- m_usageTimer.elapsed());
- QFrame::focusOutEvent(focusEvent);
-}
-
-void ItemLibraryWidget::focusInEvent(QFocusEvent *focusEvent)
-{
- m_usageTimer.restart();
- QFrame::focusInEvent(focusEvent);
-}
-
ItemLibraryWidget::ItemLibraryWidget(AsynchronousImageCache &imageCache,
AsynchronousImageCache &asynchronousFontImageCache,
SynchronousImageCache &synchronousFontImageCache)
@@ -213,6 +200,8 @@ ItemLibraryWidget::ItemLibraryWidget(AsynchronousImageCache &imageCache,
m_itemsWidget->engine()->addImageProvider("itemlibrary_preview",
new ItemLibraryIconImageProvider{m_imageCache});
+ QmlDesignerPlugin::trackWidgetFocusTime(this, Constants::EVENT_ITEMLIBRARY_TIME);
+
// init the first load of the QML UI elements
reloadQmlSource();
}
diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.h
index 5137cd5fcc..a7f2318073 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.h
+++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.h
@@ -32,7 +32,6 @@
#include <utils/dropsupport.h>
#include <previewtooltip/previewtooltipbackend.h>
-#include <QElapsedTimer>
#include <QFileIconProvider>
#include <QFrame>
#include <QPointF>
@@ -105,8 +104,6 @@ signals:
protected:
bool eventFilter(QObject *obj, QEvent *event) override;
void resizeEvent(QResizeEvent *event) override;
- void focusOutEvent(QFocusEvent *focusEvent) override;
- void focusInEvent(QFocusEvent *focusEvent) override;
private:
void reloadQmlSource();
@@ -135,7 +132,6 @@ private:
QString m_filterText;
QPoint m_dragStartPoint;
bool m_subCompEditMode = false;
- QElapsedTimer m_usageTimer;
inline static int HORIZONTAL_LAYOUT_WIDTH_LIMIT = 600;
};
diff --git a/src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp b/src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp
index 5899ec9dd7..d43f4a1fe6 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp
@@ -83,6 +83,8 @@ NavigatorWidget::NavigatorWidget(NavigatorView *view)
sheet += Utils::FileReader::fetchQrc(":/qmldesigner/scrollbar.css");
setStyleSheet(Theme::replaceCssColors(QString::fromUtf8(sheet)));
#endif
+
+ QmlDesignerPlugin::trackWidgetFocusTime(this, Constants::EVENT_NAVIGATORVIEW_TIME);
}
void NavigatorWidget::setTreeModel(QAbstractItemModel *model)
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorwidget.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorwidget.cpp
index bc0bf03077..46acb2a2de 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorwidget.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorwidget.cpp
@@ -32,19 +32,7 @@ namespace QmlDesigner {
PropertyEditorWidget::PropertyEditorWidget(QWidget *parent) : QStackedWidget(parent)
{
-}
-
-void PropertyEditorWidget::focusOutEvent(QFocusEvent *focusEvent)
-{
- QmlDesignerPlugin::emitUsageStatisticsTime(Constants::EVENT_PROPERTYEDITOR_TIME,
- m_usageTimer.elapsed());
- QStackedWidget::focusOutEvent(focusEvent);
-}
-
-void PropertyEditorWidget::focusInEvent(QFocusEvent *focusEvent)
-{
- m_usageTimer.restart();
- QStackedWidget::focusInEvent(focusEvent);
+ QmlDesignerPlugin::trackWidgetFocusTime(this, Constants::EVENT_PROPERTYEDITOR_TIME);
}
void PropertyEditorWidget::resizeEvent(QResizeEvent * event)
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorwidget.h b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorwidget.h
index 54ae81fd33..035363433f 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorwidget.h
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorwidget.h
@@ -25,7 +25,6 @@
#pragma once
-#include <QElapsedTimer>
#include <QStackedWidget>
namespace QmlDesigner {
@@ -42,12 +41,7 @@ signals:
void resized();
protected:
- void focusOutEvent(QFocusEvent *focusEvent) override;
- void focusInEvent(QFocusEvent *focusEvent) override;
void resizeEvent(QResizeEvent * event) override;
-
-private:
- QElapsedTimer m_usageTimer;
};
} //QmlDesigner
diff --git a/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp b/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp
index 2b19429f93..00c68548e2 100644
--- a/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp
+++ b/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp
@@ -69,6 +69,7 @@ TextEditorWidget::TextEditorWidget(TextEditorView *textEditorView)
m_updateSelectionTimer.setInterval(200);
connect(&m_updateSelectionTimer, &QTimer::timeout, this, &TextEditorWidget::updateSelectionByCursorPosition);
+ QmlDesignerPlugin::trackWidgetFocusTime(this, Constants::EVENT_TEXTEDITOR_TIME);
}
void TextEditorWidget::setTextEditor(TextEditor::BaseTextEditor *textEditor)
@@ -241,17 +242,4 @@ void TextEditorWidget::dropEvent(QDropEvent *dropEvent)
actionManager.handleExternalAssetsDrop(dropEvent->mimeData());
}
-void TextEditorWidget::focusOutEvent(QFocusEvent *focusEvent)
-{
- QmlDesignerPlugin::emitUsageStatisticsTime(Constants::EVENT_TEXTEDITOR_TIME,
- m_usageTimer.elapsed());
- QWidget::focusOutEvent(focusEvent);
-}
-
-void TextEditorWidget::focusInEvent(QFocusEvent *focusEvent)
-{
- m_usageTimer.restart();
- QWidget::focusInEvent(focusEvent);
-}
-
} // namespace QmlDesigner
diff --git a/src/plugins/qmldesigner/components/texteditor/texteditorwidget.h b/src/plugins/qmldesigner/components/texteditor/texteditorwidget.h
index e247a7f715..efd51d8afc 100644
--- a/src/plugins/qmldesigner/components/texteditor/texteditorwidget.h
+++ b/src/plugins/qmldesigner/components/texteditor/texteditorwidget.h
@@ -26,7 +26,6 @@
#include <texteditor/texteditor.h>
-#include <QElapsedTimer>
#include <QTimer>
#include <QVBoxLayout>
#include <QWidget>
@@ -70,8 +69,6 @@ protected:
bool eventFilter(QObject *object, QEvent *event) override;
void dragEnterEvent(QDragEnterEvent *dragEnterEvent) override;
void dropEvent(QDropEvent *dropEvent) override;
- void focusOutEvent(QFocusEvent *focusEvent) override;
- void focusInEvent(QFocusEvent *focusEvent) override;
private:
void updateSelectionByCursorPosition();
@@ -84,7 +81,6 @@ private:
QVBoxLayout *m_layout = nullptr;
bool m_blockCursorSelectionSynchronisation = false;
bool m_blockRoundTrip = false;
- QElapsedTimer m_usageTimer;
};
} // namespace QmlDesigner
diff --git a/src/plugins/qmldesigner/qmldesignerconstants.h b/src/plugins/qmldesigner/qmldesignerconstants.h
index ed9370a208..d975fbd41c 100644
--- a/src/plugins/qmldesigner/qmldesignerconstants.h
+++ b/src/plugins/qmldesigner/qmldesignerconstants.h
@@ -123,8 +123,10 @@ const char EVENT_PROPERTYEDITOR_TIME[] = "propertyEditor";
const char EVENT_ASSETSLIBRARY_TIME[] = "assetsLibrary";
const char EVENT_ITEMLIBRARY_TIME[] = "itemLibrary";
const char EVENT_TRANSLATIONVIEW_TIME[] = "translationView";
+const char EVENT_NAVIGATORVIEW_TIME[] = "navigatorView";
const char EVENT_DESIGNMODE_TIME[] = "designMode";
+
const char PROPERTY_EDITOR_CLASSNAME_PROPERTY[] = "__classNamePrivateInternal";
namespace Internal {
diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp
index f30dfea9e6..ae596bb900 100644
--- a/src/plugins/qmldesigner/qmldesignerplugin.cpp
+++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp
@@ -678,6 +678,38 @@ void QmlDesignerPlugin::registerPreviewImageProvider(QQmlEngine *engine)
m_instance->d->projectManager.registerPreviewImageProvider(engine);
}
+
+bool isParent(QWidget *parent, QWidget *widget)
+{
+ if (!widget)
+ return false;
+
+ if (widget == parent)
+ return true;
+
+ return isParent(parent, widget->parentWidget());
+}
+
+void QmlDesignerPlugin::trackWidgetFocusTime(QWidget *widget, const QString &identifier)
+{
+ connect(qApp,
+ &QApplication::focusChanged,
+ widget,
+ [widget, identifier](QWidget *from, QWidget *to) {
+ static QElapsedTimer widgetUsageTimer;
+ static QString lastIdentifier;
+ if (isParent(widget, to)) {
+ if (!lastIdentifier.isEmpty())
+ emitUsageStatisticsTime(lastIdentifier, widgetUsageTimer.elapsed());
+ widgetUsageTimer.restart();
+ lastIdentifier = identifier;
+ } else if (isParent(widget, from) && lastIdentifier == identifier) {
+ emitUsageStatisticsTime(identifier, widgetUsageTimer.elapsed());
+ lastIdentifier.clear();
+ }
+ });
+}
+
void QmlDesignerPlugin::emitUsageStatisticsTime(const QString &identifier, int elapsed)
{
QTC_ASSERT(instance(), return);
diff --git a/src/plugins/qmldesigner/qmldesignerplugin.h b/src/plugins/qmldesigner/qmldesignerplugin.h
index 7d59d3e1f0..7670d4f1ea 100644
--- a/src/plugins/qmldesigner/qmldesignerplugin.h
+++ b/src/plugins/qmldesigner/qmldesignerplugin.h
@@ -97,6 +97,8 @@ public:
static void registerPreviewImageProvider(QQmlEngine *engine);
+ static void trackWidgetFocusTime(QWidget *widget, const QString &identifier);
+
signals:
void usageStatisticsNotifier(const QString &identifier);
void usageStatisticsUsageTimer(const QString &identifier, int elapsed);