Commit 56233f67 authored by Eike Ziller's avatar Eike Ziller

Merge remote-tracking branch 'origin/4.3'

Change-Id: I01d7d8aa282f2bca94f85f55c832c76672e229f7
parents 73f210da e574860c
...@@ -6,9 +6,9 @@ ...@@ -6,9 +6,9 @@
isEmpty(VERSION): error("Include qtcreator.pri before including docs.pri!") isEmpty(VERSION): error("Include qtcreator.pri before including docs.pri!")
qtcver.name = QTC_VERSION qtcver.name = QTC_VERSION
qtcver.value = $$VERSION qtcver.value = $$QTCREATOR_DISPLAY_VERSION
qtcvertag.name = QTC_VERSION_TAG qtcvertag.name = QTC_VERSION_TAG
qtcvertag.value = $$replace(qtcver.value, \.,) qtcvertag.value = $$replace(VERSION, \.,)
qtdocs.name = QT_INSTALL_DOCS qtdocs.name = QT_INSTALL_DOCS
qtdocs.value = $$[QT_INSTALL_DOCS/src] qtdocs.value = $$[QT_INSTALL_DOCS/src]
qdocindex.name = QDOC_INDEX_DIR qdocindex.name = QDOC_INDEX_DIR
......
...@@ -1304,6 +1304,17 @@ class DumperBase: ...@@ -1304,6 +1304,17 @@ class DumperBase:
self.putFormattedPointerX(value) self.putFormattedPointerX(value)
self.ping('formattedPointer') self.ping('formattedPointer')
def putDerefedPointer(self, value):
derefValue = value.dereference()
innerType = value.type.target() #.unqualified()
self.putType(innerType)
savedCurrentChildType = self.currentChildType
self.currentChildType = innerType.name
derefValue.name = '*'
self.putItem(derefValue)
self.currentChildType = savedCurrentChildType
self.putOriginalAddress(value.pointer())
def putFormattedPointerX(self, value): def putFormattedPointerX(self, value):
#warn("PUT FORMATTED: %s" % value) #warn("PUT FORMATTED: %s" % value)
pointer = value.pointer() pointer = value.pointer()
...@@ -1328,6 +1339,10 @@ class DumperBase: ...@@ -1328,6 +1339,10 @@ class DumperBase:
self.putNumChild(0) self.putNumChild(0)
return return
if self.currentIName.endswith('.this'):
self.putDerefedPointer(value)
return
displayFormat = self.currentItemFormat(value.type.name) displayFormat = self.currentItemFormat(value.type.name)
innerType = value.type.target() #.unqualified() innerType = value.type.target() #.unqualified()
...@@ -1375,18 +1390,10 @@ class DumperBase: ...@@ -1375,18 +1390,10 @@ class DumperBase:
#warn('AUTODEREF: %s' % self.autoDerefPointers) #warn('AUTODEREF: %s' % self.autoDerefPointers)
#warn('INAME: %s' % self.currentIName) #warn('INAME: %s' % self.currentIName)
#warn('INNER: %s' % innerType.name) #warn('INNER: %s' % innerType.name)
if self.autoDerefPointers or self.currentIName.endswith('.this'): if self.autoDerefPointers:
derefValue = value.dereference() # Generic pointer type with AutomaticFormat, but never dereference char types:
# Never dereference char types.
if innerType.name not in ('char', 'signed char', 'unsigned char', 'wchar_t'): if innerType.name not in ('char', 'signed char', 'unsigned char', 'wchar_t'):
# Generic pointer type with AutomaticFormat. self.putDerefedPointer(value)
self.putType(innerType)
savedCurrentChildType = self.currentChildType
self.currentChildType = innerType.name
derefValue.name = '*'
self.putItem(derefValue)
self.currentChildType = savedCurrentChildType
self.putOriginalAddress(pointer)
return return
#warn('GENERIC PLAIN POINTER: %s' % value.type) #warn('GENERIC PLAIN POINTER: %s' % value.type)
......
...@@ -264,7 +264,10 @@ class Dumper(DumperBase): ...@@ -264,7 +264,10 @@ class Dumper(DumperBase):
y = nativeValue.cast(chars.array(0, int(nativeType.sizeof - 1))) y = nativeValue.cast(chars.array(0, int(nativeType.sizeof - 1)))
buf = bytearray(struct.pack('x' * size)) buf = bytearray(struct.pack('x' * size))
for i in range(size): for i in range(size):
buf[i] = int(y[i]) try:
buf[i] = int(y[i])
except:
pass
val.ldata = bytes(buf) val.ldata = bytes(buf)
val.type = self.fromNativeType(nativeType) val.type = self.fromNativeType(nativeType)
......
This diff is collapsed.
...@@ -2,7 +2,7 @@ TEMPLATE = aux ...@@ -2,7 +2,7 @@ TEMPLATE = aux
include(../../../qtcreator.pri) include(../../../qtcreator.pri)
LANGUAGES = cs de fr ja pl ru sl uk zh_CN zh_TW LANGUAGES = cs da de fr ja pl ru sl uk zh_CN zh_TW
# *don't* re-enable these without a prior rework # *don't* re-enable these without a prior rework
BAD_LANGUAGES = hu BAD_LANGUAGES = hu
......
...@@ -283,7 +283,7 @@ extern "C" HRESULT CALLBACK pid(CIDebugClient *client, PCSTR args) ...@@ -283,7 +283,7 @@ extern "C" HRESULT CALLBACK pid(CIDebugClient *client, PCSTR args)
int token; int token;
commandTokens<StringList>(args, &token); commandTokens<StringList>(args, &token);
dprintf("Qt Creator CDB extension version 4.2 %d bit.\n", dprintf("Qt Creator CDB extension version 4.3 %d bit.\n",
sizeof(void *) * 8); sizeof(void *) * 8);
if (const ULONG pid = currentProcessId(client)) if (const ULONG pid = currentProcessId(client))
ExtensionContext::instance().report('R', token, 0, "pid", "%u", pid); ExtensionContext::instance().report('R', token, 0, "pid", "%u", pid);
......
...@@ -693,14 +693,14 @@ void Utils::setGlobPatternsForMimeType(const MimeType &mimeType, const QStringLi ...@@ -693,14 +693,14 @@ void Utils::setGlobPatternsForMimeType(const MimeType &mimeType, const QStringLi
{ {
auto d = MimeDatabasePrivate::instance(); auto d = MimeDatabasePrivate::instance();
QMutexLocker locker(&d->mutex); QMutexLocker locker(&d->mutex);
return d->provider()->setGlobPatternsForMimeType(mimeType, patterns); d->provider()->setGlobPatternsForMimeType(mimeType, patterns);
} }
void Utils::setMagicRulesForMimeType(const MimeType &mimeType, const QMap<int, QList<MimeMagicRule> > &rules) void Utils::setMagicRulesForMimeType(const MimeType &mimeType, const QMap<int, QList<MimeMagicRule> > &rules)
{ {
auto d = MimeDatabasePrivate::instance(); auto d = MimeDatabasePrivate::instance();
QMutexLocker locker(&d->mutex); QMutexLocker locker(&d->mutex);
return d->provider()->setMagicRulesForMimeType(mimeType, rules); d->provider()->setMagicRulesForMimeType(mimeType, rules);
} }
void Utils::setMimeStartupPhase(MimeStartupPhase phase) void Utils::setMimeStartupPhase(MimeStartupPhase phase)
......
...@@ -145,7 +145,7 @@ void CMakeBuildConfiguration::ctor() ...@@ -145,7 +145,7 @@ void CMakeBuildConfiguration::ctor()
connect(m_buildDirManager.get(), &BuildDirManager::dataAvailable, connect(m_buildDirManager.get(), &BuildDirManager::dataAvailable,
this, [this, project]() { this, [this, project]() {
project->updateProjectData(this); project->updateProjectData(this);
emit enabledChanged(); clearError();
emit dataAvailable(); emit dataAvailable();
}); });
connect(m_buildDirManager.get(), &BuildDirManager::errorOccured, connect(m_buildDirManager.get(), &BuildDirManager::errorOccured,
...@@ -153,7 +153,7 @@ void CMakeBuildConfiguration::ctor() ...@@ -153,7 +153,7 @@ void CMakeBuildConfiguration::ctor()
connect(m_buildDirManager.get(), &BuildDirManager::configurationStarted, connect(m_buildDirManager.get(), &BuildDirManager::configurationStarted,
this, [this, project]() { this, [this, project]() {
project->handleParsingStarted(); project->handleParsingStarted();
emit enabledChanged(); clearError(ForceEnabledChanged::True);
emit parsingStarted(); emit parsingStarted();
}); });
...@@ -176,6 +176,7 @@ bool CMakeBuildConfiguration::isParsing() const ...@@ -176,6 +176,7 @@ bool CMakeBuildConfiguration::isParsing() const
void CMakeBuildConfiguration::resetData() void CMakeBuildConfiguration::resetData()
{ {
clearError();
m_buildDirManager->resetData(); m_buildDirManager->resetData();
} }
...@@ -342,12 +343,14 @@ void CMakeBuildConfiguration::setCurrentCMakeConfiguration(const QList<ConfigMod ...@@ -342,12 +343,14 @@ void CMakeBuildConfiguration::setCurrentCMakeConfiguration(const QList<ConfigMod
m_buildDirManager->forceReparse(); m_buildDirManager->forceReparse();
} }
void CMakeBuildConfiguration::clearError() void CMakeBuildConfiguration::clearError(ForceEnabledChanged fec)
{ {
if (!m_error.isEmpty()) { if (!m_error.isEmpty()) {
m_error.clear(); m_error.clear();
emit enabledChanged(); fec = ForceEnabledChanged::True;
} }
if (fec == ForceEnabledChanged::True)
emit enabledChanged();
} }
void CMakeBuildConfiguration::emitBuildTypeChanged() void CMakeBuildConfiguration::emitBuildTypeChanged()
......
...@@ -109,10 +109,12 @@ protected: ...@@ -109,10 +109,12 @@ protected:
private: private:
void ctor(); void ctor();
enum ForceEnabledChanged : quint8 { False, True };
void clearError(ForceEnabledChanged fec = ForceEnabledChanged::False);
QList<ConfigModel::DataItem> completeCMakeConfiguration() const; QList<ConfigModel::DataItem> completeCMakeConfiguration() const;
void setCurrentCMakeConfiguration(const QList<ConfigModel::DataItem> &items); void setCurrentCMakeConfiguration(const QList<ConfigModel::DataItem> &items);
void clearError();
void setError(const QString &message); void setError(const QString &message);
void setWarning(const QString &message); void setWarning(const QString &message);
......
...@@ -172,6 +172,13 @@ bool CMakeBuildStep::init(QList<const BuildStep *> &earlierSteps) ...@@ -172,6 +172,13 @@ bool CMakeBuildStep::init(QList<const BuildStep *> &earlierSteps)
emit addTask(Task::buildConfigurationMissingTask()); emit addTask(Task::buildConfigurationMissingTask());
canInit = false; canInit = false;
} }
if (!bc->isEnabled()) {
emit addTask(Task(Task::Error,
QCoreApplication::translate("CMakeProjectManager::CMakeBuildStep",
"The build configuration is currently disabled."),
Utils::FileName(), -1, ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM));
canInit = false;
}
CMakeTool *tool = CMakeKitInformation::cmakeTool(target()->kit()); CMakeTool *tool = CMakeKitInformation::cmakeTool(target()->kit());
if (!tool || !tool->isValid()) { if (!tool || !tool->isValid()) {
...@@ -185,7 +192,7 @@ bool CMakeBuildStep::init(QList<const BuildStep *> &earlierSteps) ...@@ -185,7 +192,7 @@ bool CMakeBuildStep::init(QList<const BuildStep *> &earlierSteps)
} }
CMakeRunConfiguration *rc = targetsActiveRunConfiguration(); CMakeRunConfiguration *rc = targetsActiveRunConfiguration();
if (isCurrentExecutableTarget(m_buildTarget) && (!rc || rc->title().isEmpty())) { if (isCurrentExecutableTarget(m_buildTarget) && (!rc || rc->buildSystemTarget().isEmpty())) {
emit addTask(Task(Task::Error, emit addTask(Task(Task::Error,
QCoreApplication::translate("ProjectExplorer::Task", QCoreApplication::translate("ProjectExplorer::Task",
"You asked to build the current Run Configuration's build target only, " "You asked to build the current Run Configuration's build target only, "
...@@ -232,7 +239,7 @@ void CMakeBuildStep::run(QFutureInterface<bool> &fi) ...@@ -232,7 +239,7 @@ void CMakeBuildStep::run(QFutureInterface<bool> &fi)
// Make sure CMake state was written to disk before trying to build: // Make sure CMake state was written to disk before trying to build:
CMakeBuildConfiguration *bc = cmakeBuildConfiguration(); CMakeBuildConfiguration *bc = cmakeBuildConfiguration();
if (!bc) if (!bc)
bc = qobject_cast<CMakeBuildConfiguration *>(target()->activeBuildConfiguration()); bc = targetsActiveBuildConfiguration();
QTC_ASSERT(bc, return); QTC_ASSERT(bc, return);
bool mustDelay = false; bool mustDelay = false;
...@@ -348,7 +355,7 @@ QString CMakeBuildStep::allArguments(const CMakeRunConfiguration *rc) const ...@@ -348,7 +355,7 @@ QString CMakeBuildStep::allArguments(const CMakeRunConfiguration *rc) const
if (isCurrentExecutableTarget(m_buildTarget)) { if (isCurrentExecutableTarget(m_buildTarget)) {
if (rc) if (rc)
target = rc->title(); target = rc->buildSystemTarget();
else else
target = QLatin1String("<i>&lt;") + tr(ADD_RUNCONFIGURATION_TEXT) + QLatin1String("&gt;</i>"); target = QLatin1String("<i>&lt;") + tr(ADD_RUNCONFIGURATION_TEXT) + QLatin1String("&gt;</i>");
} else { } else {
......
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
#include <projectexplorer/taskhub.h> #include <projectexplorer/taskhub.h>
#include <utils/algorithm.h> #include <utils/algorithm.h>
#include <utils/asconst.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <utils/qtcprocess.h> #include <utils/qtcprocess.h>
...@@ -294,7 +295,7 @@ void ServerModeReader::generateProjectTree(CMakeProjectNode *root, ...@@ -294,7 +295,7 @@ void ServerModeReader::generateProjectTree(CMakeProjectNode *root,
void ServerModeReader::updateCodeModel(CppTools::RawProjectParts &rpps) void ServerModeReader::updateCodeModel(CppTools::RawProjectParts &rpps)
{ {
int counter = 0; int counter = 0;
foreach (const FileGroup *fg, m_fileGroups) { for (const FileGroup *fg : Utils::asConst(m_fileGroups)) {
++counter; ++counter;
const QString defineArg const QString defineArg
= transform(fg->defines, [](const QString &s) -> QString { = transform(fg->defines, [](const QString &s) -> QString {
...@@ -469,6 +470,8 @@ ServerModeReader::Target *ServerModeReader::extractTargetData(const QVariantMap ...@@ -469,6 +470,8 @@ ServerModeReader::Target *ServerModeReader::extractTargetData(const QVariantMap
target->fileGroups.append(extractFileGroupData(fgData, srcDir, target)); target->fileGroups.append(extractFileGroupData(fgData, srcDir, target));
} }
fixTarget(target);
m_targets.append(target); m_targets.append(target);
return target; return target;
} }
...@@ -547,6 +550,49 @@ void ServerModeReader::extractCacheData(const QVariantMap &data) ...@@ -547,6 +550,49 @@ void ServerModeReader::extractCacheData(const QVariantMap &data)
m_cmakeCache = config; m_cmakeCache = config;
} }
void ServerModeReader::fixTarget(ServerModeReader::Target *target) const
{
QHash<QString, const FileGroup *> languageFallbacks;
for (const FileGroup *group : Utils::asConst(target->fileGroups)) {
if (group->includePaths.isEmpty() && group->compileFlags.isEmpty()
&& group->defines.isEmpty())
continue;
const FileGroup *fallback = languageFallbacks.value(group->language);
if (!fallback || fallback->sources.count() < group->sources.count())
languageFallbacks.insert(group->language, group);
}
if (!languageFallbacks.value(""))
return; // No empty language groups found, no need to proceed.
const FileGroup *fallback = languageFallbacks.value("CXX");
if (!fallback)
fallback = languageFallbacks.value("C");
if (!fallback)
fallback = languageFallbacks.value("");
if (!fallback)
return;
for (auto it = target->fileGroups.begin(); it != target->fileGroups.end(); ++it) {
if (!(*it)->language.isEmpty())
continue;
(*it)->language = fallback->language.isEmpty() ? "CXX" : fallback->language;
if (*it == fallback
|| !(*it)->includePaths.isEmpty() || !(*it)->defines.isEmpty()
|| !(*it)->compileFlags.isEmpty())
continue;
for (const IncludePath *ip : fallback->includePaths)
(*it)->includePaths.append(new IncludePath(*ip));
(*it)->defines = fallback->defines;
(*it)->compileFlags = fallback->compileFlags;
}
}
QHash<Utils::FileName, ProjectNode *> QHash<Utils::FileName, ProjectNode *>
ServerModeReader::addCMakeLists(CMakeProjectNode *root, const QList<FileNode *> &cmakeLists) ServerModeReader::addCMakeLists(CMakeProjectNode *root, const QList<FileNode *> &cmakeLists)
{ {
......
...@@ -113,6 +113,8 @@ private: ...@@ -113,6 +113,8 @@ private:
void extractCMakeInputsData(const QVariantMap &data); void extractCMakeInputsData(const QVariantMap &data);
void extractCacheData(const QVariantMap &data); void extractCacheData(const QVariantMap &data);
void fixTarget(Target *target) const;
QHash<Utils::FileName, ProjectExplorer::ProjectNode *> QHash<Utils::FileName, ProjectExplorer::ProjectNode *>
addCMakeLists(CMakeProjectNode *root, const QList<ProjectExplorer::FileNode *> &cmakeLists); addCMakeLists(CMakeProjectNode *root, const QList<ProjectExplorer::FileNode *> &cmakeLists);
void addProjects(const QHash<Utils::FileName, ProjectExplorer::ProjectNode *> &cmakeListsNodes, void addProjects(const QHash<Utils::FileName, ProjectExplorer::ProjectNode *> &cmakeListsNodes,
......
...@@ -1397,6 +1397,7 @@ bool DebuggerPluginPrivate::initialize(const QStringList &arguments, ...@@ -1397,6 +1397,7 @@ bool DebuggerPluginPrivate::initialize(const QStringList &arguments,
m_snapshotHandler = new SnapshotHandler; m_snapshotHandler = new SnapshotHandler;
m_snapshotView = new SnapshotTreeView(m_snapshotHandler); m_snapshotView = new SnapshotTreeView(m_snapshotHandler);
m_snapshotView->setSettings(settings, "Debugger.SnapshotView"); m_snapshotView->setSettings(settings, "Debugger.SnapshotView");
m_snapshotView->setIconSize(QSize(10, 10));
m_snapshotView->setModel(m_snapshotHandler->model()); m_snapshotView->setModel(m_snapshotHandler->model());
m_snapshotWindow = addSearch(m_snapshotView, tr("Snapshots"), DOCKWIDGET_SNAPSHOTS); m_snapshotWindow = addSearch(m_snapshotView, tr("Snapshots"), DOCKWIDGET_SNAPSHOTS);
......
...@@ -3867,7 +3867,7 @@ void GdbEngine::startGdb(const QStringList &args) ...@@ -3867,7 +3867,7 @@ void GdbEngine::startGdb(const QStringList &args)
QString msg; QString msg;
QString wd = m_gdbProc.workingDirectory(); QString wd = m_gdbProc.workingDirectory();
if (!QFileInfo(wd).isDir()) if (!QFileInfo(wd).isDir())
msg = failedToStartMessage() + ' ' + tr("The working directory \"%s\" is not usable.").arg(wd); msg = failedToStartMessage() + ' ' + tr("The working directory \"%1\" is not usable.").arg(wd);
else else
msg = errorMessage(QProcess::FailedToStart); msg = errorMessage(QProcess::FailedToStart);
handleAdapterStartFailed(msg); handleAdapterStartFailed(msg);
......
...@@ -158,7 +158,7 @@ void AbstractProcessStep::setIgnoreReturnValue(bool b) ...@@ -158,7 +158,7 @@ void AbstractProcessStep::setIgnoreReturnValue(bool b)
bool AbstractProcessStep::init(QList<const BuildStep *> &earlierSteps) bool AbstractProcessStep::init(QList<const BuildStep *> &earlierSteps)
{ {
Q_UNUSED(earlierSteps); Q_UNUSED(earlierSteps);
return true; return !m_process;
} }
/*! /*!
...@@ -205,6 +205,7 @@ void AbstractProcessStep::run(QFutureInterface<bool> &fi) ...@@ -205,6 +205,7 @@ void AbstractProcessStep::run(QFutureInterface<bool> &fi)
if (!m_process->waitForStarted()) { if (!m_process->waitForStarted()) {
processStartupFailed(); processStartupFailed();
m_process.reset(); m_process.reset();
m_outputParserChain.reset();
reportRunResult(fi, false); reportRunResult(fi, false);
return; return;
} }
......
...@@ -555,13 +555,19 @@ QStringList Project::files(Project::FilesMode fileMode, ...@@ -555,13 +555,19 @@ QStringList Project::files(Project::FilesMode fileMode,
if (!rootProjectNode()) if (!rootProjectNode())
return result; return result;
QSet<QString> alreadySeen;
rootProjectNode()->forEachNode([&](const FileNode *fn) { rootProjectNode()->forEachNode([&](const FileNode *fn) {
if (filter && !filter(fn)) if (filter && !filter(fn))
return; return;
const QString path = fn->filePath().toString();
const int count = alreadySeen.count();
alreadySeen.insert(path);
if (count == alreadySeen.count())
return; // skip duplicates
if ((fileMode == AllFiles) if ((fileMode == AllFiles)
|| (fileMode == SourceFiles && !fn->isGenerated()) || (fileMode == SourceFiles && !fn->isGenerated())
|| (fileMode == GeneratedFiles && fn->isGenerated())) || (fileMode == GeneratedFiles && fn->isGenerated()))
result.append(fn->filePath().toString()); result.append(path);
}); });
return result; return result;
} }
......
...@@ -82,6 +82,7 @@ FlatModel::FlatModel(QObject *parent) ...@@ -82,6 +82,7 @@ FlatModel::FlatModel(QObject *parent)
connect(sm, &SessionManager::aboutToSaveSession, this, &FlatModel::saveExpandData); connect(sm, &SessionManager::aboutToSaveSession, this, &FlatModel::saveExpandData);
connect(sm, &SessionManager::projectAdded, this, &FlatModel::handleProjectAdded); connect(sm, &SessionManager::projectAdded, this, &FlatModel::handleProjectAdded);
connect(sm, &SessionManager::startupProjectChanged, this, [this] { layoutChanged(); }); connect(sm, &SessionManager::startupProjectChanged, this, [this] { layoutChanged(); });
rebuildModel();
} }
QVariant FlatModel::data(const QModelIndex &index, int role) const QVariant FlatModel::data(const QModelIndex &index, int role) const
...@@ -104,10 +105,15 @@ QVariant FlatModel::data(const QModelIndex &index, int role) const ...@@ -104,10 +105,15 @@ QVariant FlatModel::data(const QModelIndex &index, int role) const
break; break;
} }
case Qt::DecorationRole: { case Qt::DecorationRole: {
if (folderNode) if (folderNode) {
result = folderNode->icon(); result = folderNode->icon();
else if (ContainerNode *containerNode = folderNode->asContainerNode()) {
if (ProjectNode *projectNode = containerNode->rootProjectNode())
result = projectNode->icon();
}
} else {
result = Core::FileIconProvider::icon(node->filePath().toString()); result = Core::FileIconProvider::icon(node->filePath().toString());
}
break; break;
} }
case Qt::FontRole: { case Qt::FontRole: {
......
...@@ -987,6 +987,12 @@ void addTabBarToStackedContainer(const SelectionContext &selectionContext) ...@@ -987,6 +987,12 @@ void addTabBarToStackedContainer(const SelectionContext &selectionContext)
const int maxValue = container.directSubModelNodes().count(); const int maxValue = container.directSubModelNodes().count();
QmlItemNode tabBarItem(tabBarNode);
tabBarItem.anchors().setAnchor(AnchorLineLeft, containerItemNode, AnchorLineLeft);
tabBarItem.anchors().setAnchor(AnchorLineRight, containerItemNode, AnchorLineRight);
tabBarItem.anchors().setAnchor(AnchorLineBottom, containerItemNode, AnchorLineTop);
for (int i = 0; i < maxValue; ++i) { for (int i = 0; i < maxValue; ++i) {
ModelNode tabButtonNode = ModelNode tabButtonNode =
view->createModelNode("QtQuick.Controls.TabButton", view->createModelNode("QtQuick.Controls.TabButton",
...@@ -997,12 +1003,6 @@ void addTabBarToStackedContainer(const SelectionContext &selectionContext) ...@@ -997,12 +1003,6 @@ void addTabBarToStackedContainer(const SelectionContext &selectionContext)
tabBarNode.defaultNodeListProperty().reparentHere(tabButtonNode); tabBarNode.defaultNodeListProperty().reparentHere(tabButtonNode);
} }
QmlItemNode tabBarItem(tabBarNode);
tabBarItem.anchors().setAnchor(AnchorLineLeft, containerItemNode, AnchorLineLeft);
tabBarItem.anchors().setAnchor(AnchorLineRight, containerItemNode, AnchorLineRight);
tabBarItem.anchors().setAnchor(AnchorLineBottom, containerItemNode, AnchorLineTop);
const QString id = tabBarNode.validId(); const QString id = tabBarNode.validId();
container.removeProperty(indexPropertyName); container.removeProperty(indexPropertyName);
......