From d2ed221b1bb483025064743777dda88338525eb8 Mon Sep 17 00:00:00 2001 From: Kai Koehne <kai.koehne@nokia.com> Date: Tue, 23 Nov 2010 10:07:09 +0100 Subject: [PATCH] QmlObserver: Add 'show app on top' switch to creator + qmlobserver This is convenient especially in the observer mode. Reviewed-by: Christiaan Janssen --- .../include/qdeclarativeobserverservice.h | 3 ++ .../include/qdeclarativeviewobserver.h | 5 +++ .../qdeclarativeobserverservice.cpp | 14 ++++++++ .../qdeclarativeviewobserver.cpp | 30 ++++++++++++++++++ .../qdeclarativeviewobserver_p.h | 1 + share/qtcreator/qml/qmlobserver/main.cpp | 1 + .../qtcreator/qml/qmlobserver/qmlruntime.cpp | 13 ++++++++ share/qtcreator/qml/qmlobserver/qmlruntime.h | 2 ++ .../qmljsinspector/images/app-on-top.png | Bin 0 -> 2902 bytes .../qmljsinspector/qmlinspectortoolbar.cpp | 26 +++++++++++++++ .../qmljsinspector/qmlinspectortoolbar.h | 6 ++++ .../qmljsinspector/qmljsclientproxy.cpp | 8 +++++ src/plugins/qmljsinspector/qmljsclientproxy.h | 2 ++ src/plugins/qmljsinspector/qmljsinspector.cpp | 12 ++++--- src/plugins/qmljsinspector/qmljsinspector.qrc | 1 + .../qmljsinspector/qmljsinspectorconstants.h | 1 + .../qmljsinspector/qmljsobserverclient.cpp | 21 ++++++++++++ .../qmljsinspector/qmljsobserverclient.h | 2 ++ 18 files changed, 144 insertions(+), 4 deletions(-) create mode 100644 src/plugins/qmljsinspector/images/app-on-top.png diff --git a/share/qtcreator/qml/qmljsdebugger/include/qdeclarativeobserverservice.h b/share/qtcreator/qml/qmljsdebugger/include/qdeclarativeobserverservice.h index 66084cd92c4..df4704fa83e 100644 --- a/share/qtcreator/qml/qmljsdebugger/include/qdeclarativeobserverservice.h +++ b/share/qtcreator/qml/qmljsdebugger/include/qdeclarativeobserverservice.h @@ -68,6 +68,8 @@ public: void setAnimationSpeed(qreal slowdownFactor); void setCurrentTool(QmlJSDebugger::Constants::DesignTool toolId); void reloaded(); + void setShowAppOnTop(bool showAppOnTop); + QString idStringForObject(QObject *obj) const; void sendMessage(const QByteArray &message); @@ -81,6 +83,7 @@ Q_SIGNALS: void currentObjectsChanged(const QList<QObject*> &objects); void designModeBehaviorChanged(bool inDesignMode); + void showAppOnTopChanged(bool showAppOnTop); void reloadRequested(); void selectToolRequested(); void selectMarqueeToolRequested(); diff --git a/share/qtcreator/qml/qmljsdebugger/include/qdeclarativeviewobserver.h b/share/qtcreator/qml/qmljsdebugger/include/qdeclarativeviewobserver.h index e8f3194a817..3a81119e341 100644 --- a/share/qtcreator/qml/qmljsdebugger/include/qdeclarativeviewobserver.h +++ b/share/qtcreator/qml/qmljsdebugger/include/qdeclarativeviewobserver.h @@ -61,10 +61,14 @@ public: static QString idStringForObject(QObject *obj); QRectF adjustToScreenBoundaries(const QRectF &boundingRectInSceneSpace); + bool showAppOnTop() const; + public Q_SLOTS: void setDesignModeBehavior(bool value); bool designModeBehavior(); + void setShowAppOnTop(bool appOnTop); + void changeAnimationSpeed(qreal slowdownFactor); void continueExecution(qreal slowdownFactor = 1.0f); void pauseExecution(); @@ -73,6 +77,7 @@ public Q_SLOTS: Q_SIGNALS: void designModeBehaviorChanged(bool inDesignMode); + void showAppOnTopChanged(bool showAppOnTop); void reloadRequested(); void marqueeSelectToolActivated(); void selectToolActivated(); diff --git a/share/qtcreator/qml/qmljsdebugger/qdeclarativeobserverservice.cpp b/share/qtcreator/qml/qmljsdebugger/qdeclarativeobserverservice.cpp index 114cd15cf6c..5b052119f9b 100644 --- a/share/qtcreator/qml/qmljsdebugger/qdeclarativeobserverservice.cpp +++ b/share/qtcreator/qml/qmljsdebugger/qdeclarativeobserverservice.cpp @@ -110,6 +110,10 @@ void QDeclarativeObserverService::messageReceived(const QByteArray &message) bool inDesignMode; ds >> inDesignMode; emit designModeBehaviorChanged(inDesignMode); + } else if (type == "SHOW_APP_ON_TOP") { + bool showOnTop; + ds >> showOnTop; + emit showAppOnTopChanged(showOnTop); } else if (type == "CREATE_OBJECT") { QString qml; int parentId; @@ -207,6 +211,16 @@ void QDeclarativeObserverService::reloaded() sendMessage(message); } +void QDeclarativeObserverService::setShowAppOnTop(bool showAppOnTop) +{ + QByteArray message; + QDataStream ds(&message, QIODevice::WriteOnly); + + ds << QByteArray("SHOW_APP_ON_TOP") << showAppOnTop; + + sendMessage(message); +} + void QDeclarativeObserverService::selectedColorChanged(const QColor &color) { QByteArray message; diff --git a/share/qtcreator/qml/qmljsdebugger/qdeclarativeviewobserver.cpp b/share/qtcreator/qml/qmljsdebugger/qdeclarativeviewobserver.cpp index 3949bf71378..7063bec07a8 100644 --- a/share/qtcreator/qml/qmljsdebugger/qdeclarativeviewobserver.cpp +++ b/share/qtcreator/qml/qmljsdebugger/qdeclarativeviewobserver.cpp @@ -57,6 +57,7 @@ const int SceneChangeUpdateInterval = 5000; QDeclarativeViewObserverPrivate::QDeclarativeViewObserverPrivate(QDeclarativeViewObserver *q) : q(q), designModeBehavior(false), + showAppOnTop(false), executionPaused(false), slowdownFactor(1.0f), toolbar(0) @@ -87,6 +88,8 @@ QDeclarativeViewObserver::QDeclarativeViewObserver(QDeclarativeView *view, QObje data->debugService = QDeclarativeObserverService::instance(); connect(data->debugService, SIGNAL(designModeBehaviorChanged(bool)), SLOT(setDesignModeBehavior(bool))); + connect(data->debugService, SIGNAL(showAppOnTopChanged(bool)), + SLOT(setShowAppOnTop(bool))); connect(data->debugService, SIGNAL(reloadRequested()), SLOT(_q_reloadView())); connect(data->debugService, SIGNAL(currentObjectsChanged(QList<QObject*>)), SLOT(_q_onCurrentObjectsChanged(QList<QObject*>))); @@ -475,6 +478,33 @@ bool QDeclarativeViewObserver::designModeBehavior() return data->designModeBehavior; } +bool QDeclarativeViewObserver::showAppOnTop() const +{ + return data->showAppOnTop; +} + +void QDeclarativeViewObserver::setShowAppOnTop(bool appOnTop) +{ + if (data->view) { + QWidget *rootWidget = data->view; + while (rootWidget->parentWidget()) + rootWidget = rootWidget->parentWidget(); + Qt::WindowFlags flags = rootWidget->windowFlags(); + if (appOnTop) { + flags |= Qt::WindowStaysOnTopHint; + } else { + flags &= ~Qt::WindowStaysOnTopHint; + } + rootWidget->setWindowFlags(flags); + rootWidget->show(); + } + + data->showAppOnTop = appOnTop; + data->debugService->setShowAppOnTop(appOnTop); + + emit showAppOnTopChanged(appOnTop); +} + void QDeclarativeViewObserverPrivate::changeTool(Constants::DesignTool tool, Constants::ToolFlags /*flags*/) { diff --git a/share/qtcreator/qml/qmljsdebugger/qdeclarativeviewobserver_p.h b/share/qtcreator/qml/qmljsdebugger/qdeclarativeviewobserver_p.h index 7236e862983..fafa3794b73 100644 --- a/share/qtcreator/qml/qmljsdebugger/qdeclarativeviewobserver_p.h +++ b/share/qtcreator/qml/qmljsdebugger/qdeclarativeviewobserver_p.h @@ -83,6 +83,7 @@ public: BoundingRectHighlighter *boundingRectHighlighter; bool designModeBehavior; + bool showAppOnTop; bool executionPaused; qreal slowdownFactor; diff --git a/share/qtcreator/qml/qmlobserver/main.cpp b/share/qtcreator/qml/qmlobserver/main.cpp index baa0fb948e8..86a8085cd0a 100644 --- a/share/qtcreator/qml/qmlobserver/main.cpp +++ b/share/qtcreator/qml/qmlobserver/main.cpp @@ -422,6 +422,7 @@ int main(int argc, char ** argv) viewer->enableExperimentalGestures(); viewer->setDesignModeBehavior(designModeBehavior); + viewer->setStayOnTop(stayOnTop); foreach (QString lib, imports) viewer->addLibraryPath(lib); diff --git a/share/qtcreator/qml/qmlobserver/qmlruntime.cpp b/share/qtcreator/qml/qmlobserver/qmlruntime.cpp index d35c18d4a96..03276350aea 100644 --- a/share/qtcreator/qml/qmlobserver/qmlruntime.cpp +++ b/share/qtcreator/qml/qmlobserver/qmlruntime.cpp @@ -755,6 +755,13 @@ void QDeclarativeViewer::createMenu() connect(observer, SIGNAL(designModeBehaviorChanged(bool)), designModeBehaviorAction, SLOT(setChecked(bool))); connect(QmlJSDebugger::QDeclarativeObserverService::instance(), SIGNAL(debuggingClientChanged(bool)), designModeBehaviorAction, SLOT(setEnabled(bool))); + appOnTopAction = new QAction(tr("Keep Window on Top"), this); + appOnTopAction->setCheckable(true); + appOnTopAction->setChecked(observer->showAppOnTop()); + + connect(appOnTopAction, SIGNAL(triggered(bool)), observer, SLOT(setShowAppOnTop(bool))); + connect(observer, SIGNAL(showAppOnTopChanged(bool)), appOnTopAction, SLOT(setChecked(bool))); + QAction *proxyAction = new QAction(tr("HTTP &Proxy..."), this); connect(proxyAction, SIGNAL(triggered()), this, SLOT(showProxySettings())); @@ -825,6 +832,7 @@ void QDeclarativeViewer::createMenu() debugMenu->addAction(playSpeedAction); debugMenu->addAction(showWarningsWindow); debugMenu->addAction(designModeBehaviorAction); + debugMenu->addAction(appOnTopAction); #endif // ! Q_OS_SYMBIAN QMenu *settingsMenu = menu->addMenu(tr("S&ettings")); @@ -1487,6 +1495,11 @@ void QDeclarativeViewer::setSizeToView(bool sizeToView) } } +void QDeclarativeViewer::setStayOnTop(bool stayOnTop) +{ + appOnTopAction->setChecked(stayOnTop); +} + void QDeclarativeViewer::setAnimationSpeed(float f) { QDeclarativeDebugHelper::setAnimationSlowDownFactor(f); diff --git a/share/qtcreator/qml/qmlobserver/qmlruntime.h b/share/qtcreator/qml/qmlobserver/qmlruntime.h index 7c30998dfc1..b09d1b879b8 100644 --- a/share/qtcreator/qml/qmlobserver/qmlruntime.h +++ b/share/qtcreator/qml/qmlobserver/qmlruntime.h @@ -107,6 +107,7 @@ public: void setUseGL(bool use); void setUseNativeFileBrowser(bool); void setSizeToView(bool sizeToView); + void setStayOnTop(bool stayOnTop); QDeclarativeView *view() const; LoggerWidget *warningsWidget() const; @@ -201,6 +202,7 @@ private: QActionGroup *orientation; QAction *showWarningsWindow; QAction *designModeBehaviorAction; + QAction *appOnTopAction; QString m_script; ScriptOptions m_scriptOptions; diff --git a/src/plugins/qmljsinspector/images/app-on-top.png b/src/plugins/qmljsinspector/images/app-on-top.png new file mode 100644 index 0000000000000000000000000000000000000000..ddec5400c699a8a15fb271976b53bda3cb834228 GIT binary patch literal 2902 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 AIRF3v literal 0 HcmV?d00001 diff --git a/src/plugins/qmljsinspector/qmlinspectortoolbar.cpp b/src/plugins/qmljsinspector/qmlinspectortoolbar.cpp index 6d828d82e81..0f91422577d 100644 --- a/src/plugins/qmljsinspector/qmlinspectortoolbar.cpp +++ b/src/plugins/qmljsinspector/qmlinspectortoolbar.cpp @@ -65,6 +65,7 @@ QmlInspectorToolbar::QmlInspectorToolbar(QObject *parent) : m_selectAction(0), m_zoomAction(0), m_colorPickerAction(0), + m_showAppOnTopAction(0), m_defaultAnimSpeedAction(0), m_halfAnimSpeedAction(0), m_fourthAnimSpeedAction(0), @@ -86,6 +87,7 @@ QmlInspectorToolbar::QmlInspectorToolbar(QObject *parent) : void QmlInspectorToolbar::setEnabled(bool value) { m_fromQmlAction->setEnabled(value); + m_showAppOnTopAction->setEnabled(value); m_observerModeAction->setEnabled(value); m_playAction->setEnabled(value); m_selectAction->setEnabled(value); @@ -166,6 +168,13 @@ void QmlInspectorToolbar::setDesignModeBehavior(bool inDesignMode) m_emitSignals = true; } +void QmlInspectorToolbar::setShowAppOnTop(bool showAppOnTop) +{ + m_emitSignals = false; + m_showAppOnTopAction->setChecked(showAppOnTop); + m_emitSignals = true; +} + void QmlInspectorToolbar::createActions(const Core::Context &context) { Core::ICore *core = Core::ICore::instance(); @@ -174,6 +183,9 @@ void QmlInspectorToolbar::createActions(const Core::Context &context) m_fromQmlAction = new QAction(QIcon(QLatin1String(":/qml/images/from-qml-small.png")), tr("Apply Changes on Save"), this); + m_showAppOnTopAction = + new QAction(QIcon(QLatin1String(":/qml/images/app-on-top.png")), + tr("Show application on top"), this); m_observerModeAction = new QAction(QIcon(QLatin1String(":/qml/images/observermode.png")), tr("Observer Mode"), this); @@ -191,6 +203,8 @@ void QmlInspectorToolbar::createActions(const Core::Context &context) m_fromQmlAction->setCheckable(true); m_fromQmlAction->setChecked(true); + m_showAppOnTopAction->setCheckable(true); + m_showAppOnTopAction->setChecked(false); m_observerModeAction->setCheckable(true); m_observerModeAction->setChecked(false); m_selectAction->setCheckable(true); @@ -203,6 +217,8 @@ void QmlInspectorToolbar::createActions(const Core::Context &context) am->registerAction(m_zoomAction, QmlJSInspector::Constants::ZOOM_ACTION, context); am->registerAction(m_colorPickerAction, QmlJSInspector::Constants::COLOR_PICKER_ACTION, context); am->registerAction(m_fromQmlAction, QmlJSInspector::Constants::FROM_QML_ACTION, context); + am->registerAction(m_showAppOnTopAction, + QmlJSInspector::Constants::SHOW_APP_ON_TOP_ACTION, context); m_barWidget = new Utils::StyledBar; m_barWidget->setSingleRow(true); @@ -250,6 +266,9 @@ void QmlInspectorToolbar::createActions(const Core::Context &context) configBarLayout->addWidget( createToolButton(am->command(QmlJSInspector::Constants::FROM_QML_ACTION)->action())); + configBarLayout->addWidget( + createToolButton( + am->command(QmlJSInspector::Constants::SHOW_APP_ON_TOP_ACTION)->action())); configBarLayout->addSpacing(10); configBarLayout->addWidget( @@ -277,6 +296,7 @@ void QmlInspectorToolbar::createActions(const Core::Context &context) setEnabled(false); connect(m_fromQmlAction, SIGNAL(triggered()), SLOT(activateFromQml())); + connect(m_showAppOnTopAction, SIGNAL(triggered()), SLOT(showAppOnTopClick())); connect(m_observerModeAction, SIGNAL(triggered()), SLOT(activateDesignModeOnClick())); connect(m_playAction, SIGNAL(triggered()), SLOT(activatePlayOnClick())); connect(m_colorPickerAction, SIGNAL(triggered()), SLOT(activateColorPickerOnClick())); @@ -404,6 +424,12 @@ void QmlInspectorToolbar::activateZoomOnClick() } } +void QmlInspectorToolbar::showAppOnTopClick() +{ + if (m_emitSignals) + emit showAppOnTopSelected(m_showAppOnTopAction->isChecked()); +} + void QmlInspectorToolbar::setSelectedColor(const QColor &color) { m_colorBox->setColor(color); diff --git a/src/plugins/qmljsinspector/qmlinspectortoolbar.h b/src/plugins/qmljsinspector/qmlinspectortoolbar.h index f643b451073..8252b11eae0 100644 --- a/src/plugins/qmljsinspector/qmlinspectortoolbar.h +++ b/src/plugins/qmljsinspector/qmlinspectortoolbar.h @@ -80,6 +80,7 @@ public slots: void activateZoomTool(); void setAnimationSpeed(qreal slowdownFactor); void setDesignModeBehavior(bool inDesignMode); + void setShowAppOnTop(bool showAppOnTop); void setSelectedColor(const QColor &color); signals: @@ -91,6 +92,7 @@ signals: void selectToolSelected(); void zoomToolSelected(); + void showAppOnTopSelected(bool isChecked); void animationSpeedChanged(qreal slowdownFactor = 1.0f); private slots: @@ -100,6 +102,8 @@ private slots: void activateSelectToolOnClick(); void activateZoomOnClick(); + void showAppOnTopClick(); + void changeToDefaultAnimSpeed(); void changeToHalfAnimSpeed(); void changeToFourthAnimSpeed(); @@ -119,6 +123,8 @@ private: QAction *m_zoomAction; QAction *m_colorPickerAction; + QAction *m_showAppOnTopAction; + QAction *m_defaultAnimSpeedAction; QAction *m_halfAnimSpeedAction; QAction *m_fourthAnimSpeedAction; diff --git a/src/plugins/qmljsinspector/qmljsclientproxy.cpp b/src/plugins/qmljsinspector/qmljsclientproxy.cpp index a26e15b8a63..26a5e46fdf5 100644 --- a/src/plugins/qmljsinspector/qmljsclientproxy.cpp +++ b/src/plugins/qmljsinspector/qmljsclientproxy.cpp @@ -89,6 +89,8 @@ void ClientProxy::connectToServer() SIGNAL(animationSpeedChanged(qreal))); connect(m_observerClient, SIGNAL(designModeBehaviorChanged(bool)), SIGNAL(designModeBehaviorChanged(bool))); + connect(m_observerClient, SIGNAL(showAppOnTopChanged(bool)), + SIGNAL(showAppOnTopChanged(bool))); connect(m_observerClient, SIGNAL(reloaded()), this, SIGNAL(serverReloaded())); connect(m_observerClient, SIGNAL(selectedColorChanged(QColor)), @@ -484,6 +486,12 @@ void ClientProxy::changeToSelectMarqueeTool() m_observerClient->changeToSelectMarqueeTool(); } +void ClientProxy::showAppOnTop(bool showOnTop) +{ + if (isConnected()) + m_observerClient->showAppOnTop(showOnTop); +} + void ClientProxy::createQmlObject(const QString &qmlText, int parentDebugId, const QStringList &imports, const QString &filename) { diff --git a/src/plugins/qmljsinspector/qmljsclientproxy.h b/src/plugins/qmljsinspector/qmljsclientproxy.h index 47e867863ab..50f9e4ad218 100644 --- a/src/plugins/qmljsinspector/qmljsclientproxy.h +++ b/src/plugins/qmljsinspector/qmljsclientproxy.h @@ -100,6 +100,7 @@ signals: void zoomToolActivated(); void animationSpeedChanged(qreal slowdownFactor); void designModeBehaviorChanged(bool inDesignMode); + void showAppOnTopChanged(bool showAppOnTop); void serverReloaded(); void selectedColorChanged(const QColor &color); void contextPathUpdated(const QStringList &contextPath); @@ -115,6 +116,7 @@ public slots: void changeToZoomTool(); void changeToSelectTool(); void changeToSelectMarqueeTool(); + void showAppOnTop(bool showOnTop); void createQmlObject(const QString &qmlText, int parentDebugId, const QStringList &imports, const QString &filename = QString()); void destroyQmlObject(int debugId); diff --git a/src/plugins/qmljsinspector/qmljsinspector.cpp b/src/plugins/qmljsinspector/qmljsinspector.cpp index a8690280dcf..a9bd4ea35a0 100644 --- a/src/plugins/qmljsinspector/qmljsinspector.cpp +++ b/src/plugins/qmljsinspector/qmljsinspector.cpp @@ -768,9 +768,9 @@ void InspectorUi::setupToolbar(bool doConnect) m_clientProxy, SLOT(changeToSelectTool())); connect(m_toolbar, SIGNAL(applyChangesFromQmlFileTriggered(bool)), this, SLOT(setApplyChangesToQmlObserver(bool))); + connect(m_toolbar, SIGNAL(showAppOnTopSelected(bool)), + m_clientProxy, SLOT(showAppOnTop(bool))); - connect(this, SIGNAL(livePreviewActivated(bool)), - m_toolbar, SLOT(setLivePreviewChecked(bool))); connect(m_clientProxy, SIGNAL(colorPickerActivated()), m_toolbar, SLOT(activateColorPicker())); connect(m_clientProxy, SIGNAL(selectToolActivated()), @@ -779,6 +779,8 @@ void InspectorUi::setupToolbar(bool doConnect) m_toolbar, SLOT(activateZoomTool())); connect(m_clientProxy, SIGNAL(designModeBehaviorChanged(bool)), m_toolbar, SLOT(setDesignModeBehavior(bool))); + connect(m_clientProxy, SIGNAL(showAppOnTopChanged(bool)), + m_toolbar, SLOT(setShowAppOnTop(bool))); connect(m_clientProxy, SIGNAL(selectedColorChanged(QColor)), m_toolbar, SLOT(setSelectedColor(QColor))); @@ -804,9 +806,9 @@ void InspectorUi::setupToolbar(bool doConnect) m_clientProxy, SLOT(changeToSelectTool())); disconnect(m_toolbar, SIGNAL(applyChangesFromQmlFileTriggered(bool)), this, SLOT(setApplyChangesToQmlObserver(bool))); + disconnect(m_toolbar, SIGNAL(showAppOnTopSelected(bool)), + m_clientProxy, SLOT(showAppOnTop(bool))); - disconnect(this, SIGNAL(livePreviewActivated(bool)), - m_toolbar, SLOT(setLivePreviewChecked(bool))); disconnect(m_clientProxy, SIGNAL(colorPickerActivated()), m_toolbar, SLOT(activateColorPicker())); disconnect(m_clientProxy, SIGNAL(selectToolActivated()), @@ -815,6 +817,8 @@ void InspectorUi::setupToolbar(bool doConnect) m_toolbar, SLOT(activateZoomTool())); disconnect(m_clientProxy, SIGNAL(designModeBehaviorChanged(bool)), m_toolbar, SLOT(setDesignModeBehavior(bool))); + disconnect(m_clientProxy, SIGNAL(showAppOnTopChanged(bool)), + m_toolbar, SLOT(setShowAppOnTop(bool))); disconnect(m_clientProxy, SIGNAL(selectedColorChanged(QColor)), m_toolbar, SLOT(setSelectedColor(QColor))); diff --git a/src/plugins/qmljsinspector/qmljsinspector.qrc b/src/plugins/qmljsinspector/qmljsinspector.qrc index 9881cc04982..f1e4ceb212e 100644 --- a/src/plugins/qmljsinspector/qmljsinspector.qrc +++ b/src/plugins/qmljsinspector/qmljsinspector.qrc @@ -19,5 +19,6 @@ <file>images/select-marquee-small.png</file> <file>images/color-picker-small-hicontrast.png</file> <file>images/observermode.png</file> + <file>images/app-on-top.png</file> </qresource> </RCC> diff --git a/src/plugins/qmljsinspector/qmljsinspectorconstants.h b/src/plugins/qmljsinspector/qmljsinspectorconstants.h index b5741b54744..ace17f09086 100644 --- a/src/plugins/qmljsinspector/qmljsinspectorconstants.h +++ b/src/plugins/qmljsinspector/qmljsinspectorconstants.h @@ -50,6 +50,7 @@ const char * const ZOOM_ACTION = "QmlInspector.Zoom"; const char * const COLOR_PICKER_ACTION = "QmlInspector.ColorPicker"; const char * const TO_QML_ACTION = "QmlInspector.ToQml"; const char * const FROM_QML_ACTION = "QmlInspector.FromQml"; +const char * const SHOW_APP_ON_TOP_ACTION = "QmlInspector.ShowAppOnTop"; // settings const char * const S_QML_INSPECTOR = "QML.Inspector"; diff --git a/src/plugins/qmljsinspector/qmljsobserverclient.cpp b/src/plugins/qmljsinspector/qmljsobserverclient.cpp index 2c63c719ce7..cb0a53a8f71 100644 --- a/src/plugins/qmljsinspector/qmljsobserverclient.cpp +++ b/src/plugins/qmljsinspector/qmljsobserverclient.cpp @@ -107,6 +107,10 @@ void QmlJSObserverClient::messageReceived(const QByteArray &message) bool inDesignMode; ds >> inDesignMode; emit designModeBehaviorChanged(inDesignMode); + } else if (type == "SHOW_APP_ON_TOP") { + bool showAppOnTop; + ds >> showAppOnTop; + emit showAppOnTopChanged(showAppOnTop); } else if (type == "RELOADED") { emit reloaded(); } else if (type == "COLOR_CHANGED") { @@ -337,6 +341,23 @@ void QmlJSObserverClient::changeToZoomTool() sendMessage(message); } +void QmlJSObserverClient::showAppOnTop(bool showOnTop) +{ + if (!m_connection || !m_connection->isConnected()) + return; + + QByteArray message; + QDataStream ds(&message, QIODevice::WriteOnly); + + ds << QByteArray("SHOW_APP_ON_TOP") + << showOnTop; + + if (debug) + qDebug() << "QmlJSObserverClient: Sending" <<"SHOWONTOP" << showOnTop; + + sendMessage(message); +} + void QmlJSObserverClient::createQmlObject(const QString &qmlText, int parentDebugId, const QStringList &imports, const QString &filename) { diff --git a/src/plugins/qmljsinspector/qmljsobserverclient.h b/src/plugins/qmljsinspector/qmljsobserverclient.h index 1e87bf94d3e..318ad8c50b9 100644 --- a/src/plugins/qmljsinspector/qmljsobserverclient.h +++ b/src/plugins/qmljsinspector/qmljsobserverclient.h @@ -62,6 +62,7 @@ public: void changeToSelectTool(); void changeToSelectMarqueeTool(); void changeToZoomTool(); + void showAppOnTop(bool showOnTop); void createQmlObject(const QString &qmlText, int parentDebugId, const QStringList &imports, const QString &filename); @@ -90,6 +91,7 @@ signals: void zoomToolActivated(); void animationSpeedChanged(qreal slowdownFactor); void designModeBehaviorChanged(bool inDesignMode); + void showAppOnTopChanged(bool showAppOnTop); void reloaded(); // the server has reloaded the document void contextPathUpdated(const QStringList &path); -- GitLab