diff options
author | Morten Engvoldsen <morten.engvoldsen@nokia.com> | 2010-09-02 12:24:46 (GMT) |
---|---|---|
committer | Morten Engvoldsen <morten.engvoldsen@nokia.com> | 2010-09-02 12:24:46 (GMT) |
commit | 54796e0d3150df7dd94e715c095c21fb227139ee (patch) | |
tree | 28fbc8e03ebe3ad836b7c6ca243213da269f60ac | |
parent | ad229913fd89aa0a33fb9b37ac96ff63c89a05f8 (diff) | |
parent | 9ec7bbcb96149b1ce8a2d62b55c824d71ff292a8 (diff) | |
download | Qt-54796e0d3150df7dd94e715c095c21fb227139ee.zip Qt-54796e0d3150df7dd94e715c095c21fb227139ee.tar.gz Qt-54796e0d3150df7dd94e715c095c21fb227139ee.tar.bz2 |
Merge branch '4.7' of git@scm.dev.nokia.troll.no:qt/qt-doc-team into doc-4.7
24 files changed, 103 insertions, 42 deletions
diff --git a/doc/src/development/qtestlib.qdoc b/doc/src/development/qtestlib.qdoc index 50622cd..a83c27e 100644 --- a/doc/src/development/qtestlib.qdoc +++ b/doc/src/development/qtestlib.qdoc @@ -88,10 +88,6 @@ \o Custom types can easily be added to the test data and test output. \endtable - Note: For higher-level GUI and application testing needs, please - see the \l{Third-Party Tools}{Qt testing products provided by - Nokia partners}. - \section1 QTestLib API diff --git a/doc/src/snippets/code/src_corelib_kernel_qvariant.cpp b/doc/src/snippets/code/src_corelib_kernel_qvariant.cpp index fd3f5d2..472c90e 100644 --- a/doc/src/snippets/code/src_corelib_kernel_qvariant.cpp +++ b/doc/src/snippets/code/src_corelib_kernel_qvariant.cpp @@ -101,7 +101,7 @@ QVariant v; MyCustomStruct c; if (v.canConvert<MyCustomStruct>()) - c = v.value<MyCustomStruct>(v); + c = v.value<MyCustomStruct>(); v = 7; int i = v.value<int>(); // same as v.toInt() diff --git a/doc/src/snippets/declarative/text/onLinkActivated.qml b/doc/src/snippets/declarative/text/onLinkActivated.qml new file mode 100644 index 0000000..0fb236a --- /dev/null +++ b/doc/src/snippets/declarative/text/onLinkActivated.qml @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +import Qt 4.7 + +Rectangle { + width: 700; height: 400 + +//![0] + Text { + textFormat: Text.RichText + text: "The main website is at <a href=\"http://qt.nokia.com\">Nokia Qt DF</a>." + onLinkActivated: console.log(link + " link activated") + } +//![0] + +} + diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp index 120d971..3984420 100644 --- a/src/corelib/tools/qstring.cpp +++ b/src/corelib/tools/qstring.cpp @@ -3953,8 +3953,8 @@ QString QString::fromUtf8(const char *str, int size) This function checks for a Byte Order Mark (BOM). If it is missing, host byte order is assumed. - This function is comparatively slow. - Use QString(const ushort *, int) or QString(const ushort *) if possible. + This function is slow compared to the other Unicode conversions. + Use QString(const QChar *, int) or QString(const QChar *) if possible. QString makes a deep copy of the Unicode data. diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index aca2bb7..228dd57 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -2484,7 +2484,7 @@ QDeclarativeListProperty<QDeclarativeTransition> QDeclarativeItemPrivate::transi /*! \qmlproperty bool Item::clip - This property holds whether clipping is enabled. + This property holds whether clipping is enabled. The default clip value is \c false. If clipping is enabled, an item will clip its own painting, as well as the painting of its children, to its bounding rectangle. @@ -2494,9 +2494,9 @@ QDeclarativeListProperty<QDeclarativeTransition> QDeclarativeItemPrivate::transi /*! \property QDeclarativeItem::clip - This property holds whether clipping is enabled. + This property holds whether clipping is enabled. The default clip value is \c false. - if clipping is enabled, an item will clip its own painting, as well + If clipping is enabled, an item will clip its own painting, as well as the painting of its children, to its bounding rectangle. If you set clipping during an item's paint operation, remember to re-set it to prevent clipping the rest of your scene. diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp index f16af88..83098ae 100644 --- a/src/declarative/graphicsitems/qdeclarativetext.cpp +++ b/src/declarative/graphicsitems/qdeclarativetext.cpp @@ -1208,6 +1208,16 @@ void QDeclarativeText::mousePressEvent(QGraphicsSceneMouseEvent *event) \qmlsignal Text::onLinkActivated(link) This handler is called when the user clicks on a link embedded in the text. + The link must be in rich text or HTML format and the + \a link string provides access to the particular link. + + \snippet doc/src/snippets/declarative/text/onLinkActivated.qml 0 + + The example code will display the text + "The main website is at \l{http://qt.nokia.com}{Nokia Qt DF}." + + Clicking on the highlighted link will output + \tt{http://qt.nokia.com link activated} to the console. */ /*! diff --git a/src/gui/egl/qeglproperties.cpp b/src/gui/egl/qeglproperties.cpp index 3638de5..65b4d85 100644 --- a/src/gui/egl/qeglproperties.cpp +++ b/src/gui/egl/qeglproperties.cpp @@ -258,7 +258,7 @@ bool QEglProperties::reduceConfiguration() // those with smaller (but faster) lower color depths. One // way around this is to set EGL_BUFFER_SIZE to 16, which // trumps the others. Of course, there may not be a 16-bit - // config avaliable, so it's the first restraint we remove. + // config available, so it's the first restraint we remove. if (value(EGL_BUFFER_SIZE) == 16) { removeValue(EGL_BUFFER_SIZE); return true; diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp index 539685a..89c9e4d 100644 --- a/src/gui/graphicsview/qgraphicsscene.cpp +++ b/src/gui/graphicsview/qgraphicsscene.cpp @@ -6137,7 +6137,7 @@ void QGraphicsScenePrivate::gestureEventHandler(QGestureEvent *event) << g << item.data(); } // remember the first item that received the override event - // as it most likely become a target if noone else accepts + // as it most likely become a target if no one else accepts // the override event if (!gestureTargets.contains(g) && item) gestureTargets.insert(g, item.data()); diff --git a/src/gui/image/qiconloader.cpp b/src/gui/image/qiconloader.cpp index 34f40a9..0ae54fc 100644 --- a/src/gui/image/qiconloader.cpp +++ b/src/gui/image/qiconloader.cpp @@ -151,7 +151,7 @@ QStringList QIconLoader::themeSearchPaths() const { if (m_iconDirs.isEmpty()) { m_iconDirs = qt_guiPlatformPlugin()->iconThemeSearchPaths(); - // Allways add resource directory as search path + // Always add resource directory as search path m_iconDirs.append(QLatin1String(":/icons")); } return m_iconDirs; @@ -266,7 +266,7 @@ QThemeIconEntries QIconLoader::findIconHelper(const QString &themeName, PixmapEntry *iconEntry = new PixmapEntry; iconEntry->dir = dirInfo; iconEntry->filename = currentDir.filePath(iconName + pngext); - // Notice we ensure that pixmap entries allways come before + // Notice we ensure that pixmap entries always come before // scalable to preserve search order afterwards entries.prepend(iconEntry); } else if (m_supportsSvg && diff --git a/src/gui/kernel/qgesturemanager.cpp b/src/gui/kernel/qgesturemanager.cpp index cb4061e..570d7a5 100644 --- a/src/gui/kernel/qgesturemanager.cpp +++ b/src/gui/kernel/qgesturemanager.cpp @@ -184,7 +184,7 @@ void QGestureManager::cleanupCachedGestures(QObject *target, Qt::GestureType typ QGesture *QGestureManager::getState(QObject *object, QGestureRecognizer *recognizer, Qt::GestureType type) { // if the widget is being deleted we should be carefull and not to - // create a new state, as it will create QWeakPointer which doesnt work + // create a new state, as it will create QWeakPointer which doesn't work // from the destructor. if (object->isWidgetType()) { if (static_cast<QWidget *>(object)->d_func()->data.in_destructor) diff --git a/src/gui/kernel/qkeysequence.cpp b/src/gui/kernel/qkeysequence.cpp index c2f275a..50b2354 100644 --- a/src/gui/kernel/qkeysequence.cpp +++ b/src/gui/kernel/qkeysequence.cpp @@ -590,7 +590,7 @@ static const struct { //: Button that will hang up if we're in call, or make a call if we're not. { Qt::Key_ToggleCallHangup, QT_TRANSLATE_NOOP("QShortcut", "Toggle Call/Hangup") }, { Qt::Key_Flip, QT_TRANSLATE_NOOP("QShortcut", "Flip") }, - //: Button to trigger voice dialling + //: Button to trigger voice dialing { Qt::Key_VoiceDial, QT_TRANSLATE_NOOP("QShortcut", "Voice Dial") }, //: Button to redial the last number called { Qt::Key_LastNumberRedial, QT_TRANSLATE_NOOP("QShortcut", "Last Number Redial") }, diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index ea3dcab..dc0dbf4 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -1194,7 +1194,7 @@ void QWidgetPrivate::adjustFlags(Qt::WindowFlags &flags, QWidget *w) flags |= Qt::WindowTitleHint; } if (customize) - ; // don't modify window flags if the user explicitely set them. + ; // don't modify window flags if the user explicitly set them. else if (type == Qt::Dialog || type == Qt::Sheet) #ifndef Q_WS_WINCE flags |= Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowContextHelpButtonHint | Qt::WindowCloseButtonHint; @@ -7500,7 +7500,7 @@ void QWidgetPrivate::hide_helper() A hidden widget will only become visible when show() is called on it. It will not be automatically shown when the parent is shown. - To check visiblity, use !isVisible() instead (notice the exclamation mark). + To check visibility, use !isVisible() instead (notice the exclamation mark). isHidden() implies !isVisible(), but a widget can be not visible and not hidden at the same time. This is the case for widgets that are children of @@ -11099,7 +11099,7 @@ void QWidget::updateMicroFocus() { #if !defined(QT_NO_IM) && (defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN)) Q_D(QWidget); - // and optimisation to update input context only it has already been created. + // and optimization to update input context only it has already been created. if (d->ic || qApp->d_func()->inputContext) { QInputContext *ic = inputContext(); if (ic) @@ -11844,8 +11844,8 @@ QWidget *QWidgetPrivate::widgetInNavigationDirection(Direction direction) Tells us if it there is currently a reachable widget by keypad navigation in a certain \a orientation. - If no navigation is possible, occuring key events in that \a orientation may - be used to interact with the value in the focussed widget, even though it + If no navigation is possible, occurring key events in that \a orientation may + be used to interact with the value in the focused widget, even though it currently has not the editFocus. \sa QWidgetPrivate::widgetInNavigationDirection(), QWidget::hasEditFocus() @@ -11865,7 +11865,7 @@ bool QWidgetPrivate::canKeypadNavigate(Qt::Orientation orientation) one, left/right key events will be used to switch between tabs in keypad navigation. If there is no QTabWidget, the horizontal key events can be used to - interact with the value in the focussed widget, even though it currently has + interact with the value in the focused widget, even though it currently has not the editFocus. \sa QWidget::hasEditFocus() diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index ee590a4..b7eaf85 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -8797,7 +8797,7 @@ QPainterPath QPaintEngineState::clipPath() const } /*! - Returns wether clipping is enabled or not in the current paint + Returns whether clipping is enabled or not in the current paint engine state. This variable should only be used when the state() returns a diff --git a/src/gui/painting/qregion.cpp b/src/gui/painting/qregion.cpp index bfeef72..3412f9b 100644 --- a/src/gui/painting/qregion.cpp +++ b/src/gui/painting/qregion.cpp @@ -1699,8 +1699,8 @@ QT_BEGIN_INCLUDE_NAMESPACE #include <limits.h> QT_END_INCLUDE_NAMESPACE -/* 1 if two BOXs overlap. - * 0 if two BOXs do not overlap. +/* 1 if two BOXes overlap. + * 0 if two BOXes do not overlap. * Remember, x2 and y2 are not in the region */ #define EXTENTCHECK(r1, r2) \ diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp index 3f758b1..2c23cbd 100644 --- a/src/gui/text/qfontengine.cpp +++ b/src/gui/text/qfontengine.cpp @@ -721,7 +721,7 @@ void QFontEngine::setGlyphCache(void *key, QFontEngineGlyphCache *data) return; // Limit the glyph caches to 4. This covers all 90 degree rotations and limits - // memory use when there is continous or random rotation + // memory use when there is continuous or random rotation if (m_glyphCaches.size() == 4) delete m_glyphCaches.takeLast().cache; diff --git a/src/gui/text/qtextobject.cpp b/src/gui/text/qtextobject.cpp index d25fb05..ea2ef2d 100644 --- a/src/gui/text/qtextobject.cpp +++ b/src/gui/text/qtextobject.cpp @@ -616,6 +616,7 @@ void QTextFramePrivate::remove_me() /*! Returns an iterator pointing to the first document element inside the frame. + Please see the document \l{STL-style-Iterators} for more information. \sa end() */ @@ -628,8 +629,8 @@ QTextFrame::iterator QTextFrame::begin() const } /*! - Returns an iterator pointing to the last document element inside the frame. - + Returns an iterator pointing to the position past the last document element inside the frame. + Please see the document \l{STL-Style Iterators} for more information. \sa begin() */ QTextFrame::iterator QTextFrame::end() const diff --git a/src/gui/widgets/qlinecontrol.cpp b/src/gui/widgets/qlinecontrol.cpp index 7f0c6c8..a32c257 100644 --- a/src/gui/widgets/qlinecontrol.cpp +++ b/src/gui/widgets/qlinecontrol.cpp @@ -538,7 +538,7 @@ void QLineControl::draw(QPainter *painter, const QPoint &offset, const QRect &cl \internal Sets the selection to cover the word at the given cursor position. - The word boundries is defined by the behavior of QTextLayout::SkipWords + The word boundaries are defined by the behavior of QTextLayout::SkipWords cursor mode. */ void QLineControl::selectWordAtPos(int cursor) @@ -1213,7 +1213,7 @@ void QLineControl::internalRedo() /*! \internal - If the current cursor position differs from the last emited cursor + If the current cursor position differs from the last emitted cursor position, emits cursorPositionChanged(). */ void QLineControl::emitCursorPositionChanged() diff --git a/src/multimedia/video/qabstractvideobuffer.cpp b/src/multimedia/video/qabstractvideobuffer.cpp index db05ee5..978636a 100644 --- a/src/multimedia/video/qabstractvideobuffer.cpp +++ b/src/multimedia/video/qabstractvideobuffer.cpp @@ -87,7 +87,7 @@ QT_BEGIN_NAMESPACE \value NotMapped The video buffer has is not mapped to memory. \value ReadOnly The mapped memory is populated with data from the video buffer when mapped, but the content of the mapped memory may be discarded when unmapped. - \value WriteOnly The mapped memory in unitialized when mapped, and the content will be used to + \value WriteOnly The mapped memory is uninitialized when mapped, and the content will be used to populate the video buffer when unmapped. \value ReadWrite The mapped memory is populated with data from the video buffer, and the video buffer is repopulated with the content of the mapped memory. diff --git a/src/script/api/qscriptcontext.cpp b/src/script/api/qscriptcontext.cpp index abaf5f9..64610c7 100644 --- a/src/script/api/qscriptcontext.cpp +++ b/src/script/api/qscriptcontext.cpp @@ -480,7 +480,7 @@ QScriptValue QScriptContext::activationObject() const If \a activation is not an object, this function does nothing. \note For a context corresponding to a JavaScript function, this is only - guarenteed to work if there was an QScriptEngineAgent active on the + guaranteed to work if there was an QScriptEngineAgent active on the engine while the function was evaluated. */ void QScriptContext::setActivationObject(const QScriptValue &activation) diff --git a/src/testlib/qbenchmark.cpp b/src/testlib/qbenchmark.cpp index c88ecb0..c92a88a 100644 --- a/src/testlib/qbenchmark.cpp +++ b/src/testlib/qbenchmark.cpp @@ -165,7 +165,7 @@ void QBenchmarkTestMethodData::setResult( } // Test the result directly without calling the measurer if the minimum time - // has been specifed on the command line with -minimumvalue. + // has been specified on the command line with -minimumvalue. else if (QBenchmarkGlobalData::current->walltimeMinimum != -1) accepted = (value > QBenchmarkGlobalData::current->walltimeMinimum); else diff --git a/tools/porting/src/rpp.cpp b/tools/porting/src/rpp.cpp index 7b0bea1..2e2aa97 100644 --- a/tools/porting/src/rpp.cpp +++ b/tools/porting/src/rpp.cpp @@ -60,7 +60,7 @@ Source *Preprocessor::parse(const TokenEngine::TokenContainer &tokenContainer, const QVector<Type> &tokenTypeList, TypedPool<Item> *memoryPool) { m_memoryPool = memoryPool; - Source *m_source = createNode<Source>(m_memoryPool); //node whith no parent + Source *m_source = createNode<Source>(m_memoryPool); //node with no parent m_tokenContainer = tokenContainer; m_tokenTypeList = tokenTypeList; lexerTokenIndex = 0; @@ -538,7 +538,7 @@ bool Preprocessor::parsePragmaDirective(Item *group) } /* Reads a preprocessor line from the source by advancing lexerTokenIndex and - returing a TokenSection containg the read line. Text lines separated by + returning a TokenSection containing the read line. Text lines separated by an escaped newline are joined. */ TokenSection Preprocessor::readLine() diff --git a/tools/porting/src/semantic.cpp b/tools/porting/src/semantic.cpp index cf0b141..bd9175f 100644 --- a/tools/porting/src/semantic.cpp +++ b/tools/porting/src/semantic.cpp @@ -806,10 +806,10 @@ void Semantic::parseNameUse(NameAST* name) } /* - looks up name used in basescope. If name->isGlobal() is true or if classOrNamespaceList() + Looks up name used in basescope. If name->isGlobal() is true or if classOrNamespaceList() returns a non-empty list, the C++ qualified name lookup rules are used. Otherwise the unquialified name lookup rules are used. Returns the a list of members that was found, - In most cases this list will contain zero or one element, exept in the case of overloaded functions. + In most cases this list will contain zero or one element, except in the case of overloaded functions. TODO: Argument-dependent name lookup */ QList<CodeModel::Member *> Semantic::nameLookup(CodeModel::Scope *baseScope, const NameAST* name) diff --git a/tools/porting/src/tokenengine.h b/tools/porting/src/tokenengine.h index d998411..db68d88 100644 --- a/tools/porting/src/tokenengine.h +++ b/tools/porting/src/tokenengine.h @@ -55,7 +55,7 @@ namespace TokenEngine { class TokenContainer; /* - A token is defined as a start-postion and a lenght. Since the actual text + A token is defined as a start-position and a length. Since the actual text storage is not reffered to here, Token needs to be used together with a TokenContainer in order to be useful. */ diff --git a/tools/porting/src/tokenreplacements.cpp b/tools/porting/src/tokenreplacements.cpp index 02b7751..fa3cff8 100644 --- a/tools/porting/src/tokenreplacements.cpp +++ b/tools/porting/src/tokenreplacements.cpp @@ -126,7 +126,7 @@ int QualifiedNameParser::findScopeOperator(Direction direction) { int tokenIndex = currentIndex; QByteArray tokenText; - //loop until we get a token containg text or we pass the beginning/end of the source + //loop until we get a token containing text or we pass the beginning/end of the source tokenIndex += direction; while(tokenText.isEmpty() && isValidIndex(tokenIndex)) { tokenText = tokenContainer.text(tokenIndex).trimmed(); @@ -146,7 +146,7 @@ int QualifiedNameParser::nextScopeToken(Direction direction) if (tokenIndex == -1) return -1; QByteArray tokenText; - //loop until we get a token containg text or we pass the start of the source + //loop until we get a token containing text or we pass the start of the source tokenIndex += direction; while(tokenText.isEmpty() && isValidIndex(tokenIndex)) { tokenText = tokenContainer.text(tokenIndex).trimmed(); @@ -266,7 +266,7 @@ bool ScopedTokenReplacement::doReplace(const TokenContainer &tokenContainer, int if (!attributes->attribute(sourceIndex, "unknown").isEmpty()) return false; // If nameUse is set we test if the nameUse refers to the correct declaration. - // This is done by checking the parentScope attriute, wich returns the scope + // This is done by checking the parentScope attribute, which returns the scope // for the declaration associated with this name use. const bool haveNameUseInfo = !attributes->attribute(sourceIndex, "nameUse").isEmpty(); if (haveNameUseInfo) { @@ -314,7 +314,7 @@ bool ScopedTokenReplacement::doReplace(const TokenContainer &tokenContainer, int const QByteArray sourceScope = tokenContainer.text(sourceScopeIndex); // If we have no name use info and the source and old scopes don't match, - // we generally dont't do a replace, unless the old scope is Qt and + // we generally don't do a replace, unless the old scope is Qt and // the source scope inherits Qt. For example, QWidget::ButtonState should // be renamed to Qt::ButtonState. if (!haveNameUseInfo && sourceScope != oldScope) { |