Merge remote-tracking branch 'origin/4.11'

Change-Id: Ie9859185470ae46e49a25e732336c4a95eaad4ed
This commit is contained in:
Eike Ziller
2019-09-26 15:23:51 +02:00
7 changed files with 142 additions and 70 deletions

57
dist/changes-4.10.1.md vendored Normal file
View File

@@ -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

View File

@@ -83,6 +83,7 @@ class Dumper(DumperBase):
# 'communication', 'unwind', 'commands']) # 'communication', 'unwind', 'commands'])
#self.debugger.EnableLog('lldb', ['all']) #self.debugger.EnableLog('lldb', ['all'])
self.debugger.Initialize() self.debugger.Initialize()
self.debugger.SetAsync(True)
self.debugger.HandleCommand('settings set auto-confirm on') self.debugger.HandleCommand('settings set auto-confirm on')
# FIXME: warn('DISABLING DEFAULT FORMATTERS') # FIXME: warn('DISABLING DEFAULT FORMATTERS')
@@ -863,10 +864,7 @@ class Dumper(DumperBase):
pass pass
else: else:
if self.useTerminal_: if self.useTerminal_:
self.ignoreStops = 2 self.ignoreStops = 1
else:
if self.useTerminal_:
self.ignoreStops = 1
if self.platform_: if self.platform_:
self.debugger.SetCurrentPlatform(self.platform_) self.debugger.SetCurrentPlatform(self.platform_)
@@ -895,7 +893,6 @@ class Dumper(DumperBase):
def prepare(self, args): def prepare(self, args):
error = lldb.SBError() error = lldb.SBError()
listener = self.debugger.GetListener()
if self.attachPid_ > 0: if self.attachPid_ > 0:
attachInfo = lldb.SBAttachInfo(self.attachPid_) attachInfo = lldb.SBAttachInfo(self.attachPid_)
@@ -948,18 +945,23 @@ class Dumper(DumperBase):
if self.target is not None: if self.target is not None:
broadcaster = self.target.GetBroadcaster() broadcaster = self.target.GetBroadcaster()
listener = self.debugger.GetListener() listener = self.debugger.GetListener()
broadcaster.AddListener(listener, lldb.SBProcess.eBroadcastBitStateChanged)
listener.StartListeningForEvents(broadcaster, lldb.SBProcess.eBroadcastBitStateChanged)
broadcaster.AddListener(listener, lldb.SBTarget.eBroadcastBitBreakpointChanged) broadcaster.AddListener(listener, lldb.SBTarget.eBroadcastBitBreakpointChanged)
listener.StartListeningForEvents(broadcaster, lldb.SBTarget.eBroadcastBitBreakpointChanged) listener.StartListeningForEvents(broadcaster, lldb.SBTarget.eBroadcastBitBreakpointChanged)
def loop(self): def loop(self):
event = lldb.SBEvent() event = lldb.SBEvent()
broadcaster = self.target.GetBroadcaster()
listener = self.debugger.GetListener() listener = self.debugger.GetListener()
while True: 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) self.handleEvent(event)
else: if listener.WaitForEventForBroadcaster(0, broadcaster, event):
warn('TIMEOUT') self.handleEvent(event)
def describeError(self, error): def describeError(self, error):
desc = lldb.SBStream() desc = lldb.SBStream()
@@ -1301,6 +1303,10 @@ class Dumper(DumperBase):
if lldb.SBBreakpoint.EventIsBreakpointEvent(event): if lldb.SBBreakpoint.EventIsBreakpointEvent(event):
self.handleBreakpointEvent(event) self.handleBreakpointEvent(event)
return return
if not lldb.SBProcess.EventIsProcessEvent(event):
warn("UNEXPECTED event (%s)" % event.GetType())
return
out = lldb.SBStream() out = lldb.SBStream()
event.GetDescription(out) event.GetDescription(out)
#warn("EVENT: %s" % event) #warn("EVENT: %s" % event)
@@ -1793,7 +1799,7 @@ class Dumper(DumperBase):
expr = self.parseAndEvaluate(expr) expr = self.parseAndEvaluate(expr)
self.qqEditable[typeName](self, expr, value) self.qqEditable[typeName](self, expr, value)
else: else:
lhs.SetValueFromCString(value, error) self.parseAndEvaluate(expr + '=' + value)
self.reportResult(self.describeError(error), args) self.reportResult(self.describeError(error), args)
def watchPoint(self, args): def watchPoint(self, args):

