Merge remote branch 'origin/2.2'

Conflicts:
	src/plugins/projectexplorer/gcctoolchain.cpp
	src/plugins/projectexplorer/target.cpp
	src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.cpp
This commit is contained in:
con
2011-04-27 11:27:29 +02:00
21 changed files with 77 additions and 97 deletions

View File

@@ -11022,6 +11022,24 @@
switch to the nfs-kernel-server, or create a symlink so that the switch to the nfs-kernel-server, or create a symlink so that the
settings are stored locally. settings are stored locally.
\o The Okteta KDE custom widget plugin might be installed as part of
some Linux distributions. It can cause Qt Designer to crash. For
more information, see:
\list
\o \l{https://bugs.launchpad.net/ubuntu/+source/kdeutils/+bug/662005}{Ubuntu bug 662005}
\o \l{http://bugreports.qt.nokia.com/browse/QTBUG-12025}{QTBUG-12025}
\endlist
To resolve the issue, enter the following command to remove the package:
\code
sudo apt-get remove okteta
\endcode
Or delete the following file:
\c /usr/lib/kde4/plugins/designer/oktetadesignerplugin.so.
\endlist \endlist
\section1 Editing Issues \section1 Editing Issues

View File

@@ -9544,6 +9544,10 @@ S60 emulator run configuration default display name, %1 is base pro-File name</e
<source>&lt;b&gt;qmake:&lt;/b&gt; %1 %2</source> <source>&lt;b&gt;qmake:&lt;/b&gt; %1 %2</source>
<translation>&lt;b&gt;qmake:&lt;/b&gt; %1 %2</translation> <translation>&lt;b&gt;qmake:&lt;/b&gt; %1 %2</translation>
</message> </message>
<message>
<source>Might make the application vulnerable. Use only in a safe environment.</source>
<translation>Kann die Anwendung angreifbar machen. Verwenden sie diese Option nur in sicherer Umgebung.</translation>
</message>
</context> </context>
<context> <context>
<name>Qt4ProjectManager::Qt4Manager</name> <name>Qt4ProjectManager::Qt4Manager</name>

View File

@@ -21045,6 +21045,10 @@ Check if the phone is connected and App TRK is running.</source>
<source>&lt;b&gt;qmake:&lt;/b&gt; %1 %2</source> <source>&lt;b&gt;qmake:&lt;/b&gt; %1 %2</source>
<translation>&lt;b&gt;qmake:&lt;/b&gt; %1 %2</translation> <translation>&lt;b&gt;qmake:&lt;/b&gt; %1 %2</translation>
</message> </message>
<message>
<source>Might make the application vulnerable. Use only in a safe environment.</source>
<translation>Может сделать приложение уязвимым. Используйте только в безопасных системах.</translation>
</message>
</context> </context>
<context> <context>
<name>Qt4ProjectManager::QmlDebuggingLibrary</name> <name>Qt4ProjectManager::QmlDebuggingLibrary</name>

View File

@@ -81,7 +81,10 @@ static QString quoteWinArgument(const QString &arg)
// The argument must not end with a \ since this would be interpreted // The argument must not end with a \ since this would be interpreted
// as escaping the quote -- rather put the \ behind the quote: e.g. // as escaping the quote -- rather put the \ behind the quote: e.g.
// rather use "foo"\ than "foo\" // rather use "foo"\ than "foo\"
ret.replace(QRegExp(QLatin1String("(\\\\*)$")), QLatin1String("\"\\1")); int i = ret.length();
while (i > 0 && ret.at(i - 1) == QLatin1Char('\\'))
--i;
ret.insert(i, QLatin1Char('"'));
ret.prepend(QLatin1Char('"')); ret.prepend(QLatin1Char('"'));
} }
return ret; return ret;

View File

