Wed Jun 10 14:14:34 CEST 2009 Tobias Rautenkranz * 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-30 07:47:30.000000000 +0100 +++ new-qt.gui/src/application.lisp 2014-10-30 07:47:30.000000000 +0100 @@ -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-30 07:47:30.000000000 +0100 +++ new-qt.gui/src/object.lisp 2014-10-30 07:47:30.000000000 +0100 @@ -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-30 07:47:30.000000000 +0100 +++ new-qt.gui/src/ownership.lisp 2014-10-30 07:47:30.000000000 +0100 @@ -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 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-30 07:47:30.000000000 +0100 +++ new-qt.gui/src/qt.lisp 2014-10-30 07:47:30.000000000 +0100 @@ -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))