[cells-cvs] CVS cells-gtk3/cells-gtk

phildebrandt phildebrandt at common-lisp.net
Wed Apr 16 14:41:29 UTC 2008


Update of /project/cells/cvsroot/cells-gtk3/cells-gtk
In directory clnet:/tmp/cvs-serv26095/cells-gtk

Modified Files:
	buttons.lisp gtk-app.lisp tree-view.lisp widgets.lisp 
Log Message:
Testing with-widget.


--- /project/cells/cvsroot/cells-gtk3/cells-gtk/buttons.lisp	2008/04/14 16:43:41	1.2
+++ /project/cells/cvsroot/cells-gtk3/cells-gtk/buttons.lisp	2008/04/16 14:41:28	1.3
@@ -54,12 +54,16 @@
   (toggled)
   :active (c-in nil)
   :on-toggled (callback (widget event data)
-                ;;(print (list :toggle-button :on-toggled-cb widget))
+                (trc "toggle-button toggled" widget)
                 (with-integrity (:change 'tggle-button-on-toggled-cb)
                   (let ((state (gtk-toggle-button-get-active widget)))
-                    ;;(print (list :toggledstate state))
                     (setf (value self) state)))))
 
+(defobserver .value ((self toggle-button))
+  (trc "observing toggle-button .value" self (value self))
+  (with-integrity (:change 'toggle-button-value)
+    (trc "with integrity")))
+
 #+test
 (DEF-GTK WIDGET TOGGLE-BUTTON (BUTTON) ((INIT :ACCESSOR INIT :INITARG :INIT :INITFORM NIL))
          (MODE ACTIVE) (TOGGLED) :ACTIVE (C-IN NIL) :ON-TOGGLED
--- /project/cells/cvsroot/cells-gtk3/cells-gtk/gtk-app.lisp	2008/04/14 16:43:42	1.3
+++ /project/cells/cvsroot/cells-gtk3/cells-gtk/gtk-app.lisp	2008/04/16 14:41:28	1.4
@@ -111,7 +111,8 @@
 
 
 (cffi:defcallback cb-quit :unsigned-int ((data :pointer))
-  (when-bind (self (with-trc (gtk-object-find data)))
+  (trc "cb quit" data (gtk-object-find data))
+  (bwhen (self (gtk-object-find data))
     (setf *system* (delete self *system*))
     (not-to-be self))
   0)
--- /project/cells/cvsroot/cells-gtk3/cells-gtk/tree-view.lisp	2008/04/13 10:59:17	1.1
+++ /project/cells/cvsroot/cells-gtk3/cells-gtk/tree-view.lisp	2008/04/16 14:41:28	1.2
@@ -53,6 +53,7 @@
  				 (when (fourth col-def)
  				   (list pos (fourth col-def))))))
    (columns :accessor columns
+	    :owning t
      :initform (c? (mapcar #'(lambda (col-init)
                                (apply #'make-be 'tree-view-column
                                       :container self
@@ -478,7 +479,7 @@
 	     (progn #+msg(print (list "CALCULATE KIDS for family observer" self "on" (^value) "-- parent" (upper self)))
 		    (bwhen (val (^value)) ;; not sure why not
 		      (unless (deadp val)
-			(trcx "creating kids" val (slot-value val 'cells::.md-state) (kids val))
+			(trcx nil "creating kids" val (slot-value val 'cells::.md-state) (kids val))
 			(mapcar #'(lambda (src) (mk-observer self src)) (kids val))))))))
 
 ;;; here do cleanup work, children get called before parents
--- /project/cells/cvsroot/cells-gtk3/cells-gtk/widgets.lisp	2008/04/14 16:43:44	1.2
+++ /project/cells/cvsroot/cells-gtk3/cells-gtk/widgets.lisp	2008/04/16 14:41:28	1.3
@@ -36,7 +36,7 @@
 		       (let ((id (apply (symbol-function (new-function-name self))
 					(new-args self))))
 			 (gtk-object-store id self)
-			 (gtk-signal-connect-swap id "configure-event" (cffi:get-callback 'reshape-widget-handler) :data id)
+			 #+libcellsgtk (gtk-signal-connect-swap id "configure-event" (cffi:get-callback 'reshape-widget-handler) :data id)
 			 id))))
    
    (callbacks :cell nil :accessor callbacks
@@ -75,13 +75,16 @@
 
 
 (defun gtk-object-forget (gtk-id gtk-object)
-  (remhash (md-name gtk-object) *widgets*)
-  (when gtk-id
-    (assert *gtk-objects*)
-    (remhash (cffi:pointer-address gtk-id) *gtk-objects*)
-    (mapc (lambda (k)
-            (gtk-object-forget (slot-value k 'id) k))
-      (slot-value gtk-object '.kids))))
+  (when (and gtk-id gtk-object)
+    (trc nil "    forgetting id/obj" gtk-id gtk-object)
+    (let ((ptr (cffi:pointer-address gtk-id)))
+      (assert *widgets*)
+      (when (eql (gethash (md-name gtk-object) *widgets*) gtk-object)
+	(remhash (md-name gtk-object) *widgets*))
+      (assert *gtk-objects*)
+      (remhash ptr *gtk-objects*)
+      (mapc (lambda (k) (gtk-object-forget (slot-value k 'id) k))
+	    (slot-value gtk-object '.kids)))))
 
 (defun gtk-object-find (gtk-id &optional must-find-p &aux (hash-id (cffi:pointer-address gtk-id)))
   (when *gtk-objects*
@@ -101,7 +104,9 @@
 
 (defmacro with-widget ((widget name &optional alternative) &body body)
   `(bif (,widget (find-widget ,name))
-	(progn , at body)
+	(progn
+	  (trc "with widget" ,widget ',body)
+	  , at body)
 	,alternative))
 
 (defmacro with-widget-value ((val name &key (accessor '(quote value)) (alternative nil)) &body body)
@@ -333,15 +338,12 @@
   ()
   (focus show hide delete-event destroy-event)
   ;; this is called unless the user overwrites this routine
-  :on-delete-event (c-in #'(lambda (self widget event data)
-			     (declare (ignore widget event data))
-			     (trc "on-delete")
-			     (gtk-object-forget (id self) self)
-			     0)))
+  )
 
 #+libcellsgtk
 (cffi:defcallback reshape-widget-handler :int ((widget :pointer) (event :pointer) (data :pointer))
   (declare (ignore data event))
+  (trc "reshape" widget)
   (bwhen (self (gtk-object-find widget))
     (let ((new-width (gtk-adds-widget-width widget))
 	  (new-height (gtk-adds-widget-height widget)))
@@ -351,10 +353,6 @@
 	      (allocated-height self) new-height))))
   0)
 
-(defmethod initialize-instance :after ((self widget) &rest initargs)
-  (declare (ignore initargs))
-  #+libcellsgtk-
-  )
 
 (defmethod focus ((self widget))
   (gtk-widget-grab-focus (id self)))
@@ -389,7 +387,9 @@
     (trc "WIDGET DESTROY" (md-name self) (type-of self) self)
     (force-output))
   (gtk-object-forget (slot-value self 'id) self)
-  (gtk-widget-destroy (slot-value self 'id)))
+  (trc nil "not-to-be destroys" self (slot-value self 'id))
+  (gtk-widget-destroy (slot-value self 'id))
+  (trc nil "  done"))
 
 (defun assert-bin (container)
   (assert (null (rest (kids container))) 




More information about the Cells-cvs mailing list