aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2020-04-28 15:48:36 +0200
committerEike Ziller <eike.ziller@qt.io>2020-04-28 15:48:36 +0200
commite9661e43cbbb934e1aca7941685e2035c7dbde56 (patch)
tree438839660dff750585b4182bcb3711bf98e2e8a9
parent6efed7140b37616b6a6882dd9096d1edafedd089 (diff)
parent05f746cfd029c0232bb5880c50d0b0d7d17f0cc5 (diff)
Merge remote-tracking branch 'origin/4.12'
Conflicts: cmake/QtCreatorIDEBranding.cmake qbs/modules/qtc/qtc.qbs qtcreator_ide_branding.pri src/libs/qtcreatorcdbext/qtcreatorcdbextension.cpp Change-Id: If6963d1ef7b5a1ea6343f68c8e7ce6fb5f482f21
-rw-r--r--cmake/QtCreatorAPI.cmake11
-rw-r--r--doc/qtcreator/src/editors/creator-coding-edit-mode.qdoc6
-rw-r--r--doc/qtcreator/src/projects/creator-only/creator-projects-settings-run-desktop.qdocinc2
-rw-r--r--doc/qtcreator/src/qtquick/qtquick-adding-dynamics.qdoc2
-rw-r--r--doc/qtcreator/src/qtquick/qtquick-components.qdoc2
-rw-r--r--doc/qtcreator/src/qtquick/qtquick-ui-forms.qdoc8
-rwxr-xr-xscripts/build.py45
-rwxr-xr-xscripts/build_plugin.py130
-rw-r--r--share/qtcreator/CMakeLists.txt35
-rw-r--r--share/qtcreator/debugger/stdtypes.py3
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ComboBox.qml62
-rw-r--r--src/libs/advanceddockingsystem/dockareawidget.cpp27
-rw-r--r--src/libs/advanceddockingsystem/dockareawidget.h7
-rw-r--r--src/libs/advanceddockingsystem/dockwidget.cpp15
-rw-r--r--src/libs/advanceddockingsystem/dockwidget.h26
-rw-r--r--src/libs/advanceddockingsystem/floatingdockcontainer.cpp126
-rw-r--r--src/libs/advanceddockingsystem/floatingdockcontainer.h1
-rw-r--r--src/libs/clangsupport/CMakeLists.txt2
-rw-r--r--src/libs/modelinglib/CMakeLists.txt2
-rw-r--r--src/libs/qtcreatorcdbext/qtcreatorcdbextension.cpp103
-rw-r--r--src/libs/sqlite/CMakeLists.txt4
-rw-r--r--src/plugins/cpptools/doxygengenerator.cpp11
-rw-r--r--src/plugins/debugger/cdb/cdbengine.cpp11
-rw-r--r--src/plugins/debugger/simplifytype.cpp1
-rw-r--r--src/plugins/mcusupport/mcusupportconstants.h3
-rw-r--r--src/plugins/mcusupport/mcusupportoptions.cpp77
-rw-r--r--src/plugins/mcusupport/mcusupportoptions.h14
-rw-r--r--src/plugins/mcusupport/mcusupportoptionspage.cpp11
-rw-r--r--src/plugins/projectexplorer/projectconfigurationaspects.cpp4
-rw-r--r--src/plugins/projectexplorer/runconfigurationaspects.cpp2
-rw-r--r--src/plugins/qmldesigner/CMakeLists.txt4
-rw-r--r--src/plugins/qmldesigner/components/componentcore/selectioncontext.cpp3
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp10
-rw-r--r--src/plugins/qmldesigner/components/navigator/navigatorview.cpp3
-rw-r--r--src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h3
-rw-r--r--src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp2
-rw-r--r--src/plugins/qmljseditor/qmljssemantichighlighter.cpp7
-rw-r--r--src/shared/designerintegrationv2/CMakeLists.txt10
-rw-r--r--src/shared/help/CMakeLists.txt1
-rw-r--r--src/tools/clangbackend/source/CMakeLists.txt1
-rw-r--r--src/tools/clangpchmanagerbackend/source/CMakeLists.txt1
-rw-r--r--src/tools/clangrefactoringbackend/source/CMakeLists.txt1
42 files changed, 573 insertions, 226 deletions
diff --git a/cmake/QtCreatorAPI.cmake b/cmake/QtCreatorAPI.cmake
index 993102e139..f6387b7919 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}
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
+ PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>"
- "$<INSTALL_INTERFACE:include/${include_dir_relative_path}>"
"$<INSTALL_INTERFACE:include/${include_dir_relative_path}/..>"
)
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
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
+ PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>"
- "$<INSTALL_INTERFACE:include/${include_dir_relative_path}>"
"$<INSTALL_INTERFACE:include/${include_dir_relative_path}/..>"
)
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 $<BUILD_INTERFACE:${_arg_SOURCES_PREFIX}>)
+ target_include_directories(${target_name} PRIVATE $<BUILD_INTERFACE:${_arg_SOURCES_PREFIX}>)
set(_arg_SOURCES ${prefixed_sources})
endif()
diff --git a/doc/qtcreator/src/editors/creator-coding-edit-mode.qdoc b/doc/qtcreator/src/editors/creator-coding-edit-mode.qdoc
index 56be275326..c470d183be 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 e0b1c7187e..732090a523 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 a2e4b5865a..9370ae848f 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 4266a4d7d0..611dd97255 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 49f682d7ce..14bb305be1 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/scripts/build.py b/scripts/build.py
index 3c48136239..a58a688dca 100755
--- a/scripts/build.py
+++ b/scripts/build.py
@@ -83,6 +83,10 @@ def get_arguments():
action='store_true', default=(not common.is_windows_platform()))
parser.add_argument('--no-docs', help='Skip documentation generation',
action='store_true', default=False)
+ parser.add_argument('--no-dmg', help='Skip disk image creation (macOS)',
+ action='store_true', default=False)
+ parser.add_argument('--no-zip', help='Skip creation of 7zip files for install and developer package',
+ action='store_true', default=False)
return parser.parse_args()
def build_qtcreator(args, paths):
@@ -124,8 +128,7 @@ def build_qtcreator(args, paths):
'-DPYTHON_INCLUDE_DIR=' + os.path.join(args.python_path, 'include')]
# TODO this works around a CMake bug https://gitlab.kitware.com/cmake/cmake/issues/20119
- if common.is_linux_platform():
- cmake_args += ['-DBUILD_WITH_PCH=OFF']
+ cmake_args += ['-DBUILD_WITH_PCH=OFF']
ide_revision = common.get_commit_SHA(paths.src)
if ide_revision:
@@ -191,30 +194,32 @@ def deploy_qt(args, paths):
paths.build)
def package_qtcreator(args, paths):
- common.check_print_call(['7z', 'a', '-mmt2', os.path.join(paths.result, 'qtcreator.7z'), '*'],
- paths.install)
- common.check_print_call(['7z', 'a', '-mmt2',
- os.path.join(paths.result, 'qtcreator_dev.7z'), '*'],
- paths.dev_install)
- if common.is_windows_platform():
+ if not args.no_zip:
+ common.check_print_call(['7z', 'a', '-mmt2', os.path.join(paths.result, 'qtcreator.7z'), '*'],
+ paths.install)
common.check_print_call(['7z', 'a', '-mmt2',
- os.path.join(paths.result, 'wininterrupt.7z'), '*'],
- paths.wininterrupt_install)
- if not args.no_cdb:
+ os.path.join(paths.result, 'qtcreator_dev.7z'), '*'],
+ paths.dev_install)
+ if common.is_windows_platform():
common.check_print_call(['7z', 'a', '-mmt2',
- os.path.join(paths.result, 'qtcreatorcdbext.7z'), '*'],
- paths.qtcreatorcdbext_install)
+ os.path.join(paths.result, 'wininterrupt.7z'), '*'],
+ paths.wininterrupt_install)
+ if not args.no_cdb:
+ common.check_print_call(['7z', 'a', '-mmt2',
+ os.path.join(paths.result, 'qtcreatorcdbext.7z'), '*'],
+ paths.qtcreatorcdbext_install)
if common.is_mac_platform():
if args.keychain_unlock_script:
common.check_print_call([args.keychain_unlock_script], paths.install)
- common.check_print_call(['python', '-u',
- os.path.join(paths.src, 'scripts', 'makedmg.py'),
- 'qt-creator.dmg',
- 'Qt Creator',
- paths.src,
- paths.install],
- paths.result)
+ if not args.no_dmg:
+ common.check_print_call(['python', '-u',
+ os.path.join(paths.src, 'scripts', 'makedmg.py'),
+ 'qt-creator.dmg',
+ 'Qt Creator',
+ paths.src,
+ paths.install],
+ paths.result)
def get_paths(args):
Paths = collections.namedtuple('Paths',
diff --git a/scripts/build_plugin.py b/scripts/build_plugin.py
new file mode 100755
index 0000000000..45c16765d3
--- /dev/null
+++ b/scripts/build_plugin.py
@@ -0,0 +1,130 @@
+#!/usr/bin/env python
+#############################################################################
+##
+## Copyright (C) 2020 The Qt Company Ltd.
+## Contact: https://www.qt.io/licensing/
+##
+## This file is part of the release tools of the Qt Toolkit.
+##
+## $QT_BEGIN_LICENSE:GPL-EXCEPT$
+## Commercial License Usage
+## Licensees holding valid commercial Qt licenses may use this file in
+## accordance with the commercial license agreement provided with the
+## Software or, alternatively, in accordance with the terms contained in
+## a written agreement between you and The Qt Company. For licensing terms
+## and conditions see https://www.qt.io/terms-conditions. For further
+## information use the contact form at https://www.qt.io/contact-us.
+##
+## GNU General Public License Usage
+## Alternatively, this file may be used under the terms of the GNU
+## General Public License version 3 as published by the Free Software
+## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+## included in the packaging of this file. Please review the following
+## information to ensure the GNU General Public License requirements will
+## be met: https://www.gnu.org/licenses/gpl-3.0.html.
+##
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+# import the print function which is used in python 3.x
+from __future__ import print_function
+
+import argparse
+import collections
+import os
+
+import common
+
+def get_arguments():
+ parser = argparse.ArgumentParser(description='Build Qt Creator for packaging')
+ parser.add_argument('--name', help='Name to use for build results', required=True)
+ parser.add_argument('--src', help='Path to sources', required=True)
+ parser.add_argument('--build', help='Path that should be used for building', required=True)
+ parser.add_argument('--qt-path', help='Path to Qt', required=True)
+ parser.add_argument('--qtc-path',
+ help='Path to Qt Creator installation including development package',
+ required=True)
+ parser.add_argument('--output-path', help='Output path for resulting 7zip files')
+ parser.add_argument('--add-path', help='Adds a CMAKE_PREFIX_PATH to the build',
+ action='append', dest='prefix_paths', default=[])
+ parser.add_argument('--deploy', help='Installs the "Dependencies" component of the plugin.',
+ action='store_true', default=False)
+ parser.add_argument('--debug', help='Enable debug builds', action='store_true', default=False)
+ return parser.parse_args()
+
+def build(args, paths):
+ if not os.path.exists(paths.build):
+ os.makedirs(paths.build)
+ if not os.path.exists(paths.result):
+ os.makedirs(paths.result)
+ prefix_paths = [paths.qt, paths.qt_creator] + [os.path.abspath(fp) for fp in args.prefix_paths]
+ build_type = 'Debug' if args.debug else 'Release'
+ cmake_args = ['cmake',
+ '-DCMAKE_PREFIX_PATH=' + ';'.join(prefix_paths),
+ '-DCMAKE_BUILD_TYPE=' + build_type,
+ '-DCMAKE_INSTALL_PREFIX=' + paths.install,
+ '-G', 'Ninja']
+
+ # force MSVC on Windows, because it looks for GCC in the PATH first,
+ # even if MSVC is first mentioned in the PATH...
+ # TODO would be nicer if we only did this if cl.exe is indeed first in the PATH
+ if common.is_windows_platform():
+ cmake_args += ['-DCMAKE_C_COMPILER=cl',
+ '-DCMAKE_CXX_COMPILER=cl']
+
+ # TODO this works around a CMake bug https://gitlab.kitware.com/cmake/cmake/issues/20119
+ cmake_args += ['-DBUILD_WITH_PCH=OFF']
+
+ ide_revision = common.get_commit_SHA(paths.src)
+ if ide_revision:
+ cmake_args += ['-DQTC_PLUGIN_REVISION=' + ide_revision]
+ with open(os.path.join(paths.result, args.name + '.7z.git_sha'), 'w') as f:
+ f.write(ide_revision)
+
+ common.check_print_call(cmake_args + [paths.src], paths.build)
+ common.check_print_call(['cmake', '--build', '.'], paths.build)
+ common.check_print_call(['cmake', '--install', '.', '--prefix', paths.install, '--strip'],
+ paths.build)
+ if args.deploy:
+ common.check_print_call(['cmake', '--install', '.', '--prefix', paths.install,
+ '--component', 'Dependencies'],
+ paths.build)
+ common.check_print_call(['cmake', '--install', '.', '--prefix', paths.dev_install,
+ '--component', 'Devel'],
+ paths.build)
+
+def package(args, paths):
+ if not os.path.exists(paths.result):
+ os.makedirs(paths.result)
+ common.check_print_call(['7z', 'a', '-mmt2', os.path.join(paths.result, args.name + '.7z'), '*'],
+ paths.install)
+ if os.path.exists(paths.dev_install): # some plugins might not provide anything in Devel
+ common.check_print_call(['7z', 'a', '-mmt2',
+ os.path.join(paths.result, args.name + '_dev.7z'), '*'],
+ paths.dev_install)
+
+def get_paths(args):
+ Paths = collections.namedtuple('Paths',
+ ['qt', 'src', 'build', 'qt_creator',
+ 'install', 'dev_install', 'result'])
+ build_path = os.path.abspath(args.build)
+ install_path = os.path.join(build_path, 'install')
+ result_path = os.path.abspath(args.output_path) if args.output_path else build_path
+ return Paths(qt=os.path.abspath(args.qt_path),
+ src=os.path.abspath(args.src),
+ build=os.path.join(build_path, 'build'),
+ qt_creator=os.path.abspath(args.qtc_path),
+ install=os.path.join(install_path, args.name),
+ dev_install=os.path.join(install_path, args.name + '-dev'),
+ result=result_path)
+
+def main():
+ args = get_arguments()
+ paths = get_paths(args)
+
+ build(args, paths)
+ package(args, paths)
+
+if __name__ == '__main__':
+ main()
diff --git a/share/qtcreator/CMakeLists.txt b/share/qtcreator/CMakeLists.txt
index 05f64cc2f1..303fb9c7d0 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 b08b9d603d..9d5cd0029a 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 b3e8fda368..2d70e40b1d 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 16bd88f571..6e7f9d5c99 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 9c23584ae7..74ab85c69f 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 760f425ae7..c703b0a665 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<QAction *> 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 0d6efa28d0..687704e365 100644
--- a/src/libs/advanceddockingsystem/dockwidget.h
+++ b/src/libs/advanceddockingsystem/dockwidget.h
@@ -185,6 +185,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
* a checkable action to show / hide the dock widget. If the mode
@@ -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;
@@ -328,6 +340,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 c245dcb206..18c70834dd 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 83ca1eddde..1b6a9d5b2f 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 b7e02db645..093213147b 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 55c6e3a951..db79b99ee3 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/qtcreatorcdbext/qtcreatorcdbextension.cpp b/src/libs/qtcreatorcdbext/qtcreatorcdbextension.cpp
index bcadbbf294..f60ad90cc9 100644
--- a/src/libs/qtcreatorcdbext/qtcreatorcdbextension.cpp
+++ b/src/libs/qtcreatorcdbext/qtcreatorcdbextension.cpp
@@ -160,7 +160,7 @@ static const CommandDescription commandDescriptions[] = {
{"assign","Assigns a value to a variable in current symbol group.",
"[-t token] [-h] <iname=value>\n"
"-h Data are hex-encoded, binary data\n"
- "-u Data are hex-encoded, UTF16 data"
+ "-e iname is an hex-encoded expression to be evaluated "
},
{"threads","Lists threads in GDBMI format.","[-t token]"},
{"registers","Lists registers in GDBMI format","[-t token]"},
@@ -899,60 +899,77 @@ extern "C" HRESULT CALLBACK assign(CIDebugClient *client, PCSTR argsIn)
ExtensionCommandContext exc(client);
std::string errorMessage;
- bool success = false;
bool encoded = false;
+ bool evaluateExpression = false;
int token = 0;
- do {
- StringList tokens = commandTokens<StringList>(argsIn, &token);
- if (token == 0) // partial message
- return S_OK;
-
- if (tokens.empty()) {
- errorMessage = singleLineUsage(commandDescriptions[CmdAssign]);
- break;
- }
-
+ StringList tokens = commandTokens<StringList>(argsIn, &token);
+ while (!tokens.empty()) {
if (tokens.front() == "-h") {
encoded = true;
tokens.pop_front();
+ continue;
}
- if (tokens.empty()) {
- errorMessage = singleLineUsage(commandDescriptions[CmdAssign]);
- break;
+ if (tokens.front() == "-e") {
+ evaluateExpression = true;
+ tokens.pop_front();
+ continue;
}
+ break;
+ };
- // Parse 'assign locals.x=5'
- const std::string::size_type equalsPos = tokens.front().find('=');
- if (equalsPos == std::string::npos) {
- errorMessage = singleLineUsage(commandDescriptions[CmdAssign]);
- break;
- }
- const std::string iname = tokens.front().substr(0, equalsPos);
- const std::string value = tokens.front().substr(equalsPos + 1, tokens.front().size() - equalsPos - 1);
- // get the symbolgroup
- int currentFrame = ExtensionContext::instance().symbolGroupFrame();
- if (currentFrame < 0) {
- CIDebugControl *control = ExtensionCommandContext::instance()->control();
- DEBUG_STACK_FRAME frame;
- if (FAILED(control->GetStackTrace(0, 0, 0, &frame, 1, NULL))) {
- errorMessage = "No current frame.";
- break;
+ // Parse 'assign locals.x=5'
+ const std::string::size_type equalsPos = tokens.empty() ? std::string::npos
+ : tokens.front().find('=');
+ if (equalsPos == std::string::npos) {
+ errorMessage = singleLineUsage(commandDescriptions[CmdAssign]);
+ } else {
+ std::string iname = tokens.front().substr(0, equalsPos);
+ const std::string value = tokens.front().substr(equalsPos + 1,
+ tokens.front().size() - equalsPos - 1);
+ SymbolGroup *symGroup = nullptr;
+ if (evaluateExpression) {
+ WatchesSymbolGroup *watchesSymGroup
+ = ExtensionContext::instance().watchesSymbolGroup(exc.symbols(), &errorMessage);
+ std::string tempAssignIname = "watch.tmpassign";
+ if (watchesSymGroup) {
+ if (watchesSymGroup->addWatch(exc.symbols(),
+ tempAssignIname,
+ stringFromHex(iname),
+ &errorMessage)) {
+ iname = tempAssignIname;
+ symGroup = watchesSymGroup;
+ }
+ }
+ } else {
+ // get the symbolgroup
+ int currentFrame = ExtensionContext::instance().symbolGroupFrame();
+ if (currentFrame < 0) {
+ CIDebugControl *control = ExtensionCommandContext::instance()->control();
+ DEBUG_STACK_FRAME frame;
+ if (FAILED(control->GetStackTrace(0, 0, 0, &frame, 1, NULL)))
+ errorMessage = "No current frame.";
+ else
+ currentFrame = frame.FrameNumber;
+ }
+ if (currentFrame >= 0) {
+ symGroup = ExtensionContext::instance().symbolGroup(exc.symbols(),
+ exc.threadId(),
+ currentFrame,
+ &errorMessage);
}
- currentFrame = frame.FrameNumber;
}
- SymbolGroup *symGroup = ExtensionContext::instance().symbolGroup(exc.symbols(), exc.threadId(), currentFrame, &errorMessage);
- if (!symGroup)
- break;
- success = symGroup->assign(iname, encoded ? stringFromHex(value) : value,
- SymbolGroupValueContext(exc.dataSpaces(), exc.symbols()),
- &errorMessage);
- } while (false);
+ if (symGroup
+ && symGroup->assign(iname,
+ encoded ? stringFromHex(value) : value,
+ SymbolGroupValueContext(exc.dataSpaces(), exc.symbols()),
+ &errorMessage)) {
+ ExtensionContext::instance().report('R', token, 0, "assign", "Ok");
+ return S_OK;
+ }
+ }
- if (success)
- ExtensionContext::instance().report('R', token, 0, "assign", "Ok");
- else
- ExtensionContext::instance().report('N', token, 0, "assign", errorMessage.c_str());
+ ExtensionContext::instance().report('N', token, 0, "assign", errorMessage.c_str());
return S_OK;
}
diff --git a/src/libs/sqlite/CMakeLists.txt b/src/libs/sqlite/CMakeLists.txt
index 62c8609a7a..36737ca1a2 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 702f92e524..398a31a876 100644
--- a/src/plugins/cpptools/doxygengenerator.cpp
+++ b/src/plugins/cpptools/doxygengenerator.cpp
@@ -33,6 +33,7 @@
#include <utils/qtcassert.h>
#include <QDebug>
+#include <QRegularExpression>
#include <QTextBlock>
#include <QTextCursor>
#include <QTextDocument>
@@ -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/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp
index 74115668fb..0122d43eb3 100644
--- a/src/plugins/debugger/cdb/cdbengine.cpp
+++ b/src/plugins/debugger/cdb/cdbengine.cpp
@@ -929,8 +929,15 @@ void CdbEngine::assignValueInDebugger(WatchItem *w, const QString &expr, const Q
qWarning("Internal error: assignValueInDebugger: Invalid state or no stack frame.");
return;
}
- runCommand({m_extensionCommandPrefix + "assign -h " + w->iname + '=' + toHex(value.toString()),
- NoFlags});
+ if (m_pythonVersion > 0x030000 && w->isWatcher()) {
+ runCommand({m_extensionCommandPrefix + "assign -h -e " + toHex(w->expression()) + '='
+ + toHex(value.toString()),
+ NoFlags});
+ } else {
+ runCommand({m_extensionCommandPrefix + "assign -h " + w->iname + '=' + toHex(value.toString()),
+ NoFlags});
+ }
+
// Update all locals in case we change a union or something pointed to
// that affects other variables, too.
updateLocals();
diff --git a/src/plugins/debugger/simplifytype.cpp b/src/plugins/debugger/simplifytype.cpp
index f8bea299f6..202756a3ed 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 88489b1196..30d28f44df 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 ca55f08eca..b4651ce475 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<McuPackage *> &packages, McuToolChainPackage *toolChainPackage)
+ const QVector<McuPackage *> &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<McuPackage *> 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<Core::Id> 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<McuPackage *> 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<ProjectExplorer::Kit *> McuSupportOptions::existingKits(const McuTarget *mcuTargt)
+QList<ProjectExplorer::Kit *> 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()
+ ));
+ });
+}
+
+QList<ProjectExplorer::Kit *> 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;
});
}
-ProjectExplorer::Kit *McuSupportOptions::newKit(const McuTarget *mcuTarget)
+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 b87452cca5..72d395090f 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<McuPackage *> &packages,
- McuToolChainPackage *toolChainPackage);
+ const McuToolChainPackage *toolChainPackage);
QString vendor() const;
QVector<McuPackage *> 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<McuPackage*> 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<ProjectExplorer::Kit *> existingKits(const McuTarget *mcuTargt);
- ProjectExplorer::Kit *newKit(const McuTarget *mcuTarget);
+ static QList<ProjectExplorer::Kit *> existingKits(const McuTarget *mcuTarget);
+ static QList<ProjectExplorer::Kit *> 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 b7442ff5a2..87652018c6 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 <b>%1</b> 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<QStringList>(m_options.mcuTargets, [this](McuTarget *t){
- return m_options.kitName(t);
+ Utils::transform<QStringList>(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 ea30393eb6..d12112a941 100644
--- a/src/plugins/projectexplorer/projectconfigurationaspects.cpp
+++ b/src/plugins/projectexplorer/projectconfigurationaspects.cpp
@@ -179,12 +179,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 4e0f573b0c..238cd4a698 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 75a8571b81..9c32da72c4 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 7dba86920d..59a9454b09 100644
--- a/src/plugins/qmldesigner/components/componentcore/selectioncontext.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/selectioncontext.cpp
@@ -78,7 +78,8 @@ QList<ModelNode> 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 13230544ae..caf0663dce 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<QQmlContext::PropertyPair>{
- {"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 320825c762..e345052172 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp
@@ -410,6 +410,9 @@ void NavigatorView::selectedNodesChanged(const QList<ModelNode> &/*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 6c91d4917c..6e70169a6a 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 <QPointer>
+#include <QSharedDataPointer>
namespace QmlDesigner {
@@ -88,7 +89,7 @@ public:
void addHints(const QHash<QString, QString> &hints);
private:
- QExplicitlySharedDataPointer<Internal::ItemLibraryEntryData> m_data;
+ QSharedDataPointer<Internal::ItemLibraryEntryData> m_data;
};
class QMLDESIGNERCORE_EXPORT ItemLibraryInfo : public QObject
diff --git a/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp
index 2597aacf7b..234872d661 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp
@@ -388,6 +388,8 @@ void QmlObjectNode::destroy()
}
removeStateOperationsForChildren(modelNode());
+ BindingProperty::deleteAllReferencesTo(modelNode());
+
QmlFlowViewNode root(view()->rootModelNode());
modelNode().destroy();
diff --git a/src/plugins/qmljseditor/qmljssemantichighlighter.cpp b/src/plugins/qmljseditor/qmljssemantichighlighter.cpp
index 65e9b0ca2e..b9ef9dc746 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 8e2520d50e..b527260fa4 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 442911b4b8..6aa583b154 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 fe0ab54deb..b071cb46b7 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 76973c6a21..fd6644da23 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 420e630c88..f06ddee1cc 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