View File

@@ -1,11 +1,11 @@
{ {
\"Name\" : \"%PluginName%\", \\"Name\\" : \\"%PluginName%\\",
\"Version\" : \"0.0.1\", \\"Version\\" : \\"0.0.1\\",
\"CompatVersion\" : \"0.0.1\", \\"CompatVersion\\" : \\"0.0.1\\",
\"Vendor\" : \"%VendorName%\", \\"Vendor\\" : \\"%VendorName%\\",
\"Copyright\" : \"%Copyright%\", \\"Copyright\\" : \\"%Copyright%\\",
\"License\" : \"%License%\", \\"License\\" : \\"%License%\\",
\"Description\" : \"%Description%\", \\"Description\\" : \\"%Description%\\",
\"Url\" : \"%URL%\", \\"Url\\" : \\"%URL%\\",
$$dependencyList $$dependencyList
} }

View File

@@ -553,6 +553,7 @@ void PerspectivePrivate::resetPerspective()
} else { } else {
op.setupLayout(); op.setupLayout();
op.dock->setVisible(op.visibleByDefault); op.dock->setVisible(op.visibleByDefault);
theMainWindow->d->m_persistentChangedDocks.remove(op.name());
qCDebug(perspectivesLog) << "SETTING " << op.name() qCDebug(perspectivesLog) << "SETTING " << op.name()
<< " TO ACTIVE: " << op.visibleByDefault; << " TO ACTIVE: " << op.visibleByDefault;
} }
@@ -937,12 +938,10 @@ void PerspectivePrivate::restoreLayout()
qCDebug(perspectivesLog) << "PERSPECTIVE STATE AVAILABLE BY FULL ID."; qCDebug(perspectivesLog) << "PERSPECTIVE STATE AVAILABLE BY FULL ID.";
} }
if (state.isEmpty()) { // The order is important here: While QMainWindow can restore layouts with
qCDebug(perspectivesLog) << "PERSPECTIVE " << m_id << "RESTORE NOT POSSIBLE, NO STORED STATE"; // not-existing docks (some placeholders are used internally), later
} else { // replacements with restoreDockWidget(dock) trigger a re-layout, resulting
bool result = theMainWindow->restoreState(state); // in different sizes. So make sure all docks exist first before restoring state.
qCDebug(perspectivesLog) << "PERSPECTIVE " << m_id << "RESTORED. SUCCESS: " << result;
}
qCDebug(perspectivesLog) << "PERSPECTIVE" << m_id << "RESTORING LAYOUT FROM " << settingsId(); qCDebug(perspectivesLog) << "PERSPECTIVE" << m_id << "RESTORING LAYOUT FROM " << settingsId();
for (DockOperation &op : m_dockOperations) { for (DockOperation &op : m_dockOperations) {
@@ -955,6 +954,13 @@ void PerspectivePrivate::restoreLayout()
<< (active == op.visibleByDefault ? "DEFAULT USER" : "*** NON-DEFAULT USER"); << (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() void PerspectivePrivate::saveLayout()

View File

@@ -117,7 +117,7 @@ HelpWidget::HelpWidget(const Core::Context &context, WidgetStyle style, QWidget
{ {
m_viewerStack = new QStackedWidget; m_viewerStack = new QStackedWidget;
if (style == ModeWidget) if (supportsPages())
m_openPagesManager = new OpenPagesManager(this); m_openPagesManager = new OpenPagesManager(this);
auto topLayout = new QVBoxLayout; auto topLayout = new QVBoxLayout;
@@ -250,13 +250,10 @@ HelpWidget::HelpWidget(const Core::Context &context, WidgetStyle style, QWidget
connect(m_openOnlineDocumentationAction, &QAction::triggered, this, &HelpWidget::openOnlineDocumentation); connect(m_openOnlineDocumentationAction, &QAction::triggered, this, &HelpWidget::openOnlineDocumentation);
layout->addWidget(Core::Command::toolButtonWithAppendedShortcut(m_openOnlineDocumentationAction, cmd)); layout->addWidget(Core::Command::toolButtonWithAppendedShortcut(m_openOnlineDocumentationAction, cmd));
if (style == ModeWidget) { if (supportsPages()) {
layout->addWidget(new Utils::StyledSeparator(toolBar)); layout->addWidget(new Utils::StyledSeparator(toolBar));
layout->addWidget(m_openPagesManager->openPagesComboBox(), 10); layout->addWidget(m_openPagesManager->openPagesComboBox(), 10);
} else {
layout->addWidget(new QLabel(), 10);
}
if (style != SideBarWidget) {
m_filterComboBox = new QComboBox; m_filterComboBox = new QComboBox;
m_filterComboBox->setMinimumContentsLength(15); m_filterComboBox->setMinimumContentsLength(15);
m_filterComboBox->setModel(LocalHelpManager::filterModel()); m_filterComboBox->setModel(LocalHelpManager::filterModel());
@@ -266,6 +263,8 @@ HelpWidget::HelpWidget(const Core::Context &context, WidgetStyle style, QWidget
LocalHelpManager::instance(), &LocalHelpManager::setFilterIndex); LocalHelpManager::instance(), &LocalHelpManager::setFilterIndex);
connect(LocalHelpManager::instance(), &LocalHelpManager::filterIndexChanged, connect(LocalHelpManager::instance(), &LocalHelpManager::filterIndexChanged,
m_filterComboBox, &QComboBox::setCurrentIndex); m_filterComboBox, &QComboBox::setCurrentIndex);
} else {
layout->addWidget(new QLabel(), 10);
} }
layout->addStretch(); layout->addStretch();
@@ -308,16 +307,16 @@ HelpWidget::HelpWidget(const Core::Context &context, WidgetStyle style, QWidget
auto openMenu = new QMenu(openButton); auto openMenu = new QMenu(openButton);
openButton->setMenu(openMenu); openButton->setMenu(openMenu);
if (m_switchToHelp)
openMenu->addAction(m_switchToHelp);
if (supportsPages()) {
QAction *openPage = openMenu->addAction(tr("Open in New Page"));
connect(openPage, &QAction::triggered, this, [this]() {
if (HelpViewer *viewer = currentViewer())
openNewPage(viewer->source());
});
}
if (style != ExternalWindow) { if (style != ExternalWindow) {
if (m_switchToHelp)
openMenu->addAction(m_switchToHelp);
if (style == ModeWidget) {
QAction *openPage = openMenu->addAction(tr("Open in New Page"));
connect(openPage, &QAction::triggered, this, [this]() {
if (HelpViewer *viewer = currentViewer())
openNewPage(viewer->source());
});
}
QAction *openExternal = openMenu->addAction(tr("Open in Window")); QAction *openExternal = openMenu->addAction(tr("Open in Window"));
connect(openExternal, &QAction::triggered, this, [this]() { connect(openExternal, &QAction::triggered, this, [this]() {
if (HelpViewer *viewer = currentViewer()) { if (HelpViewer *viewer = currentViewer()) {
@@ -326,20 +325,20 @@ HelpWidget::HelpWidget(const Core::Context &context, WidgetStyle style, QWidget
emit closeButtonClicked(); emit closeButtonClicked();
} }
}); });
openMenu->addSeparator();
const Utils::Icon &icon = style == ModeWidget ? Utils::Icons::CLOSE_TOOLBAR
: Utils::Icons::CLOSE_SPLIT_RIGHT;
m_closeAction = new QAction(icon.icon(), QString(), toolBar);
connect(m_closeAction, &QAction::triggered, this, &HelpWidget::closeButtonClicked);
connect(m_closeAction, &QAction::triggered, this, [this] {
if (viewerCount() > 1)
closeCurrentPage();
});
button = new QToolButton;
button->setDefaultAction(m_closeAction);
layout->addWidget(button);
} }
openMenu->addSeparator();
const Utils::Icon &icon = style == SideBarWidget ? Utils::Icons::CLOSE_SPLIT_RIGHT
: Utils::Icons::CLOSE_TOOLBAR;
m_closeAction = new QAction(icon.icon(), QString(), toolBar);
connect(m_closeAction, &QAction::triggered, this, &HelpWidget::closeButtonClicked);
connect(m_closeAction, &QAction::triggered, this, [this] {
if (viewerCount() > 1)
closeCurrentPage();
});
button = new QToolButton;
button->setDefaultAction(m_closeAction);
layout->addWidget(button);
QAction *reload = openMenu->addAction(tr("Reload")); QAction *reload = openMenu->addAction(tr("Reload"));
connect(reload, &QAction::triggered, this, [this]() { connect(reload, &QAction::triggered, this, [this]() {
@@ -402,11 +401,10 @@ void HelpWidget::addSideBar()
{ {
QMap<QString, Core::Command *> shortcutMap; QMap<QString, Core::Command *> shortcutMap;
Core::Command *cmd; Core::Command *cmd;
bool supportsNewPages = (m_style == ModeWidget);
auto contentWindow = new ContentWindow; auto contentWindow = new ContentWindow;
auto contentItem = new Core::SideBarItem(contentWindow, Constants::HELP_CONTENTS); auto contentItem = new Core::SideBarItem(contentWindow, Constants::HELP_CONTENTS);
contentWindow->setOpenInNewPageActionVisible(supportsNewPages); contentWindow->setOpenInNewPageActionVisible(supportsPages());
contentWindow->setWindowTitle(HelpPlugin::tr(Constants::SB_CONTENTS)); contentWindow->setWindowTitle(HelpPlugin::tr(Constants::SB_CONTENTS));
connect(contentWindow, &ContentWindow::linkActivated, connect(contentWindow, &ContentWindow::linkActivated,
this, &HelpWidget::open); this, &HelpWidget::open);
@@ -418,7 +416,7 @@ void HelpWidget::addSideBar()
auto indexWindow = new IndexWindow(); auto indexWindow = new IndexWindow();
auto indexItem = new Core::SideBarItem(indexWindow, Constants::HELP_INDEX); auto indexItem = new Core::SideBarItem(indexWindow, Constants::HELP_INDEX);
indexWindow->setOpenInNewPageActionVisible(supportsNewPages); indexWindow->setOpenInNewPageActionVisible(supportsPages());
indexWindow->setWindowTitle(HelpPlugin::tr(Constants::SB_INDEX)); indexWindow->setWindowTitle(HelpPlugin::tr(Constants::SB_INDEX));
connect(indexWindow, &IndexWindow::linksActivated, connect(indexWindow, &IndexWindow::linksActivated,
this, &HelpWidget::showLinks); this, &HelpWidget::showLinks);
@@ -430,7 +428,7 @@ void HelpWidget::addSideBar()
auto bookmarkWidget = new BookmarkWidget(&LocalHelpManager::bookmarkManager()); auto bookmarkWidget = new BookmarkWidget(&LocalHelpManager::bookmarkManager());
bookmarkWidget->setWindowTitle(HelpPlugin::tr(Constants::SB_BOOKMARKS)); bookmarkWidget->setWindowTitle(HelpPlugin::tr(Constants::SB_BOOKMARKS));
bookmarkWidget->setOpenInNewPageActionVisible(supportsNewPages); bookmarkWidget->setOpenInNewPageActionVisible(supportsPages());
auto bookmarkItem = new Core::SideBarItem(bookmarkWidget, Constants::HELP_BOOKMARKS); auto bookmarkItem = new Core::SideBarItem(bookmarkWidget, Constants::HELP_BOOKMARKS);
connect(bookmarkWidget, &BookmarkWidget::linkActivated, this, &HelpWidget::setSource); connect(bookmarkWidget, &BookmarkWidget::linkActivated, this, &HelpWidget::setSource);
m_bookmarkAction = new QAction(tr("Activate Help Bookmarks View"), this); m_bookmarkAction = new QAction(tr("Activate Help Bookmarks View"), this);
@@ -450,17 +448,16 @@ void HelpWidget::addSideBar()
shortcutMap.insert(Constants::HELP_SEARCH, cmd); shortcutMap.insert(Constants::HELP_SEARCH, cmd);
Core::SideBarItem *openPagesItem = nullptr; Core::SideBarItem *openPagesItem = nullptr;
if (m_style == ModeWidget) { QWidget *openPagesWidget = m_openPagesManager->openPagesWidget();
QWidget *openPagesWidget = m_openPagesManager->openPagesWidget(); openPagesWidget->setWindowTitle(HelpPlugin::tr(Constants::SB_OPENPAGES));
openPagesWidget->setWindowTitle(HelpPlugin::tr(Constants::SB_OPENPAGES)); openPagesItem = new Core::SideBarItem(openPagesWidget, Constants::HELP_OPENPAGES);
openPagesItem = new Core::SideBarItem(openPagesWidget, Constants::HELP_OPENPAGES); m_openPagesAction = new QAction(tr("Activate Open Help Pages View"), this);
m_openPagesAction = new QAction(tr("Activate Open Help Pages View"), this); cmd = Core::ActionManager::registerAction(m_openPagesAction,
cmd = Core::ActionManager::registerAction(m_openPagesAction, Constants::HELP_OPENPAGES, Constants::HELP_OPENPAGES,
m_context->context()); m_context->context());
cmd->setDefaultKeySequence(QKeySequence(Core::useMacShortcuts ? tr("Meta+O") cmd->setDefaultKeySequence(
: tr("Ctrl+Shift+O"))); QKeySequence(Core::useMacShortcuts ? tr("Meta+O") : tr("Ctrl+Shift+O")));
shortcutMap.insert(Constants::HELP_OPENPAGES, cmd); shortcutMap.insert(Constants::HELP_OPENPAGES, cmd);
}
QList<Core::SideBarItem *> itemList = {contentItem, indexItem, bookmarkItem, searchItem}; QList<Core::SideBarItem *> itemList = {contentItem, indexItem, bookmarkItem, searchItem};
if (openPagesItem) if (openPagesItem)
@@ -546,7 +543,7 @@ HelpViewer *HelpWidget::insertViewer(int index, const QUrl &url, qreal zoom)
HelpViewer *viewer = HelpPlugin::createHelpViewer(zoom); HelpViewer *viewer = HelpPlugin::createHelpViewer(zoom);
m_viewerStack->insertWidget(index, viewer); m_viewerStack->insertWidget(index, viewer);
viewer->setFocus(Qt::OtherFocusReason); viewer->setFocus(Qt::OtherFocusReason);
viewer->setActionVisible(HelpViewer::Action::NewPage, m_style == ModeWidget); viewer->setActionVisible(HelpViewer::Action::NewPage, supportsPages());
viewer->setActionVisible(HelpViewer::Action::ExternalWindow, m_style != ExternalWindow); viewer->setActionVisible(HelpViewer::Action::ExternalWindow, m_style != ExternalWindow);
connect(viewer, &HelpViewer::sourceChanged, this, [viewer, this](const QUrl &url) { connect(viewer, &HelpViewer::sourceChanged, this, [viewer, this](const QUrl &url) {
if (currentViewer() == viewer) { if (currentViewer() == viewer) {
@@ -741,10 +738,15 @@ void HelpWidget::saveState() const
} }
} }
bool HelpWidget::supportsPages() const
{
return m_style != SideBarWidget;
}
void HelpWidget::updateCloseButton() void HelpWidget::updateCloseButton()
{ {
if (m_style == ModeWidget) { if (supportsPages()) {
const bool closeOnReturn = LocalHelpManager::returnOnClose(); const bool closeOnReturn = LocalHelpManager::returnOnClose() && m_style == ModeWidget;
m_closeAction->setEnabled(closeOnReturn || m_viewerStack->count() > 1); m_closeAction->setEnabled(closeOnReturn || m_viewerStack->count() > 1);
} }
} }

View File

@@ -125,6 +125,7 @@ private:
void helpModeButtonClicked(); void helpModeButtonClicked();
void closeCurrentPage(); void closeCurrentPage();
void saveState() const; void saveState() const;
bool supportsPages() const;
void goHome(); void goHome();
void addBookmark(); void addBookmark();