diff --git a/cmake/QtCreatorAPI.cmake b/cmake/QtCreatorAPI.cmake index 993102e139a..f6387b7919f 100644 --- a/cmake/QtCreatorAPI.cmake +++ b/cmake/QtCreatorAPI.cmake @@ -496,11 +496,11 @@ function(add_qtc_library name) file(RELATIVE_PATH include_dir_relative_path ${PROJECT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) target_include_directories(${name} - PRIVATE ${_arg_INCLUDES} - PUBLIC + PRIVATE + ${_arg_INCLUDES} "$" + PUBLIC "$" - "$" "$" ) set_public_includes(${name} "${_arg_PUBLIC_INCLUDES}") @@ -755,10 +755,9 @@ function(add_qtc_plugin target_name) ${_arg_INCLUDES} "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_BINARY_DIR}/src" - PUBLIC "$" + PUBLIC "$" - "$" "$" ) set_public_includes(${target_name} "${_arg_PUBLIC_INCLUDES}") @@ -886,7 +885,7 @@ function(extend_qtc_target target_name) if (NOT IS_ABSOLUTE ${_arg_SOURCES_PREFIX}) set(_arg_SOURCES_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/${_arg_SOURCES_PREFIX}") endif() - target_include_directories(${target_name} PUBLIC $) + target_include_directories(${target_name} PRIVATE $) set(_arg_SOURCES ${prefixed_sources}) endif() diff --git a/cmake/QtCreatorIDEBranding.cmake b/cmake/QtCreatorIDEBranding.cmake index 7550b928634..1e10d7f0016 100644 --- a/cmake/QtCreatorIDEBranding.cmake +++ b/cmake/QtCreatorIDEBranding.cmake @@ -1,9 +1,9 @@ #BINARY_ARTIFACTS_BRANCH = master #PROJECT_USER_FILE_EXTENSION = .user -set(IDE_VERSION "4.12.0") # The IDE version. +set(IDE_VERSION "4.12.1") # The IDE version. set(IDE_VERSION_COMPAT "4.12.0") # The IDE Compatibility version. -set(IDE_VERSION_DISPLAY "4.12.0") # The IDE display version. +set(IDE_VERSION_DISPLAY "4.12.1") # The IDE display version. set(IDE_COPYRIGHT_YEAR "2020") # The IDE current copyright year. set(IDE_SETTINGSVARIANT "QtProject") # The IDE settings variation. diff --git a/doc/qtcreator/src/editors/creator-coding-edit-mode.qdoc b/doc/qtcreator/src/editors/creator-coding-edit-mode.qdoc index 56be275326d..c470d183be3 100644 --- a/doc/qtcreator/src/editors/creator-coding-edit-mode.qdoc +++ b/doc/qtcreator/src/editors/creator-coding-edit-mode.qdoc @@ -130,8 +130,10 @@ \uicontrol {Default line endings} field. To set the line endings to use for a project, select \uicontrol Projects > - \uicontrol {Project Settings} > \uicontrol Editor. For more information, - see \l {Specifying Editor Settings}. + \uicontrol {Project Settings} > \uicontrol Editor. + \if defined(qtcreator) + For more information, see \l {Specifying Editor Settings}. + \endif \section1 Splitting the Editor View diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-settings-run-desktop.qdocinc b/doc/qtcreator/src/projects/creator-only/creator-projects-settings-run-desktop.qdocinc index e0b1c7187e4..732090a5238 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-settings-run-desktop.qdocinc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-settings-run-desktop.qdocinc @@ -53,7 +53,7 @@ To disable library linking for the current project, deselect the \uicontrol {Add build library search path to PATH} check box. To disable library linking for all projects, select \uicontrol Tools > - \uicontrol Options > \uicontrol General, and then deselect the + \uicontrol Options > \uicontrol {Build & Run}, and then deselect the \uicontrol {Add linker library search paths to run environment} check box. The \uicontrol {Use debug version of frameworks (DYLD_IMAGE_SUFFIX=_debug)} option diff --git a/doc/qtcreator/src/qtquick/qtquick-adding-dynamics.qdoc b/doc/qtcreator/src/qtquick/qtquick-adding-dynamics.qdoc index a2e4b5865a6..9370ae848f8 100644 --- a/doc/qtcreator/src/qtquick/qtquick-adding-dynamics.qdoc +++ b/doc/qtcreator/src/qtquick/qtquick-adding-dynamics.qdoc @@ -26,7 +26,7 @@ /*! \contentspage index.html \page qtquick-adding-dynamics.html - \previouspage qtquick-fonts.html + \previouspage creator-quick-ui-forms.html \nextpage studio-timeline.html \title Adding Dynamics diff --git a/doc/qtcreator/src/qtquick/qtquick-components.qdoc b/doc/qtcreator/src/qtquick/qtquick-components.qdoc index 4266a4d7d0c..611dd97255e 100644 --- a/doc/qtcreator/src/qtquick/qtquick-components.qdoc +++ b/doc/qtcreator/src/qtquick/qtquick-components.qdoc @@ -33,7 +33,7 @@ \contentspage index.html \page quick-components.html \if defined(qtdesignstudio) - \previouspage studio-prototyping.html + \previouspage quick-uis.html \else \previouspage creator-using-qt-quick-designer.html \endif diff --git a/doc/qtcreator/src/qtquick/qtquick-ui-forms.qdoc b/doc/qtcreator/src/qtquick/qtquick-ui-forms.qdoc index 49f682d7ce7..14bb305be16 100644 --- a/doc/qtcreator/src/qtquick/qtquick-ui-forms.qdoc +++ b/doc/qtcreator/src/qtquick/qtquick-ui-forms.qdoc @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2019 The Qt Company Ltd. +** Copyright (C) 2020 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Creator documentation. @@ -34,11 +34,7 @@ \contentspage index.html \page creator-quick-ui-forms.html \previouspage qtquick-annotations.html - \if defined(qtdesignstudio) - \nextpage creator-live-preview.html - \else - \nextpage creator-qml-modules-with-plugins.html - \endif + \nextpage qtquick-adding-dynamics.html \title Qt Quick UI Forms diff --git a/qbs/modules/qtc/qtc.qbs b/qbs/modules/qtc/qtc.qbs index 584a211d3a1..aa30add4a81 100644 --- a/qbs/modules/qtc/qtc.qbs +++ b/qbs/modules/qtc/qtc.qbs @@ -4,10 +4,10 @@ import qbs.FileInfo import "qtc.js" as HelperFunctions Module { - property string qtcreator_display_version: '4.12.0' + property string qtcreator_display_version: '4.12.1' property string ide_version_major: '4' property string ide_version_minor: '12' - property string ide_version_release: '0' + property string ide_version_release: '1' property string qtcreator_version: ide_version_major + '.' + ide_version_minor + '.' + ide_version_release diff --git a/qtcreator_ide_branding.pri b/qtcreator_ide_branding.pri index 19b31502f38..f9031c5982d 100644 --- a/qtcreator_ide_branding.pri +++ b/qtcreator_ide_branding.pri @@ -1,6 +1,6 @@ -QTCREATOR_VERSION = 4.12.0 +QTCREATOR_VERSION = 4.12.1 QTCREATOR_COMPAT_VERSION = 4.12.0 -QTCREATOR_DISPLAY_VERSION = 4.12.0 +QTCREATOR_DISPLAY_VERSION = 4.12.1 QTCREATOR_COPYRIGHT_YEAR = 2020 BINARY_ARTIFACTS_BRANCH = 4.12 diff --git a/share/qtcreator/CMakeLists.txt b/share/qtcreator/CMakeLists.txt index 05f64cc2f15..303fb9c7d0b 100644 --- a/share/qtcreator/CMakeLists.txt +++ b/share/qtcreator/CMakeLists.txt @@ -1,25 +1,42 @@ -set(template_directories android cplusplus debugger glsl modeleditor qml qmldesigner - qmlicons qml-type-descriptions schemes scripts snippets styles templates themes welcomescreen) +set(resource_directories + android + cplusplus + debugger + glsl + indexer_preincludes + modeleditor + qml + qmldesigner + qmlicons + qml-type-descriptions + schemes + snippets + styles + templates + themes +) + +if (APPLE) + set(resource_directories ${resource_directories} scripts) +endif() add_custom_target(copy_share_to_builddir ALL COMMENT Copy files into build directory VERBATIM ) -foreach(dir IN ITEMS ${template_directories}) +# copy resource directories during build +foreach(dir IN ITEMS ${resource_directories}) add_custom_command(TARGET copy_share_to_builddir POST_BUILD COMMAND "${CMAKE_COMMAND}" -E copy_directory "${dir}" "${PROJECT_BINARY_DIR}/${IDE_DATA_PATH}/${dir}" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" - COMMENT Copy files into build directory + COMMENT Copy resource directories into build directory VERBATIM ) endforeach() -install(DIRECTORY ${template_directories} DESTINATION "${IDE_DATA_PATH}") -install( - FILES indexer_preincludes/qglobal.h indexer_preincludes/windows.h - DESTINATION "${IDE_DATA_PATH}/indexer_preincludes" -) +# create install rule for resource directories +install(DIRECTORY ${resource_directories} DESTINATION "${IDE_DATA_PATH}") add_subdirectory(translations) diff --git a/share/qtcreator/debugger/stdtypes.py b/share/qtcreator/debugger/stdtypes.py index b08b9d603de..9d5cd0029ac 100644 --- a/share/qtcreator/debugger/stdtypes.py +++ b/share/qtcreator/debugger/stdtypes.py @@ -283,7 +283,8 @@ def qdump__std__map(d, value): return # stuff is actually (color, pad) with 'I@', but we can save cycles/ - (compare, stuff, parent, left, right, size) = value.split('pppppp') + (compare, stuff, parent, left, right) = value.split('ppppp') + size = value["_M_t"]["_M_impl"]["_M_node_count"].integer() d.check(0 <= size and size <= 100 * 1000 * 1000) d.putItemCount(size) diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ComboBox.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ComboBox.qml index b3e8fda3685..2d70e40b1d5 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ComboBox.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ComboBox.qml @@ -38,6 +38,10 @@ StudioControls.ComboBox { enum ValueType { String, Integer, Enum } property int valueType: ComboBox.ValueType.Enum + onModelChanged: colorLogic.invalidate() + + // This is available in all editors. + onValueTypeChanged: { if (comboBox.valueType === ComboBox.ValueType.Integer) comboBox.useInteger = true @@ -97,28 +101,34 @@ StudioControls.ComboBox { comboBox.valueFromBackendChanged() } else { switch (comboBox.valueType) { - case ComboBox.ValueType.String: - if (comboBox.currentText !== comboBox.backendValue.value) - comboBox.currentText = comboBox.backendValue.value - break - case ComboBox.ValueType.Integer: - if (comboBox.currentIndex !== comboBox.backendValue.value) - comboBox.currentIndex = comboBox.backendValue.value - break - case ComboBox.ValueType.Enum: - default: - var enumString = comboBox.backendValue.enumeration - - if (enumString === "") - enumString = comboBox.backendValue.value - - var index = comboBox.find(enumString) - + case ComboBox.ValueType.String: + if (comboBox.currentText !== comboBox.backendValue.value) { + var index = comboBox.find(comboBox.backendValue.value) if (index < 0) index = 0 if (index !== comboBox.currentIndex) comboBox.currentIndex = index + } + break + case ComboBox.ValueType.Integer: + if (comboBox.currentIndex !== comboBox.backendValue.value) + comboBox.currentIndex = comboBox.backendValue.value + break + case ComboBox.ValueType.Enum: + default: + var enumString = comboBox.backendValue.enumeration + + if (enumString === "") + enumString = comboBox.backendValue.value + + index = comboBox.find(enumString) + + if (index < 0) + index = 0 + + if (index !== comboBox.currentIndex) + comboBox.currentIndex = index } } @@ -137,15 +147,15 @@ StudioControls.ComboBox { return switch (comboBox.valueType) { - case ComboBox.ValueType.String: - comboBox.backendValue.value = comboBox.currentText - break - case ComboBox.ValueType.Integer: - comboBox.backendValue.value = comboBox.currentIndex - break - case ComboBox.ValueType.Enum: - default: - comboBox.backendValue.setEnumeration(comboBox.scope, comboBox.currentText) + case ComboBox.ValueType.String: + comboBox.backendValue.value = comboBox.currentText + break + case ComboBox.ValueType.Integer: + comboBox.backendValue.value = comboBox.currentIndex + break + case ComboBox.ValueType.Enum: + default: + comboBox.backendValue.setEnumeration(comboBox.scope, comboBox.currentText) } } diff --git a/src/libs/advanceddockingsystem/dockareawidget.cpp b/src/libs/advanceddockingsystem/dockareawidget.cpp index 16bd88f5716..6e7f9d5c993 100644 --- a/src/libs/advanceddockingsystem/dockareawidget.cpp +++ b/src/libs/advanceddockingsystem/dockareawidget.cpp @@ -215,6 +215,7 @@ namespace ADS DockManager *m_dockManager = nullptr; bool m_updateTitleBarButtons = false; DockWidgetAreas m_allowedAreas = AllDockAreas; + QSize m_minSizeHint; /** * Private data constructor @@ -264,6 +265,22 @@ namespace ADS * Udpates the enable state of the close and detach button */ void updateTitleBarButtonStates(); + + /** + * Scans all contained dock widgets for the max. minimum size hint + */ + void updateMinimumSizeHint() + { + m_minSizeHint = QSize(); + for (int i = 0; i < m_contentsLayout->count(); ++i) + { + auto widget = m_contentsLayout->widget(i); + m_minSizeHint.setHeight(qMax(m_minSizeHint.height(), + widget->minimumSizeHint().height())); + m_minSizeHint.setWidth(qMax(m_minSizeHint.width(), + widget->minimumSizeHint().width())); + } + } }; // struct DockAreaWidgetPrivate @@ -349,6 +366,10 @@ namespace ADS d->tabBar()->blockSignals(false); tabWidget->setVisible(!dockWidget->isClosed()); dockWidget->setProperty(INDEX_PROPERTY, index); + d->m_minSizeHint.setHeight(qMax(d->m_minSizeHint.height(), + dockWidget->minimumSizeHint().height())); + d->m_minSizeHint.setWidth(qMax(d->m_minSizeHint.width(), + dockWidget->minimumSizeHint().width())); if (activate) { setCurrentIndex(index); } @@ -381,6 +402,7 @@ namespace ADS d->updateTitleBarButtonStates(); updateTitleBarVisibility(); + d->updateMinimumSizeHint(); auto topLevelDockWidget = dockContainerWidget->topLevelDockWidget(); if (topLevelDockWidget) { topLevelDockWidget->emitTopLevelChanged(true); @@ -683,4 +705,9 @@ namespace ADS DockAreaTitleBar *DockAreaWidget::titleBar() const { return d->m_titleBar; } + QSize DockAreaWidget::minimumSizeHint() const + { + return d->m_minSizeHint.isValid() ? d->m_minSizeHint : Super::minimumSizeHint(); + } + } // namespace ADS diff --git a/src/libs/advanceddockingsystem/dockareawidget.h b/src/libs/advanceddockingsystem/dockareawidget.h index 9c23584ae78..74ab85c69f2 100644 --- a/src/libs/advanceddockingsystem/dockareawidget.h +++ b/src/libs/advanceddockingsystem/dockareawidget.h @@ -291,6 +291,13 @@ public: */ void closeOtherAreas(); + /** + * Returns the largest minimumSizeHint() of the dock widgets in this + * area. + * The minimum size hint is updated if a dock widget is removed or added. + */ + virtual QSize minimumSizeHint() const override; + signals: /** * This signal is emitted when user clicks on a tab at an index. diff --git a/src/libs/advanceddockingsystem/dockwidget.cpp b/src/libs/advanceddockingsystem/dockwidget.cpp index 760f425ae78..c703b0a6650 100644 --- a/src/libs/advanceddockingsystem/dockwidget.cpp +++ b/src/libs/advanceddockingsystem/dockwidget.cpp @@ -83,6 +83,7 @@ namespace ADS QSize m_toolBarIconSizeFloating = QSize(24, 24); bool m_isFloatingTopLevel = false; QList m_titleBarActions; + DockWidget::eMinimumSizeHintMode m_minimumSizeHintMode = DockWidget::MinimumSizeHintFromDockWidget; /** * Private data constructor @@ -317,6 +318,11 @@ namespace ADS } } + void DockWidget::setMinimumSizeHintMode(eMinimumSizeHintMode mode) + { + d->m_minimumSizeHintMode = mode; + } + void DockWidget::toggleView(bool open) { // If the toggle view action mode is ActionModeShow, then Open is always @@ -545,7 +551,13 @@ namespace ADS void DockWidget::setClosedState(bool closed) { d->m_closed = closed; } - QSize DockWidget::minimumSizeHint() const { return QSize(60, 40); } + QSize DockWidget::minimumSizeHint() const + { + if (d->m_minimumSizeHintMode == DockWidget::MinimumSizeHintFromDockWidget || !d->m_widget) + return QSize(60, 40); + else + return d->m_widget->minimumSizeHint(); + } void DockWidget::setFloating() { @@ -587,6 +599,7 @@ namespace ADS floatingWidget->hide(); } deleteDockWidget(); + emit closed(); } else { toggleView(false); } diff --git a/src/libs/advanceddockingsystem/dockwidget.h b/src/libs/advanceddockingsystem/dockwidget.h index 0d6efa28d02..687704e3653 100644 --- a/src/libs/advanceddockingsystem/dockwidget.h +++ b/src/libs/advanceddockingsystem/dockwidget.h @@ -184,6 +184,17 @@ public: */ enum eInsertMode { AutoScrollArea, ForceScrollArea, ForceNoScrollArea }; + /** + * The mode of the minimumSizeHint() that is returned by the DockWidget + * minimumSizeHint() function. + * To ensure, that a dock widget does not block resizing, the dock widget + * reimplements minimumSizeHint() function to return a very small minimum + * size hint. If you would like to adhere the minimumSizeHint() from the + * content widget, the set the minimumSizeHintMode() to + * MinimumSizeHintFromContent. + */ + enum eMinimumSizeHintMode { MinimumSizeHintFromDockWidget, MinimumSizeHintFromContent }; + /** * This mode configures the behavior of the toggle view action. * If the mode if ActionModeToggle, then the toggle view action is @@ -218,7 +229,8 @@ public: virtual ~DockWidget() override; /** - * We return a fixed minimum size hint for all dock widgets + * We return a fixed minimum size hint or the size hint of the content + * widget if minimum size hint mode is MinimumSizeHintFromContent */ virtual QSize minimumSizeHint() const override; @@ -327,6 +339,13 @@ public: */ void setToggleViewActionMode(eToggleViewActionMode mode); + /** + * Configures the minimum size hint that is returned by the + * minimumSizeHint() function. + * \see eMinimumSizeHintMode for a detailed description + */ + void setMinimumSizeHintMode(eMinimumSizeHintMode mode); + /** * Sets the dock widget icon that is shown in tabs and in toggle view * actions @@ -339,13 +358,10 @@ public: QIcon icon() const; /** - * If the WithToolBar layout flag is enabled, then this function returns - * the dock widget toolbar. If the flag is disabled, the function returns - * a nullptr. * This function returns the dock widget top tool bar. * If no toolbar is assigned, this function returns nullptr. To get a valid * toolbar you either need to create a default empty toolbar via - * createDefaultToolBar() function or you need to assign you custom + * createDefaultToolBar() function or you need to assign your custom * toolbar via setToolBar(). */ QToolBar *toolBar() const; diff --git a/src/libs/advanceddockingsystem/floatingdockcontainer.cpp b/src/libs/advanceddockingsystem/floatingdockcontainer.cpp index c245dcb2066..18c70834dd7 100644 --- a/src/libs/advanceddockingsystem/floatingdockcontainer.cpp +++ b/src/libs/advanceddockingsystem/floatingdockcontainer.cpp @@ -73,6 +73,7 @@ namespace ADS QPoint m_dragStartMousePosition; DockContainerWidget *m_dropContainer = nullptr; DockAreaWidget *m_singleDockArea = nullptr; + QPoint m_dragStartPos; QWidget *m_mouseEventHandler = nullptr; FloatingWidgetTitleBar *m_titleBar = nullptr; @@ -107,25 +108,30 @@ namespace ADS q->setWindowTitle(text); } + /** + * Reflect the current dock widget title in the floating widget windowTitle() + * depending on the DockManager::FloatingContainerHasWidgetTitle flag + */ void reflectCurrentWidget(DockWidget *currentWidget) { // reflect CurrentWidget's title if configured to do so, otherwise display application name as window title - if (testConfigFlag(DockManager::FloatingContainerHasWidgetTitle)) { + if (testConfigFlag(DockManager::FloatingContainerHasWidgetTitle)) setWindowTitle(currentWidget->windowTitle()); - } else { + else setWindowTitle(QApplication::applicationDisplayName()); - } - // reflect CurrentWidget's icon if configured to do so, otherwise display application icon as window icon - QIcon CurrentWidgetIcon = currentWidget->icon(); - if (testConfigFlag(DockManager::FloatingContainerHasWidgetIcon) - && !CurrentWidgetIcon.isNull()) - { + // reflect currentWidget's icon if configured to do so, otherwise display application icon as window icon + QIcon currentWidgetIcon = currentWidget->icon(); + if (testConfigFlag(DockManager::FloatingContainerHasWidgetIcon) && !currentWidgetIcon.isNull()) q->setWindowIcon(currentWidget->icon()); - } else { + else q->setWindowIcon(QApplication::windowIcon()); - } } + + /** + * Handles escape key press when dragging around the floating widget + */ + void handleEscapeKey(); }; // class FloatingDockContainerPrivate FloatingDockContainerPrivate::FloatingDockContainerPrivate(FloatingDockContainer *parent) @@ -135,17 +141,15 @@ namespace ADS void FloatingDockContainerPrivate::titleMouseReleaseEvent() { setState(DraggingInactive); - if (!m_dropContainer) { + if (!m_dropContainer) return; - } if (m_dockManager->dockAreaOverlay()->dropAreaUnderCursor() != InvalidDockWidgetArea || m_dockManager->containerOverlay()->dropAreaUnderCursor() != InvalidDockWidgetArea) { // Resize the floating widget to the size of the highlighted drop area rectangle DockOverlay *overlay = m_dockManager->containerOverlay(); - if (!overlay->dropOverlayRect().isValid()) { + if (!overlay->dropOverlayRect().isValid()) overlay = m_dockManager->dockAreaOverlay(); - } QRect rect = overlay->dropOverlayRect(); int frameWidth = (q->frameSize().width() - q->rect().width()) / 2; @@ -165,26 +169,22 @@ namespace ADS void FloatingDockContainerPrivate::updateDropOverlays(const QPoint &globalPosition) { - if (!q->isVisible() || !m_dockManager) { + if (!q->isVisible() || !m_dockManager) return; - } auto containers = m_dockManager->dockContainers(); DockContainerWidget *topContainer = nullptr; for (auto containerWidget : containers) { - if (!containerWidget->isVisible()) { + if (!containerWidget->isVisible()) continue; - } - if (m_dockContainer == containerWidget) { + if (m_dockContainer == containerWidget) continue; - } QPoint mappedPos = containerWidget->mapFromGlobal(globalPosition); if (containerWidget->rect().contains(mappedPos)) { - if (!topContainer || containerWidget->isInFrontOf(topContainer)) { + if (!topContainer || containerWidget->isInFrontOf(topContainer)) topContainer = containerWidget; - } } } @@ -223,6 +223,14 @@ namespace ADS } } + void FloatingDockContainerPrivate::handleEscapeKey() + { + qCInfo(adsLog) << Q_FUNC_INFO; + setState(DraggingInactive); + m_dockManager->containerOverlay()->hideOverlay(); + m_dockManager->dockAreaOverlay()->hideOverlay(); + } + FloatingDockContainer::FloatingDockContainer(DockManager *dockManager) : FloatingWidgetBaseType(dockManager) , d(new FloatingDockContainerPrivate(this)) @@ -268,9 +276,8 @@ namespace ADS d->m_titleBar->enableCloseButton(isClosable()); auto dw = topLevelDockWidget(); - if (dw) { + if (dw) dw->emitTopLevelChanged(true); - } } FloatingDockContainer::FloatingDockContainer(DockWidget *dockWidget) @@ -281,17 +288,16 @@ namespace ADS d->m_titleBar->enableCloseButton(isClosable()); auto dw = topLevelDockWidget(); - if (dw) { + if (dw) dw->emitTopLevelChanged(true); - } } FloatingDockContainer::~FloatingDockContainer() { qCInfo(adsLog) << Q_FUNC_INFO; - if (d->m_dockManager) { + if (d->m_dockManager) d->m_dockManager->removeFloatingWidget(this); - } + delete d; } @@ -312,6 +318,10 @@ namespace ADS QWidget::moveEvent(event); switch (d->m_draggingState) { case DraggingMousePressed: + // TODO Is checking for windows only sufficient or has macOS also problems? + if (Utils::HostOsInfo::isWindowsHost()) + QApplication::instance()->installEventFilter(this); + d->setState(DraggingFloatingWidget); d->updateDropOverlays(QCursor::pos()); break; @@ -340,9 +350,8 @@ namespace ADS if (isClosable()) { auto dw = topLevelDockWidget(); if (dw && dw->features().testFlag(DockWidget::DockWidgetDeleteOnClose)) { - if (!dw->closeDockWidgetInternal()) { + if (!dw->closeDockWidgetInternal()) return; - } } this->hide(); @@ -352,19 +361,16 @@ namespace ADS void FloatingDockContainer::hideEvent(QHideEvent *event) { Super::hideEvent(event); - if (event->spontaneous()) { + if (event->spontaneous()) return; - } // Prevent toogleView() events during restore state - if (d->m_dockManager->isRestoringState()) { + if (d->m_dockManager->isRestoringState()) return; - } for (auto dockArea : d->m_dockContainer->openedDockAreas()) { - for (auto dockWidget : dockArea->openedDockWidgets()) { + for (auto dockWidget : dockArea->openedDockWidgets()) dockWidget->toggleView(false); - } } } @@ -379,22 +385,21 @@ namespace ADS // QEvent::NonClientAreaMouseButtonPress return the wrong mouse button // The event always returns Qt::RightButton even if the left button is clicked. // It is really great to work around the whole NonClientMouseArea bugs + + #if (QT_VERSION >= QT_VERSION_CHECK(5, 12, 2)) - if (event->type() - == QEvent:: - NonClientAreaMouseButtonPress /*&& QGuiApplication::mouseButtons().testFlag(Qt::LeftButton)*/) { - qCInfo(adsLog) << Q_FUNC_INFO << "QEvent::NonClientAreaMouseButtonPress" - << event->type(); - d->setState(DraggingMousePressed); - } + if (event->type() == QEvent::NonClientAreaMouseButtonPress + /*&& QGuiApplication::mouseButtons().testFlag(Qt::LeftButton)*/) #else if (event->type() == QEvent::NonClientAreaMouseButtonPress - && QGuiApplication::mouseButtons().testFlag(Qt::LeftButton)) { + && QGuiApplication::mouseButtons().testFlag(Qt::LeftButton)) +#endif + { qCInfo(adsLog) << Q_FUNC_INFO << "QEvent::NonClientAreaMouseButtonPress" << event->type(); + d->m_dragStartPos = pos(); d->setState(DraggingMousePressed); } -#endif } break; case DraggingMousePressed: @@ -440,6 +445,37 @@ namespace ADS return QWidget::event(event); } + bool FloatingDockContainer::eventFilter(QObject *watched, QEvent *event) + { + Q_UNUSED(watched); + // I have not found a way to detect non client area key press events to + // handle escape key presses. On Windows, if the escape key is pressed while + // dragging around a widget, the widget position is reset to its start position + // which in turn generates a QEvent::NonClientAreaMouseButtonRelease event + // if the mouse is outside of the widget after the move to its initial position + // or a QEvent::MouseButtonRelease event, if the mouse is inside of the widget + // after the position has been reset. + // So we can install an event filter on the application to get these events + // here to properly cancel dragging and hide the overlays. + // If we are in DraggingFloatingWidget state, it means the widget + // has been dragged already but if the position is the same like + // the start position, then this is an indication that the escape + // key has been pressed. + if (event->type() == QEvent::MouseButtonRelease || event->type() == QEvent::NonClientAreaMouseButtonRelease) + { + qCInfo(adsLog) << Q_FUNC_INFO << "QEvent::MouseButtonRelease or QEvent::NonClientAreaMouseButtonRelease" + << "d->m_draggingState " << d->m_draggingState; + QApplication::instance()->removeEventFilter(this); + if (d->m_dragStartPos == pos()) + { + d->handleEscapeKey(); + return true; + } + return false; + } + return false; + } + void FloatingDockContainer::startFloating(const QPoint &dragStartMousePos, const QSize &size, eDragState dragState, diff --git a/src/libs/advanceddockingsystem/floatingdockcontainer.h b/src/libs/advanceddockingsystem/floatingdockcontainer.h index 83ca1edddeb..1b6a9d5b2f7 100644 --- a/src/libs/advanceddockingsystem/floatingdockcontainer.h +++ b/src/libs/advanceddockingsystem/floatingdockcontainer.h @@ -188,6 +188,7 @@ protected: // reimplements QWidget virtual void closeEvent(QCloseEvent *event) override; virtual void hideEvent(QHideEvent *event) override; virtual void showEvent(QShowEvent *event) override; + virtual bool eventFilter(QObject *watched, QEvent *event) override; public: using Super = QWidget; diff --git a/src/libs/clangsupport/CMakeLists.txt b/src/libs/clangsupport/CMakeLists.txt index b7e02db6457..093213147b2 100644 --- a/src/libs/clangsupport/CMakeLists.txt +++ b/src/libs/clangsupport/CMakeLists.txt @@ -8,6 +8,8 @@ add_qtc_library(ClangSupport CLANG_RESOURCE_DIR="${IDE_LIBEXEC_PATH}/clang/lib/clang/${CLANG_VERSION}/include" CLANG_BINDIR="${IDE_LIBEXEC_PATH}/clang/bin" DEFINES CLANGSUPPORT_BUILD_LIB + PUBLIC_INCLUDES + "${CMAKE_CURRENT_LIST_DIR}" SOURCES alivemessage.cpp alivemessage.h annotationsmessage.cpp annotationsmessage.h diff --git a/src/libs/modelinglib/CMakeLists.txt b/src/libs/modelinglib/CMakeLists.txt index 55c6e3a951d..db79b99ee33 100644 --- a/src/libs/modelinglib/CMakeLists.txt +++ b/src/libs/modelinglib/CMakeLists.txt @@ -3,6 +3,8 @@ add_qtc_library(Modeling DEPENDS Qt5::Widgets Utils PUBLIC_DEPENDS OptionalSvg INCLUDES qtserialization/inc + PUBLIC_INCLUDES + "${CMAKE_CURRENT_LIST_DIR}" SOURCES qmt/config/configcontroller.cpp qmt/config/configcontroller.h qmt/config/sourcepos.cpp qmt/config/sourcepos.h diff --git a/src/libs/sqlite/CMakeLists.txt b/src/libs/sqlite/CMakeLists.txt index 62c8609a7af..36737ca1a28 100644 --- a/src/libs/sqlite/CMakeLists.txt +++ b/src/libs/sqlite/CMakeLists.txt @@ -4,7 +4,9 @@ add_qtc_library(Sqlite SQLITE_ENABLE_UNLOCK_NOTIFY SQLITE_ENABLE_COLUMN_METADATA BUILD_SQLITE_LIBRARY DEPENDS Qt5::Core Threads::Threads ${CMAKE_DL_LIBS} - PUBLIC_INCLUDES ../3rdparty/sqlite + PUBLIC_INCLUDES + "${CMAKE_CURRENT_LIST_DIR}" + ../3rdparty/sqlite SOURCES ../3rdparty/sqlite/sqlite3.c createtablesqlstatementbuilder.cpp createtablesqlstatementbuilder.h diff --git a/src/plugins/cpptools/doxygengenerator.cpp b/src/plugins/cpptools/doxygengenerator.cpp index 702f92e5247..398a31a8764 100644 --- a/src/plugins/cpptools/doxygengenerator.cpp +++ b/src/plugins/cpptools/doxygengenerator.cpp @@ -33,6 +33,7 @@ #include #include +#include #include #include #include @@ -81,7 +82,7 @@ QString DoxygenGenerator::generate(QTextCursor cursor, const QTextCursor initialCursor = cursor; const QChar &c = cursor.document()->characterAt(cursor.position()); - if (!c.isLetter() && c != QLatin1Char('_')) + if (!c.isLetter() && c != QLatin1Char('_') && c != QLatin1Char('[')) return QString(); // Try to find what would be the declaration we are interested in. @@ -109,8 +110,12 @@ QString DoxygenGenerator::generate(QTextCursor cursor, QString declCandidate = cursor.selectedText(); - if (declCandidate.startsWith(QLatin1String("Q_INVOKABLE"))) - declCandidate = declCandidate.mid(11); + // remove attributes like [[nodiscard]] because + // Document::Ptr::parse(Document::ParseDeclaration) fails on attributes + static QRegularExpression attribute("\\[\\s*\\[.*\\]\\s*\\]"); + declCandidate.replace(attribute, ""); + + declCandidate.replace("Q_INVOKABLE", ""); declCandidate.replace(QChar::ParagraphSeparator, QLatin1Char('\n')); diff --git a/src/plugins/debugger/simplifytype.cpp b/src/plugins/debugger/simplifytype.cpp index f8bea299f61..202756a3edb 100644 --- a/src/plugins/debugger/simplifytype.cpp +++ b/src/plugins/debugger/simplifytype.cpp @@ -118,6 +118,7 @@ QString simplifyType(const QString &typeIn) type.remove(0, 7); type.replace("short int", "short"); + type.replace("long long int", "long long"); const bool isLibCpp = type.contains("std::__1"); type.replace("std::__cxx11::", "std::"); diff --git a/src/plugins/mcusupport/mcusupportconstants.h b/src/plugins/mcusupport/mcusupportconstants.h index 88489b1196c..30d28f44df4 100644 --- a/src/plugins/mcusupport/mcusupportconstants.h +++ b/src/plugins/mcusupport/mcusupportconstants.h @@ -32,9 +32,12 @@ const char DEVICE_TYPE[] = "McuSupport.DeviceType"; const char DEVICE_ID[] = "McuSupport.Device"; const char RUNCONFIGURATION[] = "McuSupport.RunConfiguration"; const char SETTINGS_ID[] = "CC.McuSupport.Configuration"; + const char KIT_MCUTARGET_VENDOR_KEY[] = "McuSupport.McuTargetVendor"; const char KIT_MCUTARGET_MODEL_KEY[] = "McuSupport.McuTargetModel"; const char KIT_MCUTARGET_SDKVERSION_KEY[] = "McuSupport.McuTargetSdkVersion"; +const char KIT_MCUTARGET_KITVERSION_KEY[] = "McuSupport.McuTargetKitVersion"; +const char KIT_MCUTARGET_COLORDEPTH_KEY[] = "McuSupport.McuTargetColorDepth"; const char SETTINGS_GROUP[] = "McuSupport"; const char SETTINGS_KEY_PACKAGE_PREFIX[] = "Package_"; diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp index 719030e3feb..d9aac20374a 100644 --- a/src/plugins/mcusupport/mcusupportoptions.cpp +++ b/src/plugins/mcusupport/mcusupportoptions.cpp @@ -61,6 +61,8 @@ namespace McuSupport { namespace Internal { +static const int KIT_VERSION = 2; // Bumps up whenever details in Kit creation change + static QString packagePathFromSettings(const QString &settingsKey, const QString &defaultPath = {}) { QSettings *s = Core::ICore::settings(); @@ -319,13 +321,13 @@ QVariant McuToolChainPackage::debuggerId() const } McuTarget::McuTarget(const QString &vendor, const QString &platform, - const QVector &packages, McuToolChainPackage *toolChainPackage) + const QVector &packages, + const McuToolChainPackage *toolChainPackage) : m_vendor(vendor) , m_qulPlatform(platform) , m_packages(packages) , m_toolChainPackage(toolChainPackage) { - QTC_CHECK(m_toolChainPackage == nullptr || m_packages.contains(m_toolChainPackage)); } QString McuTarget::vendor() const @@ -338,7 +340,7 @@ QVector McuTarget::packages() const return m_packages; } -McuToolChainPackage *McuTarget::toolChainPackage() const +const McuToolChainPackage *McuTarget::toolChainPackage() const { return m_toolChainPackage; } @@ -467,16 +469,18 @@ static void setKitProperties(const QString &kitName, ProjectExplorer::Kit *k, const McuTarget* mcuTarget) { using namespace ProjectExplorer; + using namespace Constants; k->setUnexpandedDisplayName(kitName); - k->setValue(Constants::KIT_MCUTARGET_VENDOR_KEY, mcuTarget->vendor()); - k->setValue(Constants::KIT_MCUTARGET_MODEL_KEY, mcuTarget->qulPlatform()); - k->setValue(Constants::KIT_MCUTARGET_SDKVERSION_KEY, - McuSupportOptions::supportedQulVersion().toString()); + k->setValue(KIT_MCUTARGET_VENDOR_KEY, mcuTarget->vendor()); + k->setValue(KIT_MCUTARGET_MODEL_KEY, mcuTarget->qulPlatform()); + k->setValue(KIT_MCUTARGET_COLORDEPTH_KEY, mcuTarget->colorDepth()); + k->setValue(KIT_MCUTARGET_SDKVERSION_KEY, McuSupportOptions::supportedQulVersion().toString()); + k->setValue(KIT_MCUTARGET_KITVERSION_KEY, KIT_VERSION); k->setAutoDetected(true); k->makeSticky(); if (mcuTarget->toolChainPackage()->type() == McuToolChainPackage::TypeDesktop) - k->setDeviceTypeForIcon(Constants::DEVICE_TYPE); + k->setDeviceTypeForIcon(DEVICE_TYPE); QSet irrelevant = { SysRootKitAspect::id(), QtSupport::QtKitAspect::id() @@ -520,7 +524,7 @@ static void setKitDevice(ProjectExplorer::Kit *k, const McuTarget* mcuTarget) } static void setKitEnvironment(ProjectExplorer::Kit *k, const McuTarget* mcuTarget, - McuPackage *qtForMCUsSdkPackage) + const McuPackage *qtForMCUsSdkPackage) { using namespace ProjectExplorer; @@ -534,18 +538,17 @@ static void setKitEnvironment(ProjectExplorer::Kit *k, const McuTarget* mcuTarge && !CMakeProjectManager::CMakeToolManager::defaultCMakeTool()->hasFileApi()) pathAdditions.append(QDir::toNativeSeparators(qtForMCUsSdkPackage->path() + "/bin")); - QVector packagesIncludingSdk; - packagesIncludingSdk.reserve(mcuTarget->packages().size() + 1); - packagesIncludingSdk.append(mcuTarget->packages()); - packagesIncludingSdk.append(qtForMCUsSdkPackage); - - for (auto package : packagesIncludingSdk) { + auto processPackage = [&pathAdditions, &changes](const McuPackage *package) { if (package->addToPath()) pathAdditions.append(QDir::toNativeSeparators(package->path())); if (!package->environmentVariableName().isEmpty()) changes.append({package->environmentVariableName(), QDir::toNativeSeparators(package->path())}); - } + }; + for (auto package : mcuTarget->packages()) + processPackage(package); + processPackage(qtForMCUsSdkPackage); + pathAdditions.append("${Path}"); pathAdditions.append(QDir::toNativeSeparators(Core::ICore::libexecPath() + "/clang/bin")); const QString path = QLatin1String(Utils::HostOsInfo().isWindowsHost() ? "Path" : "PATH"); @@ -589,7 +592,7 @@ static void setKitQtVersionOptions(ProjectExplorer::Kit *k) QtSupport::QtKitAspect::setQtVersion(k, nullptr); } -QString McuSupportOptions::kitName(const McuTarget *mcuTarget) const +QString McuSupportOptions::kitName(const McuTarget *mcuTarget) { // TODO: get version from qulSdkPackage and insert into name const QString colorDepth = mcuTarget->colorDepth() > 0 @@ -604,28 +607,52 @@ QString McuSupportOptions::kitName(const McuTarget *mcuTarget) const .arg(supportedQulVersion().toString(), targetName, colorDepth); } -QList McuSupportOptions::existingKits(const McuTarget *mcuTargt) +QList McuSupportOptions::existingKits(const McuTarget *mcuTarget) { using namespace ProjectExplorer; - const QString mcuTargetKitName = kitName(mcuTargt); - return Utils::filtered(KitManager::kits(), [&mcuTargetKitName](Kit *kit) { - return kit->isAutoDetected() && kit->unexpandedDisplayName() == mcuTargetKitName; + using namespace Constants; + return Utils::filtered(KitManager::kits(), [mcuTarget](Kit *kit) { + return kit->isAutoDetected() + && kit->value(KIT_MCUTARGET_KITVERSION_KEY) == KIT_VERSION + && kit->value(KIT_MCUTARGET_SDKVERSION_KEY) == + McuSupportOptions::supportedQulVersion().toString() + && (!mcuTarget || ( + kit->value(KIT_MCUTARGET_VENDOR_KEY) == mcuTarget->vendor() + && kit->value(KIT_MCUTARGET_MODEL_KEY) == mcuTarget->qulPlatform() + && kit->value(KIT_MCUTARGET_COLORDEPTH_KEY) == mcuTarget->colorDepth() + )); }); } -ProjectExplorer::Kit *McuSupportOptions::newKit(const McuTarget *mcuTarget) +QList McuSupportOptions::outdatedKits() +{ + return Utils::filtered(ProjectExplorer::KitManager::kits(), [](ProjectExplorer::Kit *kit) { + return kit->isAutoDetected() + && !kit->value(Constants::KIT_MCUTARGET_VENDOR_KEY).isNull() + && kit->value(Constants::KIT_MCUTARGET_KITVERSION_KEY) != KIT_VERSION; + }); +} + +void McuSupportOptions::removeOutdatedKits() +{ + for (auto kit : McuSupportOptions::outdatedKits()) + ProjectExplorer::KitManager::deregisterKit(kit); +} + +ProjectExplorer::Kit *McuSupportOptions::newKit(const McuTarget *mcuTarget, + const McuPackage *qtForMCUsSdk) { using namespace ProjectExplorer; - const auto init = [this, mcuTarget](Kit *k) { + const auto init = [mcuTarget, qtForMCUsSdk](Kit *k) { KitGuard kitGuard(k); setKitProperties(kitName(mcuTarget), k, mcuTarget); setKitDevice(k, mcuTarget); setKitToolchains(k, mcuTarget->toolChainPackage()); setKitDebugger(k, mcuTarget->toolChainPackage()); - setKitEnvironment(k, mcuTarget, qtForMCUsSdkPackage); - setKitCMakeOptions(k, mcuTarget, qtForMCUsSdkPackage->path()); + setKitEnvironment(k, mcuTarget, qtForMCUsSdk); + setKitCMakeOptions(k, mcuTarget, qtForMCUsSdk->path()); setKitQtVersionOptions(k); k->setup(); diff --git a/src/plugins/mcusupport/mcusupportoptions.h b/src/plugins/mcusupport/mcusupportoptions.h index b87452cca5c..72d395090f6 100644 --- a/src/plugins/mcusupport/mcusupportoptions.h +++ b/src/plugins/mcusupport/mcusupportoptions.h @@ -132,11 +132,11 @@ class McuTarget : public QObject public: McuTarget(const QString &vendor, const QString &platform, const QVector &packages, - McuToolChainPackage *toolChainPackage); + const McuToolChainPackage *toolChainPackage); QString vendor() const; QVector packages() const; - McuToolChainPackage *toolChainPackage() const; + const McuToolChainPackage *toolChainPackage() const; QString qulPlatform() const; void setColorDepth(int colorDepth); int colorDepth() const; @@ -146,7 +146,7 @@ private: const QString m_vendor; const QString m_qulPlatform; const QVector m_packages; - McuToolChainPackage *m_toolChainPackage; + const McuToolChainPackage *m_toolChainPackage; int m_colorDepth = -1; }; @@ -165,10 +165,12 @@ public: void setQulDir(const Utils::FilePath &dir); static Utils::FilePath qulDirFromSettings(); - QString kitName(const McuTarget* mcuTarget) const; + static QString kitName(const McuTarget* mcuTarget); - QList existingKits(const McuTarget *mcuTargt); - ProjectExplorer::Kit *newKit(const McuTarget *mcuTarget); + static QList existingKits(const McuTarget *mcuTarget); + static QList outdatedKits(); + static void removeOutdatedKits(); + static ProjectExplorer::Kit *newKit(const McuTarget *mcuTarget, const McuPackage *qtForMCUsSdk); void populatePackagesAndTargets(); static void registerQchFiles(); static void registerExamples(); diff --git a/src/plugins/mcusupport/mcusupportoptionspage.cpp b/src/plugins/mcusupport/mcusupportoptionspage.cpp index e07899028d5..e4506b902d4 100644 --- a/src/plugins/mcusupport/mcusupportoptionspage.cpp +++ b/src/plugins/mcusupport/mcusupportoptionspage.cpp @@ -168,7 +168,7 @@ void McuSupportOptionsWidget::updateStatus() mcuTargetValid ? QString::fromLatin1( "A kit %1 for the selected target can be " "generated. Press Apply to generate it.") - .arg(m_options.kitName(mcuTarget)) + .arg(McuSupportOptions::kitName(mcuTarget)) : "Provide the package paths in order to create a kit " "for your target."); } @@ -231,14 +231,15 @@ void McuSupportOptionsWidget::apply() return; McuSupportOptions::registerQchFiles(); + McuSupportOptions::removeOutdatedKits(); const McuTarget *mcuTarget = currentMcuTarget(); if (!mcuTarget) return; - for (auto existingKit : m_options.existingKits(mcuTarget)) + for (auto existingKit : McuSupportOptions::existingKits(mcuTarget)) ProjectExplorer::KitManager::deregisterKit(existingKit); - m_options.newKit(mcuTarget); + McuSupportOptions::newKit(mcuTarget, m_options.qtForMCUsSdkPackage); } void McuSupportOptionsWidget::populateMcuTargetsComboBox() @@ -246,8 +247,8 @@ void McuSupportOptionsWidget::populateMcuTargetsComboBox() m_options.populatePackagesAndTargets(); m_mcuTargetsComboBox->clear(); m_mcuTargetsComboBox->addItems( - Utils::transform(m_options.mcuTargets, [this](McuTarget *t){ - return m_options.kitName(t); + Utils::transform(m_options.mcuTargets, [](McuTarget *t) { + return McuSupportOptions::kitName(t); })); updateStatus(); } diff --git a/src/plugins/projectexplorer/projectconfigurationaspects.cpp b/src/plugins/projectexplorer/projectconfigurationaspects.cpp index 44e765e3c19..588318de592 100644 --- a/src/plugins/projectexplorer/projectconfigurationaspects.cpp +++ b/src/plugins/projectexplorer/projectconfigurationaspects.cpp @@ -178,12 +178,12 @@ void BaseStringAspect::toMap(QVariantMap &map) const FilePath BaseStringAspect::filePath() const { - return FilePath::fromString(d->m_value); + return FilePath::fromUserInput(d->m_value); } void BaseStringAspect::setFilePath(const FilePath &val) { - setValue(val.toString()); + setValue(val.toUserOutput()); } void BaseStringAspect::setLabelText(const QString &labelText) diff --git a/src/plugins/projectexplorer/runconfigurationaspects.cpp b/src/plugins/projectexplorer/runconfigurationaspects.cpp index 4ec47bca4e4..343ca369ea9 100644 --- a/src/plugins/projectexplorer/runconfigurationaspects.cpp +++ b/src/plugins/projectexplorer/runconfigurationaspects.cpp @@ -469,7 +469,7 @@ void ExecutableAspect::setPlaceHolderText(const QString &placeHolderText) void ExecutableAspect::setExecutable(const FilePath &executable) { - m_executable.setValue(executable.toString()); + m_executable.setFilePath(executable); m_executable.setShowToolTipOnLabel(true); } diff --git a/src/plugins/qmldesigner/CMakeLists.txt b/src/plugins/qmldesigner/CMakeLists.txt index 1650f83f089..ad7ad2831f4 100644 --- a/src/plugins/qmldesigner/CMakeLists.txt +++ b/src/plugins/qmldesigner/CMakeLists.txt @@ -6,7 +6,8 @@ add_qtc_plugin(QmlDesigner DESIGNER_CORE_LIBRARY IDE_LIBRARY_BASENAME=\"${IDE_LIBRARY_BASE_PATH}\" PUBLIC_INCLUDES - ${CMAKE_CURRENT_LIST_DIR}/designercore/include + "${CMAKE_CURRENT_LIST_DIR}" + "${CMAKE_CURRENT_LIST_DIR}/designercore/include" PLUGIN_DEPENDS Core ProjectExplorer QmlJSEditor QmakeProjectManager QmlProjectManager QtSupport TextEditor @@ -155,6 +156,7 @@ extend_qtc_plugin(QmlDesigner extend_qtc_plugin(QmlDesigner SOURCES_PREFIX ../../../share/qtcreator/qml/qmlpuppet/types + PUBLIC_INCLUDES ../../../share/qtcreator/qml/qmlpuppet/types SOURCES enumeration.h ) diff --git a/src/plugins/qmldesigner/components/componentcore/selectioncontext.cpp b/src/plugins/qmldesigner/components/componentcore/selectioncontext.cpp index 7dba86920d6..59a9454b095 100644 --- a/src/plugins/qmldesigner/components/componentcore/selectioncontext.cpp +++ b/src/plugins/qmldesigner/components/componentcore/selectioncontext.cpp @@ -78,7 +78,8 @@ QList SelectionContext::selectedModelNodes() const bool SelectionContext::hasSingleSelectedModelNode() const { - return view()->hasSelectedModelNodes(); + return view()->hasSingleSelectedModelNode() + && firstSelectedModelNode().isValid(); } AbstractView *SelectionContext::view() const diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp index 13230544ae5..caf0663dce7 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp @@ -103,11 +103,11 @@ ItemLibraryWidget::ItemLibraryWidget(QWidget *parent) : m_itemViewQuickWidget->rootContext()->setContextProperties( QVector{ - {"itemLibraryModel", QVariant::fromValue(m_itemLibraryModel.data())}, - {"itemLibraryIconWidth", m_itemIconSize.width()}, - {"itemLibraryIconHeight", m_itemIconSize.height()}, - {"rootView", QVariant::fromValue(this)}, - {"highlightColor", Utils::StyleHelper::notTooBrightHighlightColor()} + {{"itemLibraryModel"}, QVariant::fromValue(m_itemLibraryModel.data())}, + {{"itemLibraryIconWidth"}, m_itemIconSize.width()}, + {{"itemLibraryIconHeight"}, m_itemIconSize.height()}, + {{"rootView"}, QVariant::fromValue(this)}, + {{"highlightColor"}, Utils::StyleHelper::notTooBrightHighlightColor()} } ); diff --git a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp index 1c2d73be6dc..0d0fded7295 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp @@ -421,6 +421,9 @@ void NavigatorView::selectedNodesChanged(const QList &/*selectedNodeL void NavigatorView::updateItemSelection() { + if (!isAttached()) + return; + QItemSelection itemSelection; foreach (const ModelNode &node, selectedModelNodes()) { const QModelIndex index = indexForModelNode(node); diff --git a/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h b/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h index 6c91d4917c2..6e70169a6af 100644 --- a/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h +++ b/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h @@ -29,6 +29,7 @@ #include "propertycontainer.h" #include +#include namespace QmlDesigner { @@ -88,7 +89,7 @@ public: void addHints(const QHash &hints); private: - QExplicitlySharedDataPointer m_data; + QSharedDataPointer m_data; }; class QMLDESIGNERCORE_EXPORT ItemLibraryInfo : public QObject diff --git a/src/plugins/qmljseditor/qmljssemantichighlighter.cpp b/src/plugins/qmljseditor/qmljssemantichighlighter.cpp index 65e9b0ca2e5..b9ef9dc7469 100644 --- a/src/plugins/qmljseditor/qmljssemantichighlighter.cpp +++ b/src/plugins/qmljseditor/qmljssemantichighlighter.cpp @@ -269,8 +269,11 @@ protected: } } - if (type != SemanticHighlighter::UnknownType) - addUse(location, type); + if (type != SemanticHighlighter::UnknownType) { + // do not add uses of length 0 - this messes up highlighting (e.g. anon functions) + if (location.length != 0) + addUse(location, type); + } } void processTypeId(UiQualifiedId *typeId) diff --git a/src/shared/designerintegrationv2/CMakeLists.txt b/src/shared/designerintegrationv2/CMakeLists.txt index 8e2520d50e7..b527260fa49 100644 --- a/src/shared/designerintegrationv2/CMakeLists.txt +++ b/src/shared/designerintegrationv2/CMakeLists.txt @@ -4,9 +4,11 @@ endif() add_qtc_library(designerintegrationv2 STATIC DEPENDS Qt5::Designer Qt5::Widgets + PUBLIC_INCLUDES + "${CMAKE_CURRENT_LIST_DIR}" SOURCES - formresizer.cpp formresizer.h - sizehandlerect.cpp sizehandlerect.h - widgethostconstants.h - widgethost.cpp widgethost.h + formresizer.cpp formresizer.h + sizehandlerect.cpp sizehandlerect.h + widgethostconstants.h + widgethost.cpp widgethost.h ) diff --git a/src/shared/help/CMakeLists.txt b/src/shared/help/CMakeLists.txt index 442911b4b88..6aa583b1542 100644 --- a/src/shared/help/CMakeLists.txt +++ b/src/shared/help/CMakeLists.txt @@ -18,6 +18,7 @@ add_qtc_library(shared_help STATIC "${PLUGIN_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/shared_help_autogen/include${autogen_suffix}" "${CMAKE_CURRENT_BINARY_DIR}/" + "${CMAKE_CURRENT_LIST_DIR}" SOURCES bookmarkdialog.ui bookmarkmanager.cpp bookmarkmanager.h diff --git a/src/tools/clangbackend/source/CMakeLists.txt b/src/tools/clangbackend/source/CMakeLists.txt index fe0ab54deb6..b071cb46b72 100644 --- a/src/tools/clangbackend/source/CMakeLists.txt +++ b/src/tools/clangbackend/source/CMakeLists.txt @@ -3,6 +3,7 @@ add_qtc_library(clangbackend_lib STATIC PUBLIC_DEFINES CLANGSUPPORT_BUILD_LIB PUBLIC_INCLUDES ${CLANG_INCLUDE_DIRS} + "${CMAKE_CURRENT_LIST_DIR}" SOURCES clangasyncjob.h clangbackend_global.h diff --git a/src/tools/clangpchmanagerbackend/source/CMakeLists.txt b/src/tools/clangpchmanagerbackend/source/CMakeLists.txt index 76973c6a21d..fd6644da235 100644 --- a/src/tools/clangpchmanagerbackend/source/CMakeLists.txt +++ b/src/tools/clangpchmanagerbackend/source/CMakeLists.txt @@ -3,6 +3,7 @@ add_qtc_library(clangpchmanagerbackend_lib STATIC PUBLIC_DEPENDS libclang PUBLIC_DEFINES CLANGSUPPORT_BUILD_LIB PUBLIC_INCLUDES + ../../clangrefactoringbackend/source ${CLANG_INCLUDE_DIRS} SOURCES builddependenciesprovider.cpp builddependenciesprovider.h diff --git a/src/tools/clangrefactoringbackend/source/CMakeLists.txt b/src/tools/clangrefactoringbackend/source/CMakeLists.txt index 420e630c886..f06ddee1cc6 100644 --- a/src/tools/clangrefactoringbackend/source/CMakeLists.txt +++ b/src/tools/clangrefactoringbackend/source/CMakeLists.txt @@ -10,6 +10,7 @@ add_qtc_library(clangrefactoringbackend_lib STATIC PUBLIC_INCLUDES ${CLANG_INCLUDE_DIRS} "../../clangpchmanagerbackend/source" + "${CMAKE_CURRENT_LIST_DIR}" SOURCES clangquery.cpp clangquery.h clangquerygatherer.cpp clangquerygatherer.h