@@ -163,6 +163,19 @@ QTCREATOR_UTILS_EXPORT QString getLongPathName(const QString &name)
return rc; return rc;
} }
// makes sure that capitalization of directories is canonical.
// This mimics the logic in QDeclarative_isFileCaseCorrect
QTCREATOR_UTILS_EXPORT QString normalizePathName(const QString &name)
{
QString canonicalName = getShortPathName(name);
if (canonicalName.isEmpty())
return name;
canonicalName = getLongPathName(canonicalName);
if (canonicalName.isEmpty())
return name;
return canonicalName;
}
QTCREATOR_UTILS_EXPORT unsigned long winQPidToPid(const Q_PID qpid) QTCREATOR_UTILS_EXPORT unsigned long winQPidToPid(const Q_PID qpid)
{ {
const PROCESS_INFORMATION *processInfo = reinterpret_cast<const PROCESS_INFORMATION*>(qpid); const PROCESS_INFORMATION *processInfo = reinterpret_cast<const PROCESS_INFORMATION*>(qpid);

View File

@@ -59,6 +59,9 @@ QTCREATOR_UTILS_EXPORT QString getShortPathName(const QString &name);
// Returns long name // Returns long name
QTCREATOR_UTILS_EXPORT QString getLongPathName(const QString &name); QTCREATOR_UTILS_EXPORT QString getLongPathName(const QString &name);
// Returns long name with canonical capitalization.
QTCREATOR_UTILS_EXPORT QString normalizePathName(const QString &name);
QTCREATOR_UTILS_EXPORT unsigned long winQPidToPid(const Q_PID qpid); QTCREATOR_UTILS_EXPORT unsigned long winQPidToPid(const Q_PID qpid);
QTCREATOR_UTILS_EXPORT bool winIs64BitSystem(); QTCREATOR_UTILS_EXPORT bool winIs64BitSystem();

View File

@@ -217,12 +217,6 @@ bool CommonOptionsPage::matches(const QString &s) const
// //
/////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////
static bool oxygenStyle()
{
const ManhattanStyle *ms = qobject_cast<const ManhattanStyle *>(qApp->style());
return ms && !qstrcmp("OxygenStyle", ms->baseStyle()->metaObject()->className());
}
QString DebuggingHelperOptionPage::id() const QString DebuggingHelperOptionPage::id() const
{ {
return _("Z.DebuggingHelper"); return _("Z.DebuggingHelper");
@@ -263,28 +257,16 @@ QWidget *DebuggingHelperOptionPage::createPage(QWidget *parent)
QWidget *w = new QWidget(parent); QWidget *w = new QWidget(parent);
m_ui.setupUi(w); m_ui.setupUi(w);
m_ui.dumperLocationChooser->setExpectedKind(Utils::PathChooser::Command);
m_ui.dumperLocationChooser->setPromptDialogTitle(QCoreApplication::translate
("Debugger", "Choose DebuggingHelper Location"));
m_ui.dumperLocationChooser->setInitialBrowsePathBackup(
ICore::instance()->resourcePath() + "../../lib");
m_group.clear(); m_group.clear();
DebuggerCore *dc = debuggerCore(); DebuggerCore *dc = debuggerCore();
m_group.insert(dc->action(UseDebuggingHelpers), m_group.insert(dc->action(UseDebuggingHelpers),
m_ui.debuggingHelperGroupBox); m_ui.debuggingHelperGroupBox);
m_group.insert(dc->action(UseCustomDebuggingHelperLocation),
m_ui.customLocationGroupBox);
// Suppress Oxygen style's giving flat group boxes bold titles.
if (oxygenStyle())
m_ui.customLocationGroupBox->setStyleSheet(_("QGroupBox::title { font: ; }"));
m_group.insert(dc->action(CustomDebuggingHelperLocation),
m_ui.dumperLocationChooser);
m_group.insert(dc->action(UseCodeModel), m_group.insert(dc->action(UseCodeModel),
m_ui.checkBoxUseCodeModel); m_ui.checkBoxUseCodeModel);
m_ui.checkBoxUseCodeModel->setToolTip(dc->action(UseCodeModel)->toolTip());
m_group.insert(dc->action(ShowThreadNames), m_group.insert(dc->action(ShowThreadNames),
m_ui.checkBoxShowThreadNames); m_ui.checkBoxShowThreadNames);
@@ -302,8 +284,6 @@ QWidget *DebuggingHelperOptionPage::createPage(QWidget *parent)
if (m_searchKeywords.isEmpty()) { if (m_searchKeywords.isEmpty()) {
QTextStream(&m_searchKeywords) QTextStream(&m_searchKeywords)
<< ' ' << m_ui.debuggingHelperGroupBox->title() << ' ' << m_ui.debuggingHelperGroupBox->title()
<< ' ' << m_ui.customLocationGroupBox->title()
<< ' ' << m_ui.dumperLocationLabel->text()
<< ' ' << m_ui.checkBoxUseCodeModel->text() << ' ' << m_ui.checkBoxUseCodeModel->text()
<< ' ' << m_ui.checkBoxShowThreadNames->text(); << ' ' << m_ui.checkBoxShowThreadNames->text();
m_searchKeywords.remove(QLatin1Char('&')); m_searchKeywords.remove(QLatin1Char('&'));

View File

@@ -265,20 +265,6 @@ DebuggerSettings::DebuggerSettings(QSettings *settings)
item->setValue(true); item->setValue(true);
insertItem(UseDebuggingHelpers, item); insertItem(UseDebuggingHelpers, item);
item = new SavedAction(this);
item->setSettingsKey(debugModeGroup, QLatin1String("UseCustomDebuggingHelperLocation"));
item->setCheckable(true);
item->setDefaultValue(false);
item->setValue(false);
insertItem(UseCustomDebuggingHelperLocation, item);
item = new SavedAction(this);
item->setSettingsKey(debugModeGroup, QLatin1String("CustomDebuggingHelperLocation"));
item->setCheckable(true);
item->setDefaultValue(QString());
item->setValue(QString());
insertItem(CustomDebuggingHelperLocation, item);
item = new SavedAction(this); item = new SavedAction(this);
item->setSettingsKey(debugModeGroup, QLatin1String("UseCodeModel")); item->setSettingsKey(debugModeGroup, QLatin1String("UseCodeModel"));
item->setText(tr("Use Code Model")); item->setText(tr("Use Code Model"));

View File

@@ -101,8 +101,6 @@ enum DebuggerActionCode
SwitchModeOnExit, SwitchModeOnExit,
UseDebuggingHelpers, UseDebuggingHelpers,
UseCustomDebuggingHelperLocation,
CustomDebuggingHelperLocation,
UseCodeModel, UseCodeModel,
ShowThreadNames, ShowThreadNames,

View File

@@ -633,13 +633,6 @@ bool DebuggerEngine::qtDumperLibraryEnabled() const
QStringList DebuggerEngine::qtDumperLibraryLocations() const QStringList DebuggerEngine::qtDumperLibraryLocations() const
{ {
if (debuggerCore()->action(UseCustomDebuggingHelperLocation)->value().toBool()) {
const QString customLocation =
debuggerCore()->action(CustomDebuggingHelperLocation)->value().toString();
const QString location =
tr("%1 (explicitly set in the Debugger Options)").arg(customLocation);
return QStringList(location);
}
return d->m_startParameters.dumperLibraryLocations; return d->m_startParameters.dumperLibraryLocations;
} }
@@ -650,8 +643,6 @@ void DebuggerEngine::showQtDumperLibraryWarning(const QString &details)
QString DebuggerEngine::qtDumperLibraryName() const QString DebuggerEngine::qtDumperLibraryName() const
{ {
if (debuggerCore()->action(UseCustomDebuggingHelperLocation)->value().toBool())
return debuggerCore()->action(CustomDebuggingHelperLocation)->value().toString();
return startParameters().dumperLibrary; return startParameters().dumperLibrary;
} }

View File

@@ -47,6 +47,7 @@
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
# include "peutils.h" # include "peutils.h"
# include <utils/winutils.h>
#endif #endif
#include <projectexplorer/abi.h> #include <projectexplorer/abi.h>
@@ -686,6 +687,12 @@ static DebuggerStartParameters localStartParameters(RunConfiguration *runConfigu
sp.startMode = StartInternal; sp.startMode = StartInternal;
sp.environment = rc->environment(); sp.environment = rc->environment();
sp.workingDirectory = rc->workingDirectory(); sp.workingDirectory = rc->workingDirectory();
#if defined(Q_OS_WIN)
// Work around QTBUG-17529 (QtDeclarative fails with 'File name case mismatch' ...)
sp.workingDirectory = Utils::normalizePathName(sp.workingDirectory);
#endif
sp.executable = rc->executable(); sp.executable = rc->executable();
sp.processArgs = rc->commandLineArguments(); sp.processArgs = rc->commandLineArguments();
sp.toolChainAbi = rc->abi(); sp.toolChainAbi = rc->abi();

View File

@@ -50,31 +50,6 @@
<bool>true</bool> <bool>true</bool>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QGroupBox" name="customLocationGroupBox">
<property name="title">
<string>Use debugging helper from custom location</string>
</property>
<property name="flat">
<bool>true</bool>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="dumperLocationLabel">
<property name="text">
<string>Location: </string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="Utils::PathChooser" name="dumperLocationChooser" native="true"/>
</item>
</layout>
</widget>
</item>
<item> <item>
<widget class="QCheckBox" name="checkBoxUseCodeModel"> <widget class="QCheckBox" name="checkBoxUseCodeModel">
<property name="toolTip"> <property name="toolTip">

View File

@@ -668,7 +668,7 @@ void QmlCppEngine::handleRemoteSetupFailed(const QString &message)
void QmlCppEngine::showMessage(const QString &msg, int channel, int timeout) const void QmlCppEngine::showMessage(const QString &msg, int channel, int timeout) const
{ {
if (channel == AppOutput || channel == AppError) { if (channel == AppOutput || channel == AppError || channel == AppStuff) {
// message is from CppEngine, allow qml engine to process // message is from CppEngine, allow qml engine to process
d->m_qmlEngine->filterApplicationMessage(msg, channel); d->m_qmlEngine->filterApplicationMessage(msg, channel);
} }

View File

@@ -1048,7 +1048,11 @@ QString QmlEngine::mangleFilenamePaths(const QString &filename,
QFileInfo fileInfo(filename); QFileInfo fileInfo(filename);
if (oldBaseDir.exists() && newBaseDir.exists() && fileInfo.exists()) { if (oldBaseDir.exists() && newBaseDir.exists() && fileInfo.exists()) {
if (fileInfo.absoluteFilePath().startsWith(oldBaseDir.canonicalPath())) { Qt::CaseSensitivity caseSensitive = Qt::CaseSensitive;
#ifdef Q_OS_WIN
caseSensitive = Qt::CaseInsensitive;
#endif
if (fileInfo.absoluteFilePath().startsWith(oldBaseDir.canonicalPath(), caseSensitive)) {
QString fileRelativePath = fileInfo.canonicalFilePath().mid(oldBaseDir.canonicalPath().length()); QString fileRelativePath = fileInfo.canonicalFilePath().mid(oldBaseDir.canonicalPath().length());
QFileInfo projectFile(newBaseDir.canonicalPath() + QLatin1Char('/') + fileRelativePath); QFileInfo projectFile(newBaseDir.canonicalPath() + QLatin1Char('/') + fileRelativePath);

View File

@@ -71,10 +71,7 @@ ApplicationLauncher::~ApplicationLauncher()
void ApplicationLauncher::setWorkingDirectory(const QString &dir) void ApplicationLauncher::setWorkingDirectory(const QString &dir)
{ {
// Work around QTBUG-17529 (QtDeclarative fails with 'File name case mismatch' ...) // Work around QTBUG-17529 (QtDeclarative fails with 'File name case mismatch' ...)
QString fixedPath = dir; const QString fixedPath = Utils::normalizePathName(dir);
const QString longPath = Utils::getLongPathName(dir);
if (!longPath.isEmpty())
fixedPath = longPath;
d->m_winGuiProcess.setWorkingDirectory(fixedPath); d->m_winGuiProcess.setWorkingDirectory(fixedPath);
d->m_consoleProcess.setWorkingDirectory(fixedPath); d->m_consoleProcess.setWorkingDirectory(fixedPath);

View File

@@ -505,8 +505,6 @@ bool Target::fromMap(const QVariantMap &map)
if (i == activeConfiguration) if (i == activeConfiguration)
setActiveDeployConfiguration(dc); setActiveDeployConfiguration(dc);
} }
if (deployConfigurations().isEmpty() && d->deployFactories().isEmpty())
return false;
int rcCount = map.value(QLatin1String(RC_COUNT_KEY), 0).toInt(&ok); int rcCount = map.value(QLatin1String(RC_COUNT_KEY), 0).toInt(&ok);
if (!ok || rcCount < 0) if (!ok || rcCount < 0)

View File

@@ -865,6 +865,11 @@ InformationChangedCommand NodeInstanceServer::createAllInformationChangedCommand
return InformationChangedCommand(informationVector); return InformationChangedCommand(informationVector);
} }
static bool supportedVariantType(QVariant::Type type)
{
return type < QVariant::UserType && type != QVariant::Icon;
}
ValuesChangedCommand NodeInstanceServer::createValuesChangedCommand(const QList<ServerNodeInstance> &instanceList) const ValuesChangedCommand NodeInstanceServer::createValuesChangedCommand(const QList<ServerNodeInstance> &instanceList) const
{ {
QVector<PropertyValueContainer> valueVector; QVector<PropertyValueContainer> valueVector;
@@ -872,7 +877,7 @@ ValuesChangedCommand NodeInstanceServer::createValuesChangedCommand(const QList<
foreach(const ServerNodeInstance &instance, instanceList) { foreach(const ServerNodeInstance &instance, instanceList) {
foreach(const QString &propertyName, instance.propertyNames()) { foreach(const QString &propertyName, instance.propertyNames()) {
QVariant propertyValue = instance.property(propertyName); QVariant propertyValue = instance.property(propertyName);
if (propertyValue.type() < QVariant::UserType) if (supportedVariantType(propertyValue.type()))
valueVector.append(PropertyValueContainer(instance.instanceId(), propertyName, propertyValue, QString())); valueVector.append(PropertyValueContainer(instance.instanceId(), propertyName, propertyValue, QString()));
} }
} }
@@ -901,7 +906,7 @@ ValuesChangedCommand NodeInstanceServer::createValuesChangedCommand(const QVecto
if( instance.isValid()) { if( instance.isValid()) {
QVariant propertyValue = instance.property(propertyName); QVariant propertyValue = instance.property(propertyName);
if (propertyValue.type() < QVariant::UserType) if (supportedVariantType(propertyValue.type()))
valueVector.append(PropertyValueContainer(instance.instanceId(), propertyName, propertyValue, QString())); valueVector.append(PropertyValueContainer(instance.instanceId(), propertyName, propertyValue, QString()));
} }
} }

View File

@@ -45,7 +45,7 @@
#include <qt4projectmanager/qtoutputformatter.h> #include <qt4projectmanager/qtoutputformatter.h>
#include <qt4projectmanager/qt4projectmanagerconstants.h> #include <qt4projectmanager/qt4projectmanagerconstants.h>
#ifdef Q_OS_WIN32 #ifdef Q_OS_WIN
#include <utils/winutils.h> #include <utils/winutils.h>
#endif #endif
@@ -180,20 +180,13 @@ void QmlProjectRunConfiguration::setQtVersionId(int id)
} }
/* QtDeclarative checks explicitly that the capitalization for any URL / path /* QtDeclarative checks explicitly that the capitalization for any URL / path
is exactly like the capitalization on disk. This method is uses the same is exactly like the capitalization on disk.*/
native Windows API's to get the exact canonical path. */
QString QmlProjectRunConfiguration::canonicalCapsPath(const QString &fileName) QString QmlProjectRunConfiguration::canonicalCapsPath(const QString &fileName)
{ {
QString canonicalPath = QFileInfo(fileName).canonicalFilePath(); QString canonicalPath = QFileInfo(fileName).canonicalFilePath();
#if defined(Q_OS_WIN32) #if defined(Q_OS_WIN)
// don't know whether the shortpath step is really needed, canonicalPath = Utils::normalizePathName(canonicalPath);
// but we do this in QtDeclarative too.
QString path = Utils::getShortPathName(canonicalPath);
if (!path.isEmpty())
path = Utils::getLongPathName(canonicalPath);
if (!path.isEmpty())
canonicalPath = path;
#endif #endif
return canonicalPath; return canonicalPath;

View File

@@ -620,7 +620,7 @@ void QMakeStepConfigWidget::updateQmlDebuggingWarningsLabel()
if (m_step->linkQmlDebuggingLibrary()) { if (m_step->linkQmlDebuggingLibrary()) {
if (m_step->isQmlDebuggingLibrarySupported()) { if (m_step->isQmlDebuggingLibrarySupported()) {
m_ui.qmlDebuggingWarningText->setText("Might make your application vulnerable. Only use in a safe environment!"); m_ui.qmlDebuggingWarningText->setText(tr("Might make the application vulnerable. Use only in a safe environment."));
} }
} }

View File

@@ -196,7 +196,7 @@ public:
virtual bool allowsRemoteMounts() const { return false; } virtual bool allowsRemoteMounts() const { return false; }
virtual bool allowsPackagingDisabling() const { return false; } virtual bool allowsPackagingDisabling() const { return false; }
virtual bool allowsQmlDebugging() const { return true; } virtual bool allowsQmlDebugging() const { return false; }
virtual QString projectVersion(QString *error = 0) const; virtual QString projectVersion(QString *error = 0) const;
virtual QString packageName() const; virtual QString packageName() const;
@@ -258,7 +258,7 @@ public:
virtual bool allowsRemoteMounts() const { return false; } virtual bool allowsRemoteMounts() const { return false; }
virtual bool allowsPackagingDisabling() const { return false; } virtual bool allowsPackagingDisabling() const { return false; }
virtual bool allowsQmlDebugging() const { return true; } virtual bool allowsQmlDebugging() const { return false; }
static QString defaultDisplayName(); static QString defaultDisplayName();

View File

@@ -4276,6 +4276,7 @@ void BaseTextEditorWidget::extraAreaMouseEvent(QMouseEvent *e)
if (!contextMenu->isEmpty()) if (!contextMenu->isEmpty())
contextMenu->exec(e->globalPos()); contextMenu->exec(e->globalPos());
delete contextMenu; delete contextMenu;
e->accept();
} }
} else if (d->extraAreaSelectionAnchorBlockNumber >= 0) { } else if (d->extraAreaSelectionAnchorBlockNumber >= 0) {
QTextCursor selection = cursor; QTextCursor selection = cursor;