[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdebindings/csharp/qyoto
From:       Arno Rehn <kde () arnorehn ! de>
Date:       2008-12-09 18:55:49
Message-ID: 1228848949.355904.18018.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 894989 by arnorehn:

* Watch out for itemChange() calls and if necessary, add or remove global refs
  to QGraphicsItems and subclasses. Thanks to Eric Butler for reporting the bug.

CCMAIL: kde-bindings@kde.org



 M  +5 -0      ChangeLog  
 M  +26 -0     src/qyotosmokebinding.cpp  


--- trunk/KDE/kdebindings/csharp/qyoto/ChangeLog #894988:894989
@@ -1,3 +1,8 @@
+2008-12-09  Arno Rehn  <arno@arnorehn.de>
+
+	* Watch out for itemChange() calls and if necessary, add or remove global refs
+	  to QGraphicsItems and subclasses. Thanks to Eric Butler for reporting the bug.
+
 2008-11-30  Arno Rehn  <arno@arnorehn.de>
 
 	* Check for return values being null and if so, don't alloc a GCHandle to it.
--- trunk/KDE/kdebindings/csharp/qyoto/src/qyotosmokebinding.cpp #894988:894989
@@ -20,6 +20,14 @@
 
 #include <cstdlib>
 
+#include <qt_smoke.h>
+
+#if QT_VERSION >= 0x40200
+	#include <QVariant>
+	#include <QGraphicsScene>
+	#include <QGraphicsItem>
+#endif
+
 namespace Qyoto {
 
 Binding::Binding() : SmokeBinding(0) {}
@@ -92,6 +100,11 @@
 		fflush(stdout);
 	}
 
+#if QT_VERSION >= 0x40200
+	static Smoke::Index qgraphicsitem_class = qt_Smoke->idClass("QGraphicsItem").index;
+#endif
+
+	smokeqyoto_object *sqo = (smokeqyoto_object*) (*GetSmokeObject)(obj);
 	if (strcmp(signature, "qt_metacall(QMetaObject::Call, int, void**)") == 0) {
 		QMetaObject::Call _c = (QMetaObject::Call)args[1].s_int;
 		int _id = args[2].s_int;
@@ -101,6 +114,19 @@
 
 		(*FreeGCHandle)(obj);
 		return true;
+#if QT_VERSION >= 0x40200
+	} else if (strcmp(signature, "itemChange(QGraphicsItem::GraphicsItemChange, const QVariant&)") == 0
+	           && smoke->isDerivedFrom(smoke, sqo->classId, qt_Smoke, qgraphicsitem_class)) {
+		int change = args[1].s_int;
+		if (change == QGraphicsItem::ItemSceneChange) {
+			QGraphicsScene *scene = ((QVariant*) args[2].s_voidp)->value<QGraphicsScene*>();
+			if (scene) {
+				(*AddGlobalRef)(obj, ptr);
+			} else {
+				(*RemoveGlobalRef)(obj, ptr);
+			}
+		}
+#endif
 	}
 	void * overridenMethod = (*OverridenMethod)(obj, (const char *) signature);
 	if (overridenMethod == 0) {
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic