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)