diff --git a/dist/changes-4.10.1.md b/dist/changes-4.10.1.md new file mode 100644 index 00000000000..6e5d0db956d --- /dev/null +++ b/dist/changes-4.10.1.md @@ -0,0 +1,57 @@ +# Qt Creator 4.10.1 + +Qt Creator version 4.10.1 contains bug fixes. + +The most important changes are listed in this document. For a complete +list of changes, see the Git log for the Qt Creator sources that +you can check out from the public Git repository. For example: + + git clone git://code.qt.io/qt-creator/qt-creator.git + git log --cherry-pick --pretty=oneline origin/v4.10.0..v4.10.1 + +## Editing + +* Fixed file saving with some text encodings +* Fixed `Preserve case` in advanced search and replace (QTCREATORBUG-19696) +* Fixed crash when changing editor font (QTCREATORBUG-22933) + +## Help + +* Fixed that text moved around when resizing and zooming (QTCREATORBUG-4756) + +## Debugging + +* Fixed more layout restoration issues (QTCREATORBUG-22286, QTCREATORBUG-22938) + +### LLDB + +* Fixed wrong empty command line argument when debugging (QTCREATORBUG-22975) + +## Qt Quick Designer + +* Removed transformations from list of unsupported types +* Fixed update of animation curve editor + +## Platform Specific + +### macOS + +* Fixed window stacking order after closing file dialog (QTCREATORBUG-22906) + +## Credits for these changes go to: + +Aleksei German +Alexander Akulich +Andre Hartmann +André Pönitz +Christian Stenger +David Schulz +Eike Ziller +Knud Dollereder +Leena Miettinen +Lisandro Damián Nicanor Pérez Meyer +Nikolai Kosjar +Orgad Shaneh +Richard Weickelt +Thomas Hartmann + diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py index 34589e0dd84..689753a8003 100644 --- a/share/qtcreator/debugger/lldbbridge.py +++ b/share/qtcreator/debugger/lldbbridge.py @@ -83,6 +83,7 @@ class Dumper(DumperBase): # 'communication', 'unwind', 'commands']) #self.debugger.EnableLog('lldb', ['all']) self.debugger.Initialize() + self.debugger.SetAsync(True) self.debugger.HandleCommand('settings set auto-confirm on') # FIXME: warn('DISABLING DEFAULT FORMATTERS') @@ -863,10 +864,7 @@ class Dumper(DumperBase): pass else: if self.useTerminal_: - self.ignoreStops = 2 - else: - if self.useTerminal_: - self.ignoreStops = 1 + self.ignoreStops = 1 if self.platform_: self.debugger.SetCurrentPlatform(self.platform_) @@ -895,7 +893,6 @@ class Dumper(DumperBase): def prepare(self, args): error = lldb.SBError() - listener = self.debugger.GetListener() if self.attachPid_ > 0: attachInfo = lldb.SBAttachInfo(self.attachPid_) @@ -948,18 +945,23 @@ class Dumper(DumperBase): if self.target is not None: broadcaster = self.target.GetBroadcaster() listener = self.debugger.GetListener() + broadcaster.AddListener(listener, lldb.SBProcess.eBroadcastBitStateChanged) + listener.StartListeningForEvents(broadcaster, lldb.SBProcess.eBroadcastBitStateChanged) broadcaster.AddListener(listener, lldb.SBTarget.eBroadcastBitBreakpointChanged) listener.StartListeningForEvents(broadcaster, lldb.SBTarget.eBroadcastBitBreakpointChanged) def loop(self): event = lldb.SBEvent() + broadcaster = self.target.GetBroadcaster() listener = self.debugger.GetListener() while True: - if listener.WaitForEvent(10000000, event): + sys.stdout.flush() # IMPORTANT! to receive process state changes with lldb 1100 + while listener.GetNextEvent(event): self.handleEvent(event) - else: - warn('TIMEOUT') + if listener.WaitForEventForBroadcaster(0, broadcaster, event): + self.handleEvent(event) + def describeError(self, error): desc = lldb.SBStream() @@ -1301,6 +1303,10 @@ class Dumper(DumperBase): if lldb.SBBreakpoint.EventIsBreakpointEvent(event): self.handleBreakpointEvent(event) return + if not lldb.SBProcess.EventIsProcessEvent(event): + warn("UNEXPECTED event (%s)" % event.GetType()) + return + out = lldb.SBStream() event.GetDescription(out) #warn("EVENT: %s" % event) @@ -1793,7 +1799,7 @@ class Dumper(DumperBase): expr = self.parseAndEvaluate(expr) self.qqEditable[typeName](self, expr, value) else: - lhs.SetValueFromCString(value, error) + self.parseAndEvaluate(expr + '=' + value) self.reportResult(self.describeError(error), args) def watchPoint(self, args): diff --git a/share/qtcreator/templates/wizards/qtcreatorplugin/MyPlugin.json.in b/share/qtcreator/templates/wizards/qtcreatorplugin/MyPlugin.json.in index 910746c9fb9..68bedd40704 100644 --- a/share/qtcreator/templates/wizards/qtcreatorplugin/MyPlugin.json.in +++ b/share/qtcreator/templates/wizards/qtcreatorplugin/MyPlugin.json.in @@ -1,11 +1,11 @@ { - \"Name\" : \"%PluginName%\", - \"Version\" : \"0.0.1\", - \"CompatVersion\" : \"0.0.1\", - \"Vendor\" : \"%VendorName%\", - \"Copyright\" : \"%Copyright%\", - \"License\" : \"%License%\", - \"Description\" : \"%Description%\", - \"Url\" : \"%URL%\", + \\"Name\\" : \\"%PluginName%\\", + \\"Version\\" : \\"0.0.1\\", + \\"CompatVersion\\" : \\"0.0.1\\", + \\"Vendor\\" : \\"%VendorName%\\", + \\"Copyright\\" : \\"%Copyright%\\", + \\"License\\" : \\"%License%\\", + \\"Description\\" : \\"%Description%\\", + \\"Url\\" : \\"%URL%\\", $$dependencyList } diff --git a/src/plugins/debugger/debuggermainwindow.cpp b/src/plugins/debugger/debuggermainwindow.cpp index caa145b0f7c..b77a2536a6b 100644 --- a/src/plugins/debugger/debuggermainwindow.cpp +++ b/src/plugins/debugger/debuggermainwindow.cpp @@ -553,6 +553,7 @@ void PerspectivePrivate::resetPerspective() } else { op.setupLayout(); op.dock->setVisible(op.visibleByDefault); + theMainWindow->d->m_persistentChangedDocks.remove(op.name()); qCDebug(perspectivesLog) << "SETTING " << op.name() << " TO ACTIVE: " << op.visibleByDefault; } @@ -937,12 +938,10 @@ void PerspectivePrivate::restoreLayout() qCDebug(perspectivesLog) << "PERSPECTIVE STATE AVAILABLE BY FULL ID."; } - if (state.isEmpty()) { - qCDebug(perspectivesLog) << "PERSPECTIVE " << m_id << "RESTORE NOT POSSIBLE, NO STORED STATE"; - } else { - bool result = theMainWindow->restoreState(state); - qCDebug(perspectivesLog) << "PERSPECTIVE " << m_id << "RESTORED. SUCCESS: " << result; - } + // The order is important here: While QMainWindow can restore layouts with + // not-existing docks (some placeholders are used internally), later + // replacements with restoreDockWidget(dock) trigger a re-layout, resulting + // in different sizes. So make sure all docks exist first before restoring state. qCDebug(perspectivesLog) << "PERSPECTIVE" << m_id << "RESTORING LAYOUT FROM " << settingsId(); for (DockOperation &op : m_dockOperations) { @@ -955,6 +954,13 @@ void PerspectivePrivate::restoreLayout() << (active == op.visibleByDefault ? "DEFAULT USER" : "*** NON-DEFAULT USER"); } } + + if (state.isEmpty()) { + qCDebug(perspectivesLog) << "PERSPECTIVE " << m_id << "RESTORE NOT POSSIBLE, NO STORED STATE"; + } else { + bool result = theMainWindow->restoreState(state); + qCDebug(perspectivesLog) << "PERSPECTIVE " << m_id << "RESTORED, SUCCESS: " << result; + } } void PerspectivePrivate::saveLayout() diff --git a/src/shared/qbs b/src/shared/qbs index 8c290c624d3..94fe404a5a6 160000 --- a/src/shared/qbs +++ b/src/shared/qbs @@ -1 +1 @@ -Subproject commit 8c290c624d343406442b87121ccb2e4eab0e6e51 +Subproject commit 94fe404a5a6d7cf91926bcfbd026953994b25815