X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fdeclarative%2Fqml%2Fqdeclarativenotifier.cpp;h=100a42d0296db4f6cc71c81435d685cb28574648;hb=45b14259fc0cf704692df1c00da511527d1fba1d;hp=2cad118d173a8bf346967290b6385f8e75326209;hpb=885735d011472bcfbb96e688d9e64553d7fe9d4b;p=profile%2Fivi%2Fqtdeclarative.git diff --git a/src/declarative/qml/qdeclarativenotifier.cpp b/src/declarative/qml/qdeclarativenotifier.cpp index 2cad118..100a42d 100644 --- a/src/declarative/qml/qdeclarativenotifier.cpp +++ b/src/declarative/qml/qdeclarativenotifier.cpp @@ -1,34 +1,34 @@ /**************************************************************************** ** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ ** ** This file is part of the QtDeclarative module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. ** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. ** ** ** @@ -39,88 +39,77 @@ ** ****************************************************************************/ -#include "private/qdeclarativenotifier_p.h" -#include "private/qdeclarativeproperty_p.h" +#include "qdeclarativenotifier_p.h" +#include "qdeclarativeproperty_p.h" QT_BEGIN_NAMESPACE void QDeclarativeNotifier::emitNotify(QDeclarativeNotifierEndpoint *endpoint) { - QDeclarativeNotifierEndpoint::Notifier *n = endpoint->asNotifier(); - - QDeclarativeNotifierEndpoint **oldDisconnected = n->disconnected; - n->disconnected = &endpoint; + QDeclarativeNotifierEndpoint **oldDisconnected = endpoint->disconnected; + endpoint->disconnected = &endpoint; + endpoint->notifying = 1; - if (n->next) - emitNotify(n->next); + if (endpoint->next) + emitNotify(endpoint->next); if (endpoint) { - void *args[] = { 0 }; - QMetaObject::metacall(endpoint->target, QMetaObject::InvokeMetaMethod, - endpoint->targetMethod, args); + Q_ASSERT(endpoint->callback); + + endpoint->callback(endpoint); - if (endpoint) - endpoint->asNotifier()->disconnected = oldDisconnected; + if (endpoint) + endpoint->disconnected = oldDisconnected; } if (oldDisconnected) *oldDisconnected = endpoint; + else if (endpoint) endpoint->notifying = 0; } void QDeclarativeNotifierEndpoint::connect(QObject *source, int sourceSignal) { - Signal *s = toSignal(); - - if (s->source == source && s->sourceSignal == sourceSignal) - return; - disconnect(); - QDeclarativePropertyPrivate::connect(source, sourceSignal, target, targetMethod); - - s->source = source; - s->sourceSignal = sourceSignal; + this->source = source; + this->sourceSignal = sourceSignal; + QDeclarativePropertyPrivate::flushSignal(source, sourceSignal); + QDeclarativeData *ddata = QDeclarativeData::get(source, true); + ddata->addNotify(sourceSignal, this); } void QDeclarativeNotifierEndpoint::copyAndClear(QDeclarativeNotifierEndpoint &other) { + if (&other == this) + return; + other.disconnect(); - other.target = target; - other.targetMethod = targetMethod; + other.callback = callback; if (!isConnected()) return; - if (SignalType == type) { - Signal *other_s = other.toSignal(); - Signal *s = asSignal(); - - other_s->source = s->source; - other_s->sourceSignal = s->sourceSignal; - s->source = 0; - } else if(NotifierType == type) { - Notifier *other_n = other.toNotifier(); - Notifier *n = asNotifier(); - - other_n->notifier = n->notifier; - other_n->disconnected = n->disconnected; - if (other_n->disconnected) *other_n->disconnected = &other; - - if (n->next) { - other_n->next = n->next; - n->next->asNotifier()->prev = &other_n->next; - } - other_n->prev = n->prev; - *other_n->prev = &other; - - n->prev = 0; - n->next = 0; - n->disconnected = 0; - n->notifier = 0; - } + other.notifier = notifier; + other.sourceSignal = sourceSignal; + other.disconnected = disconnected; + other.notifying = notifying; + if (other.disconnected) *other.disconnected = &other; + + if (next) { + other.next = next; + next->prev = &other.next; + } + other.prev = prev; + *other.prev = &other; + + prev = 0; + next = 0; + disconnected = 0; + notifier = 0; + notifying = 0; + sourceSignal = -1; } - QT_END_NAMESPACE