Transfer ownerhip only for smoke classes.
Wed Jun 10 14:14:34 CEST 2009 Tobias Rautenkranz <tobias@rautenkranz.ch>
* Transfer ownerhip only for smoke classes.
diff -rN -u old-qt.gui/src/application.lisp new-qt.gui/src/application.lisp
--- old-qt.gui/src/application.lisp 2014-10-05 15:05:24.000000000 +0200
+++ new-qt.gui/src/application.lisp 2014-10-05 15:05:24.000000000 +0200
@@ -50,8 +50,8 @@
(foreign-free argv)
(foreign-free argc)
- (setf argv (foreign-alloc :string :initial-contents args))
(setf argc (foreign-alloc :int :initial-element (length args)))
+ (setf argv (foreign-alloc :string :initial-contents args))
(let ((app (make-instance 'qt:application :args (list argc argv))))
(tg:cancel-finalization app)
(values app t)))))
diff -rN -u old-qt.gui/src/object.lisp new-qt.gui/src/object.lisp
--- old-qt.gui/src/object.lisp 2014-10-05 15:05:24.000000000 +0200
+++ new-qt.gui/src/object.lisp 2014-10-05 15:05:24.000000000 +0200
@@ -66,7 +66,7 @@
(not (null-pointer-p (smoke::pointer object)))
; (typep (class-of object) 'cxx:class)
(not (null-pointer-p (smoke::pointer (cxx:parent object)))))
- (smoke::disown-object object)))
+ (smoke::transfer-ownership-to object (cxx:parent object))))
(define-condition wrapper-gc (storage-condition)
((class-name :initarg :class-name
@@ -91,7 +91,6 @@
*qt-smoke*
"QObject")
"deleteLater")))
-
(defun print-object-to-string (object)
(with-output-to-string (stream)
(print-object object stream)))
@@ -107,7 +106,8 @@
(handler-case
(if (null-pointer-p (smoke::pointer-call *get-parent* pointer))
(smoke::pointer-call *delete-later* pointer)
- (error (make-condition 'wrapper-gc :class-name name
+ (error (make-condition 'wrapper-gc
+ :class-name (name class)
:pointer pointer)))
(error (condition)
(smoke::report-finalize-error condition "qt:object wrap"
@@ -116,7 +116,7 @@
(handler-case
(if (null-pointer-p (smoke::pointer-call *get-parent* pointer))
(funcall next)
- (cerror 'continue "Finalizer for object with a parent called."))
+ (cerror "Ignore" "Finalizer for object with a parent called."))
(error (condition)
(smoke::report-finalize-error condition "qt:object"
(name class) pointer)))))))
@@ -139,13 +139,16 @@
(cffi:defcallback event-notify smoke:cxx-bool
((data :pointer))
(declare (optimize (speed 3)))
- (let ((event (make-instance 'event :pointer (cffi:mem-aref data :pointer 1))))
+ (let ((receiver (smoke::get-object (cffi:mem-aref data :pointer 0)))
+ (event (make-instance 'event :pointer (cffi:mem-aref data :pointer 1))))
(enum-case (cxx:type event)
(event.+child-added+
- (let* ((child-event (make-instance 'child-event
+ (let ((child-event (make-instance 'child-event
:pointer
(smoke::upcast event (find-class 'child-event)))))
- (smoke::disown-object (cxx:child child-event))))
+ (when (smoke::has-pointer-p (smoke::pointer (cxx:child child-event)))
+ (assert receiver)
+ (smoke::transfer-ownership-to (cxx:child child-event) receiver))))
(event.+child-removed+
(let* ((child-event (make-instance 'child-event
:pointer (smoke::upcast event
@@ -154,7 +157,8 @@
;; it was construted by Smoke or not. Only take ownership of objects
;; that have been constructed by Smoke.
(when (smoke::has-pointer-p (smoke::pointer (cxx:child child-event)))
- (smoke::take-ownership (cxx:child child-event)))))))
+ (assert receiver)
+ (smoke::take-ownership (cxx:child child-event) receiver))))))
nil)
(eval-when (:compile-toplevel :load-toplevel :execute)
diff -rN -u old-qt.gui/src/ownership.lisp new-qt.gui/src/ownership.lisp
--- old-qt.gui/src/ownership.lisp 2014-10-05 15:05:24.000000000 +0200
+++ new-qt.gui/src/ownership.lisp 2014-10-05 15:05:24.000000000 +0200
@@ -1,4 +1,79 @@
(in-package :qt)
+;; undo-stack
(define-takes-ownership cxx:push ((undo-stack undo-stack) undo-command)
undo-command)
+
+
+#|
+;; FIXME TODO
+;; application
+(define-takes-ownership cxx:set-style ((application application) (style style))
+ ;; NOT QString style
+ style) ;; STATIC
+
+
+;; core-application
+(define-takes-ownership cxx:post-event ((app core-application) receiver (event event))
+ event) ;; STATIC
+(define-takes-ownership cxx:post-event ((app core-application) receiver event priority)
+ event) ;; STATIC
+|#
+
+;; AbstractFileEngine::beginEntryList return value
+
+;; grid-layout
+(define-takes-ownership cxx:add-item ((layout grid-layout) (item layout-item)
+ row column)
+ item)
+(define-takes-ownership cxx:add-item ((layout grid-layout) (item layout-item)
+ row column row-span)
+ item)
+(define-takes-ownership cxx:add-item ((layout grid-layout) (item layout-item)
+ row column row-span colum-span)
+ item)
+(define-takes-ownership cxx:add-item ((layout grid-layout) (item layout-item)
+ row column row-span colum-span aligment)
+ item)
+
+(define-takes-ownership cxx:add-item ((layout layout) (item layout-item))
+ item)
+
+;; QIcon::QIcon(QIconEngine* engine)
+
+(define-takes-ownership cxx:register-editor ((factory item-editor-factory)
+ type creator)
+ creator)
+
+
+(define-takes-ownership cxx:set-child ((this standard-item) row colum item)
+ item)
+(define-takes-ownership cxx:set-child ((this standard-item) row item)
+ item)
+(define-takes-ownership cxx:set-horizontal-header-item ((this standard-item-model)
+ column item)
+ item)
+(define-takes-ownership cxx:set-vertical-header-item ((this standard-item-model)
+ row item)
+ item)
+(define-takes-ownership cxx:set-item ((this standard-item-model)
+ row column item)
+ item)
+(define-takes-ownership cxx:set-item ((this standard-item-model)
+ row item)
+ item)
+(define-takes-ownership cxx:set-item-prototype ((this standard-item-model)
+ item)
+ item)
+
+
+;; Allocates return value
+;; QLineEdit::createStandardContextMenu()
+
+;; parent
+;; QListwidgetitem
+
+
+;; Relases ownership
+;;QList<QStandardItem *> QStandardItemModel::takeColumn ( int column )
+;; etc
diff -rN -u old-qt.gui/src/qt.lisp new-qt.gui/src/qt.lisp
--- old-qt.gui/src/qt.lisp 2014-10-05 15:05:24.000000000 +0200
+++ new-qt.gui/src/qt.lisp 2014-10-05 15:05:24.000000000 +0200
@@ -37,5 +37,4 @@
(define-foreign-library libqt-smoke-extra
(:unix "libqt-smoke-extra.so")
(t (:default "libqt-smoke-extra")))
-
(use-foreign-library libqt-smoke-extra))