diff --git a/dist/installer/mac/entitlements.plist b/dist/installer/mac/entitlements.plist
new file mode 100644
index 00000000000..0aae7ab39d9
--- /dev/null
+++ b/dist/installer/mac/entitlements.plist
@@ -0,0 +1,10 @@
+
+
+
+
+ com.apple.security.cs.debugger
+
+ com.apple.security.cs.disable-library-validation
+
+
+
diff --git a/scripts/common.py b/scripts/common.py
index 5bb52633f8c..61923803fb9 100644
--- a/scripts/common.py
+++ b/scripts/common.py
@@ -238,5 +238,7 @@ def codesign(app_path):
lambda ff: ff.endswith('.dylib'))
codesign = codesign_call()
if is_mac_platform() and codesign:
+ entitlements_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', 'dist',
+ 'installer', 'mac', 'entitlements.plist')
# sign the whole bundle
- subprocess.check_call(codesign + ['--deep', app_path])
+ subprocess.check_call(codesign + ['--deep', app_path, '--entitlements', entitlements_path])
diff --git a/share/qtcreator/templates/wizards/classes/python/file.py b/share/qtcreator/templates/wizards/classes/python/file.py
index adcbc1ed2d0..5698022dd85 100644
--- a/share/qtcreator/templates/wizards/classes/python/file.py
+++ b/share/qtcreator/templates/wizards/classes/python/file.py
@@ -21,6 +21,7 @@ from PyQt5 import QtQuick
@endif
@endif
+
@if '%{Base}'
class %{Class}(%{Base}):
@else
@@ -29,11 +30,9 @@ class %{Class}:
def __init__(self):
@if '%{Base}' === 'QWidget'
QtWidgets.QWidget.__init__(self)
-@endif
-@if '%{Base}' === 'QMainWindow'
+@elif '%{Base}' === 'QMainWindow'
QtWidgets.QMainWindow.__init__(self)
-@if '%{Base}' === 'QQuickItem'
+@elif '%{Base}' === 'QQuickItem'
QtQuick.QQuickItem.__init__(self)
@endif
pass
-
diff --git a/share/qtcreator/templates/wizards/classes/python/wizard.json b/share/qtcreator/templates/wizards/classes/python/wizard.json
index 552c3f15a0e..aeebd1f2a30 100644
--- a/share/qtcreator/templates/wizards/classes/python/wizard.json
+++ b/share/qtcreator/templates/wizards/classes/python/wizard.json
@@ -46,7 +46,7 @@
"data":
{
"items": [ { "trKey": "", "value": "" },
- "QObject", "QWidget", "QMainWindow", "QDeclarativeItem" ]
+ "QObject", "QWidget", "QMainWindow", "QDeclarativeItem", "QQuickItem" ]
}
},
{
diff --git a/share/qtcreator/templates/wizards/files/python/file.py b/share/qtcreator/templates/wizards/files/python/file.py
index 003f8414973..fcb605f9f72 100644
--- a/share/qtcreator/templates/wizards/files/python/file.py
+++ b/share/qtcreator/templates/wizards/files/python/file.py
@@ -1,4 +1,4 @@
# This Python file uses the following encoding: utf-8
-# if__name__ == "__main__":
+# if __name__ == "__main__":
# pass
diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp
index 05ddb295c33..bb74a7bcab3 100644
--- a/src/plugins/languageclient/client.cpp
+++ b/src/plugins/languageclient/client.cpp
@@ -475,7 +475,7 @@ void Client::documentContentsChanged(TextEditor::TextDocument *document,
int charsRemoved,
int charsAdded)
{
- if (!m_openedDocument.contains(document))
+ if (!m_openedDocument.contains(document) || !reachable())
return;
const QString method(DidChangeTextDocumentNotification::methodName);
TextDocumentSyncKind syncKind = m_serverCapabilities.textDocumentSyncKindHelper();
@@ -912,11 +912,12 @@ bool Client::reset()
m_responseHandlers.clear();
m_clientInterface->resetBuffer();
updateEditorToolBar(m_openedDocument.keys());
- m_openedDocument.clear();
m_serverCapabilities = ServerCapabilities();
m_dynamicCapabilities.reset();
for (const DocumentUri &uri : m_diagnostics.keys())
removeDiagnostics(uri);
+ for (TextEditor::TextDocument *document : m_openedDocument.keys())
+ document->disconnect(this);
for (TextEditor::TextDocument *document : m_resetAssistProvider.keys())
resetAssistProviders(document);
return true;
diff --git a/src/plugins/languageclient/languageclientmanager.cpp b/src/plugins/languageclient/languageclientmanager.cpp
index 4e2f3710247..27e74683132 100644
--- a/src/plugins/languageclient/languageclientmanager.cpp
+++ b/src/plugins/languageclient/languageclientmanager.cpp
@@ -366,6 +366,8 @@ void LanguageClientManager::clientFinished(Client *client)
client->log(tr("Unexpectedly finished. Restarting in %1 seconds.").arg(restartTimeoutS),
Core::MessageManager::Flash);
QTimer::singleShot(restartTimeoutS * 1000, client, [client]() { startClient(client); });
+ for (TextEditor::TextDocument *document : m_clientForDocument.keys(client))
+ client->deactivateDocument(document);
} else {
if (unexpectedFinish && !m_shuttingDown)
client->log(tr("Unexpectedly finished."), Core::MessageManager::Flash);
@@ -397,7 +399,8 @@ void LanguageClientManager::editorOpened(Core::IEditor *editor)
if (!widget)
return;
if (Client *client = clientForDocument(widget->textDocument()))
- client->cursorPositionChanged(widget);
+ if (client->reachable())
+ client->cursorPositionChanged(widget);
});
});
updateEditorToolBar(editor);
diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp
index 361419db7fb..e90af4d627f 100644
--- a/src/plugins/texteditor/texteditor.cpp
+++ b/src/plugins/texteditor/texteditor.cpp
@@ -5472,7 +5472,7 @@ void TextEditorWidget::mouseMoveEvent(QMouseEvent *e)
column += (e->pos().x() - cursorRect().center().x()) / QFontMetricsF(font()).horizontalAdvance(QLatin1Char(' '));
d->m_blockSelection.positionBlock = cursor.blockNumber();
- d->m_blockSelection.positionColumn = column;
+ d->m_blockSelection.positionColumn = qMax(0, column);
doSetTextCursor(d->m_blockSelection.selection(d->m_document.data()), true);
viewport()->update();
@@ -7166,7 +7166,7 @@ void TextEditorWidget::rewrapParagraph()
QString currentWord;
for (const QChar &ch : qAsConst(selectedText)) {
- if (ch.isSpace()) {
+ if (ch.isSpace() && ch != QChar::Nbsp) {
if (!currentWord.isEmpty()) {
currentLength += currentWord.length() + 1;
@@ -8055,12 +8055,12 @@ QTextCursor TextBlockSelection::cursor(const TextDocument *baseTextDocument,
}
void TextBlockSelection::fromPostition(int positionBlock, int positionColumn,
- int anchorBlock, int anchorColumn)
+ int anchorBlock, int anchorColumn)
{
- this->positionBlock = positionBlock;
- this->positionColumn = positionColumn;
- this->anchorBlock = anchorBlock;
- this->anchorColumn = anchorColumn;
+ this->positionBlock = QTC_GUARD(positionBlock >= 0) ? positionBlock : 0;
+ this->positionColumn = QTC_GUARD(positionColumn >= 0) ? positionColumn : 0;
+ this->anchorBlock = QTC_GUARD(anchorBlock >= 0) ? anchorBlock : 0;
+ this->anchorColumn = QTC_GUARD(anchorColumn >= 0) ? anchorColumn : 0;
}
bool TextEditorWidget::inFindScope(const QTextCursor &cursor)