forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/4.7' into 4.8
Change-Id: I6780d8103a88e31f42c674a96d0f6bcbba16e4bb
This commit is contained in:
15
dist/changes-4.7.2.md
vendored
15
dist/changes-4.7.2.md
vendored
@@ -7,11 +7,21 @@ you can check out from the public Git repository. For example:
|
|||||||
git clone git://code.qt.io/qt-creator/qt-creator.git
|
git clone git://code.qt.io/qt-creator/qt-creator.git
|
||||||
git log --cherry-pick --pretty=oneline origin/v4.7.1..v4.7.2
|
git log --cherry-pick --pretty=oneline origin/v4.7.1..v4.7.2
|
||||||
|
|
||||||
|
General
|
||||||
|
|
||||||
|
* Fixed crash when pressing wrong shortcut for recent projects in Welcome mode
|
||||||
|
(QTCREATORBUG-21302)
|
||||||
|
* Fixed rare crash in file system view
|
||||||
|
|
||||||
Editing
|
Editing
|
||||||
|
|
||||||
* Fixed that collapsed text no longer showed up in tooltip (QTCREATORBUG-21040)
|
* Fixed that collapsed text no longer showed up in tooltip (QTCREATORBUG-21040)
|
||||||
* Fixed crash with generic text completion (QTCREATORBUG-21192)
|
* Fixed crash with generic text completion (QTCREATORBUG-21192)
|
||||||
|
|
||||||
|
Generic Projects
|
||||||
|
|
||||||
|
* Fixed crash when adding file to sub-folder (QTCREATORBUG-21342)
|
||||||
|
|
||||||
C++ Support
|
C++ Support
|
||||||
|
|
||||||
* Fixed wrong value of `__cplusplus` define (QTCREATORBUG-20884)
|
* Fixed wrong value of `__cplusplus` define (QTCREATORBUG-20884)
|
||||||
@@ -31,6 +41,11 @@ Windows
|
|||||||
|
|
||||||
* Fixed saving of files when another application blocks atomic save operation
|
* Fixed saving of files when another application blocks atomic save operation
|
||||||
(QTCREATORBUG-7668)
|
(QTCREATORBUG-7668)
|
||||||
|
* Fixed wrongly added empty lines in application output (QTCREATORBUG-21215)
|
||||||
|
|
||||||
|
iOS
|
||||||
|
|
||||||
|
* Fixed issue with detecting iPhone XS (QTCREATORBUG-21291)
|
||||||
|
|
||||||
Remote Linux
|
Remote Linux
|
||||||
|
|
||||||
|
@@ -373,13 +373,25 @@ FolderNavigationWidget::FolderNavigationWidget(QWidget *parent) : QWidget(parent
|
|||||||
connect(m_listView, &QAbstractItemView::activated, this, [this](const QModelIndex &index) {
|
connect(m_listView, &QAbstractItemView::activated, this, [this](const QModelIndex &index) {
|
||||||
openItem(m_sortProxyModel->mapToSource(index));
|
openItem(m_sortProxyModel->mapToSource(index));
|
||||||
});
|
});
|
||||||
// use QueuedConnection for updating crumble path, because that can scroll, which doesn't
|
// Delay updating crumble path by event loop cylce, because that can scroll, which doesn't
|
||||||
// work well when done directly in currentChanged (the wrong item can get highlighted)
|
// work well when done directly in currentChanged (the wrong item can get highlighted).
|
||||||
|
// We cannot use Qt::QueuedConnection directly, because the QModelIndex could get invalidated
|
||||||
|
// in the meantime, so use a queued invokeMethod instead.
|
||||||
connect(m_listView->selectionModel(),
|
connect(m_listView->selectionModel(),
|
||||||
&QItemSelectionModel::currentChanged,
|
&QItemSelectionModel::currentChanged,
|
||||||
this,
|
this,
|
||||||
&FolderNavigationWidget::setCrumblePath,
|
[this](const QModelIndex &index) {
|
||||||
Qt::QueuedConnection);
|
const QModelIndex sourceIndex = m_sortProxyModel->mapToSource(index);
|
||||||
|
const auto filePath = Utils::FileName::fromString(
|
||||||
|
m_fileSystemModel->filePath(sourceIndex));
|
||||||
|
// QTimer::singleShot only posts directly onto the event loop if you use the SLOT("...")
|
||||||
|
// notation, so using a singleShot with a lambda would flicker
|
||||||
|
// QTimer::singleShot(0, this, [this, filePath]() { setCrumblePath(filePath); });
|
||||||
|
QMetaObject::invokeMethod(this,
|
||||||
|
"setCrumblePath",
|
||||||
|
Qt::QueuedConnection,
|
||||||
|
Q_ARG(Utils::FileName, filePath));
|
||||||
|
});
|
||||||
connect(m_crumbLabel, &Utils::FileCrumbLabel::pathClicked, [this](const Utils::FileName &path) {
|
connect(m_crumbLabel, &Utils::FileCrumbLabel::pathClicked, [this](const Utils::FileName &path) {
|
||||||
const QModelIndex rootIndex = m_sortProxyModel->mapToSource(m_listView->rootIndex());
|
const QModelIndex rootIndex = m_sortProxyModel->mapToSource(m_listView->rootIndex());
|
||||||
const QModelIndex fileIndex = m_fileSystemModel->index(path.toString());
|
const QModelIndex fileIndex = m_fileSystemModel->index(path.toString());
|
||||||
@@ -623,7 +635,7 @@ void FolderNavigationWidget::selectFile(const Utils::FileName &filePath)
|
|||||||
} else {
|
} else {
|
||||||
m_listView->scrollTo(fileIndex);
|
m_listView->scrollTo(fileIndex);
|
||||||
}
|
}
|
||||||
setCrumblePath(fileIndex);
|
setCrumblePath(filePath);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -699,12 +711,12 @@ void FolderNavigationWidget::createNewFolder(const QModelIndex &parent)
|
|||||||
m_listView->edit(index);
|
m_listView->edit(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FolderNavigationWidget::setCrumblePath(const QModelIndex &index)
|
void FolderNavigationWidget::setCrumblePath(const Utils::FileName &filePath)
|
||||||
{
|
{
|
||||||
const QModelIndex sourceIndex = m_sortProxyModel->mapToSource(index);
|
const QModelIndex index = m_fileSystemModel->index(filePath.toString());
|
||||||
const int width = m_crumbLabel->width();
|
const int width = m_crumbLabel->width();
|
||||||
const int previousHeight = m_crumbLabel->immediateHeightForWidth(width);
|
const int previousHeight = m_crumbLabel->immediateHeightForWidth(width);
|
||||||
m_crumbLabel->setPath(Utils::FileName::fromString(m_fileSystemModel->filePath(sourceIndex)));
|
m_crumbLabel->setPath(filePath);
|
||||||
const int currentHeight = m_crumbLabel->immediateHeightForWidth(width);
|
const int currentHeight = m_crumbLabel->immediateHeightForWidth(width);
|
||||||
const int diff = currentHeight - previousHeight;
|
const int diff = currentHeight - previousHeight;
|
||||||
if (diff != 0 && m_crumbLabel->isVisible()) {
|
if (diff != 0 && m_crumbLabel->isVisible()) {
|
||||||
|
@@ -118,6 +118,9 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
void contextMenuEvent(QContextMenuEvent *ev) override;
|
void contextMenuEvent(QContextMenuEvent *ev) override;
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void setCrumblePath(const Utils::FileName &filePath);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool rootAutoSynchronization() const;
|
bool rootAutoSynchronization() const;
|
||||||
void setRootAutoSynchronization(bool sync);
|
void setRootAutoSynchronization(bool sync);
|
||||||
@@ -131,7 +134,6 @@ private:
|
|||||||
QStringList projectsInDirectory(const QModelIndex &index) const;
|
QStringList projectsInDirectory(const QModelIndex &index) const;
|
||||||
void openProjectsInDirectory(const QModelIndex &index);
|
void openProjectsInDirectory(const QModelIndex &index);
|
||||||
void createNewFolder(const QModelIndex &parent);
|
void createNewFolder(const QModelIndex &parent);
|
||||||
void setCrumblePath(const QModelIndex &index);
|
|
||||||
|
|
||||||
Core::IContext *m_context = nullptr;
|
Core::IContext *m_context = nullptr;
|
||||||
Utils::NavigationTreeView *m_listView = nullptr;
|
Utils::NavigationTreeView *m_listView = nullptr;
|
||||||
|
@@ -423,6 +423,7 @@ public:
|
|||||||
void requestDeviceInfo(const QString &deviceId, int timeout);
|
void requestDeviceInfo(const QString &deviceId, int timeout);
|
||||||
QStringList errors();
|
QStringList errors();
|
||||||
void addError(QString errorMsg);
|
void addError(QString errorMsg);
|
||||||
|
QString deviceId(AMDeviceRef device);
|
||||||
void addDevice(AMDeviceRef device);
|
void addDevice(AMDeviceRef device);
|
||||||
void removeDevice(AMDeviceRef device);
|
void removeDevice(AMDeviceRef device);
|
||||||
void checkPendingLookups();
|
void checkPendingLookups();
|
||||||
@@ -654,11 +655,18 @@ void IosDeviceManagerPrivate::addError(QString errorMsg)
|
|||||||
emit q->errorMsg(errorMsg);
|
emit q->errorMsg(errorMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IosDeviceManagerPrivate::addDevice(AMDeviceRef device)
|
QString IosDeviceManagerPrivate::deviceId(AMDeviceRef device)
|
||||||
{
|
{
|
||||||
CFStringRef s = m_lib.deviceCopyDeviceIdentifier(device);
|
CFStringRef s = m_lib.deviceCopyDeviceIdentifier(device);
|
||||||
QString devId = QString::fromCFString(s);
|
// remove dashes as a hotfix for QTCREATORBUG-21291
|
||||||
|
const auto id = QString::fromCFString(s).remove('-');
|
||||||
if (s) CFRelease(s);
|
if (s) CFRelease(s);
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
void IosDeviceManagerPrivate::addDevice(AMDeviceRef device)
|
||||||
|
{
|
||||||
|
const QString devId = deviceId(device);
|
||||||
CFRetain(device);
|
CFRetain(device);
|
||||||
|
|
||||||
DeviceInterfaceType interfaceType = static_cast<DeviceInterfaceType>(lib()->deviceGetInterfaceType(device));
|
DeviceInterfaceType interfaceType = static_cast<DeviceInterfaceType>(lib()->deviceGetInterfaceType(device));
|
||||||
@@ -703,10 +711,7 @@ void IosDeviceManagerPrivate::addDevice(AMDeviceRef device)
|
|||||||
|
|
||||||
void IosDeviceManagerPrivate::removeDevice(AMDeviceRef device)
|
void IosDeviceManagerPrivate::removeDevice(AMDeviceRef device)
|
||||||
{
|
{
|
||||||
CFStringRef s = m_lib.deviceCopyDeviceIdentifier(device);
|
const QString devId = deviceId(device);
|
||||||
QString devId = QString::fromCFString(s);
|
|
||||||
if (s)
|
|
||||||
CFRelease(s);
|
|
||||||
if (debugAll)
|
if (debugAll)
|
||||||
qDebug() << "removeDevice " << devId;
|
qDebug() << "removeDevice " << devId;
|
||||||
if (m_devices.contains(devId)) {
|
if (m_devices.contains(devId)) {
|
||||||
|
Reference in New Issue
Block a user