If the outline view is set to not show all bindings, it can crash after
writing code that temporarily produces an element after the cursor that
is interpreted as the child of a NonElementBindingType. In the bug
report that is a temporary structure of
* Window (element)
* ...
* Rectangle (element)
* ...
* y (non-element binding)
* y (element binding)
* Text (element) <- this gets selected in the global outline
When an element is selected in the global outline, the outline view
searches for the first element in the parent hierarchy for which the
source index is successfully mapped to its filtermodel.
(QmlJSOutlineWidget::updateSelectionInTree)
Since filterAcceptsRow only explicitly filters out items that are non-
element bindings, the "Text" element in the above example is "not
filtered out", and is set as the selection in the outline view, even
though it is not visible because one of its parents is filtered out.
That leads to a crash later on.
Make sure that filterAcceptsRow explicitly filters out any item that has
a NonElementBindingType in its parent hierarchy.
Fixes: QTCREATORBUG-28862
Change-Id: I1091daae140f13ea7fea7bb637953f51348c3b63
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Since we also license under GPL-3.0 WITH Qt-GPL-exception-1.0,
this applies only to a hypothetical newer version of GPL, that doesn't
exist yet. If such a version emerges, we can still decide to relicense...
While at it, replace (deprecated) GPL-3.0 with more explicit GPL-3.0-only
Change was done by running
find . -type f -exec perl -pi -e "s/LicenseRef-Qt-Commercial OR GPL-3.0\+ OR GPL-3.0 WITH Qt-GPL-exception-1.0/LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0/g" {} \;
Change-Id: I5097e6ce8d10233993ee30d7e25120e2659eb10b
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Replace the current license disclaimer in files by
a SPDX-License-Identifier.
Task-number: QTBUG-67283
Change-Id: I708fd1f9f2b73d60f57cc3568646929117825813
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
* parser side support for annotations, inline components, new UiVersion
and all the things included in QT 5.15 parser
* SourceLocation moved from QmlJS:AST to QmlJS
* Visitors now need to handle throwRecursionDepthError
* BaseVisitor for visitors that want to override all visit
Task-number: QTCREATORBUG-23591
Change-Id: I682a30d0b08b6c929739fd0e339ef6fbde3eb630
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
During auto-completion, the cursor used to randomly jump to the
beginning of line, eventually overwriting existing text.
This patch blocks the signals of the selectionModel while it refreshes
the content of the outline model.
Also cleans up a unnecessary variable and make it clear where we blocks
with using a lambda.
Task-number: QTCREATORBUG-18449
Change-Id: I94317c76b4e13d07ef7f3355b766e5473ab21011
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Writing a property made the cursor jumped to the beginning. Now we
only set the cursor if the textedit has not the focus and no code
completion open.
Change-Id: I7e5d41d5f7f9d75ebc90506d276ccaeb193c64b2
Task-number: QTCREATORBUG-15680
Task-number: QTCREATORBUG-17413
Reviewed-by: Marco Benelli <marco.benelli@qt.io>
Reviewed-by: Robert Loehning <robert.loehning@qt.io>
It was called to often - it was already connected in setEditor method.
Change outlineModelIndex() to be just a getter and call the
updateOutlineIndexNow() where an update is necessary.
Change-Id: I6f30bfaff74237416c1aef5418860179c1f8ebf7
Reviewed-by: Marco Benelli <marco.benelli@qt.io>
It does not say what it does, it is better for understanding
to call the direct method instead.
Change-Id: I2150d4c84254f684474e353995b466b59d4844c0
Reviewed-by: Marco Benelli <marco.benelli@qt.io>
The OutlineStackWidget stored its position in the outline to be able
to save/restore settings specific to the sub-widget (IOutlineWidget).
However, the index can get out sync if another NavigationWidget
with a lower index number is split, and the relative position changes.
The change therefore avoids saving an index, and rather keeps the sum
of all sub-widget settings in a QVariantMap, only reading and writing
to the global settings object if necessary.
The settings are also not stored in the [General] section anymore,
but in a subgroup [Sidebar.Outline.X], where X is the index of the
outline in the view. This avoids having to always iterate over all
keys. No effort has been made to take over the old settings. I doubt
anyone will notice, though.
Change-Id: I85017cbb3e32b0a16da43ce6339deb7a053d6b09
Task-number: QTCREATORBUG-13614
Reviewed-by: Daniel Teske <daniel.teske@theqtcompany.com>
Fill the line and column information in the location returned by
QmlOutlineModel::sourceLocation for that.
The drag & drop code also needed a way to override the executed drop
action for file drops, because the QML outline supports move-drags, which
would lead to the items being removed from the outline when dragged onto
a split...
Change-Id: I2478abc7d5aa2f3aa676cdd609ecb69a50adce8c
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
Reviewed-by: Fawzi Mohamed <fawzi.mohamed@digia.com>
Merge editor files, sort #includes, namespaces.
This does not yet use the new editor construction scheme.
Change-Id: Idb1171389858c4470d7a4ec9441fb25e6d157400
Reviewed-by: Christian Stenger <christian.stenger@digia.com>
Allow them to be focused, activate also on return/enter. Also fix focus
handling so that assigning a shortcut to "Activate Outline View"
actually
works.
Change-Id: I878777ae0dad493af1715b36ee264a4f0c12443e
Reviewed-by: Eike Ziller <eike.ziller@digia.com>
#!/usr/bin/env ruby
Dir.glob('**/*.cpp') { |file|
# skip ast (excluding paste, astpath, and canv'ast'imer)
next if file =~ /ast[^eip]|keywords\.|qualifiers|preprocessor|names.cpp/i
s = File.read(file)
next if s.include?('qlalr')
orig = s.dup
s.gsub!(/\n *if [^\n]*{\n[^\n]*\n\s+}(\s+else if [^\n]* {\n[^\n]*\n\s+})*(\s+else {\n[^\n]*\n\s+})?\n/m) { |m|
res = $&
if res =~ /^\s*(\/\/|[A-Z_]{3,})/ # C++ comment or macro (Q_UNUSED, SDEBUG), do not touch braces
res
else
res.gsub!('} else', 'else')
res.gsub!(/\n +} *\n/m, "\n")
res.gsub(/ *{$/, '')
end
}
s.gsub!(/ *$/, '')
File.open(file, 'wb').write(s) if s != orig
}
Change-Id: I3b30ee60df0986f66c02132c65fc38a3fbb6bbdc
Reviewed-by: hjk <qthjk@ovi.com>
And adapt the other API respectively.
Change-Id: I1e04e555409be09242db6890f9e013396f83aeed
Reviewed-by: Bill King <bill.king@nokia.com>
Reviewed-by: Eike Ziller <eike.ziller@nokia.com>
Getting the #include directives ready for Qt5. This includes the
new-project wizards.
Change-Id: Ia9261f1e8faec06b9285b694d2b7e9a095978d2b
Reviewed-by: Eike Ziller <eike.ziller@nokia.com>
now also if the selection is changed in qmljsoutline
Task-number: QTCREATORBUG-6306
Change-Id: I07365de90cc932bcc5d0ccf021b3dd7daf3bc17a
Reviewed-by: Christian Stenger <christian.stenger@nokia.com>