chiark
/
gitweb
/
~mdw
/
clg
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Added more bindings to GtkWindow
[clg]
/
glib
/
gcallback.lisp
diff --git
a/glib/gcallback.lisp
b/glib/gcallback.lisp
index 9330820351425fd80418ad55e640306b3dd17c04..b2cd568fdd6629059f81a9a0a634dd6c0fba3cbc 100644
(file)
--- a/
glib/gcallback.lisp
+++ b/
glib/gcallback.lisp
@@
-20,7
+20,7
@@
;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-;; $Id: gcallback.lisp,v 1.3
3 2006-03-02 21:13:0
1 espen Exp $
+;; $Id: gcallback.lisp,v 1.3
5 2006-06-07 13:16:1
1 espen Exp $
(in-package "GLIB")
(in-package "GLIB")
@@
-58,14
+58,16
@@
(defun callback-trampoline (callback-id n-params param-values &optional
(args (loop
for n from 0 below n-params
for offset from 0 by +gvalue-size+
(args (loop
for n from 0 below n-params
for offset from 0 by +gvalue-size+
- collect (gvalue-
get (sap+ param-values offset) t
))))
+ collect (gvalue-
peek (pointer+ param-values offset)
))))
(unwind-protect
(let ((result (apply #'invoke-callback callback-id return-type args)))
(when return-type
(gvalue-set return-value result)))
(unwind-protect
(let ((result (apply #'invoke-callback callback-id return-type args)))
(when return-type
(gvalue-set return-value result)))
+ ;; TODO: this should be made more general, by adding a type
+ ;; method to return invalidate functions.
(loop
for arg in args
(loop
for arg in args
- when (typep arg '
proxy
)
+ when (typep arg '
struct
)
do (invalidate-instance arg)))))
do (invalidate-instance arg)))))
@@
-165,7
+167,7
@@
(defclass signal-query (struct)
(defbinding signal-query
(signal-id &optional (signal-query (make-instance 'signal-query))) nil
(signal-id unsigned-int)
(defbinding signal-query
(signal-id &optional (signal-query (make-instance 'signal-query))) nil
(signal-id unsigned-int)
- (signal-query signal-query :return))
+ (signal-query signal-query :
in/
return))
(defun signal-param-types (info)
(with-slots (n-params param-types) info
(defun signal-param-types (info)
(with-slots (n-params param-types) info
@@
-225,7
+227,7
@@
(defun %call-next-handler (n-params types args return-type)
for arg in args
for type in types
for offset from 0 by +gvalue-size+
for arg in args
for type in types
for offset from 0 by +gvalue-size+
- do (gvalue-init (
sap
+ params offset) type arg))
+ do (gvalue-init (
pointer
+ params offset) type arg))
(unwind-protect
(if return-type
(unwind-protect
(if return-type
@@
-236,7
+238,7
@@
(defun %call-next-handler (n-params types args return-type)
(loop
repeat n-params
for offset from 0 by +gvalue-size+
(loop
repeat n-params
for offset from 0 by +gvalue-size+
- do (gvalue-unset (
sap
+ params offset)))
+ do (gvalue-unset (
pointer
+ params offset)))
(deallocate-memory params)))))
(deallocate-memory params)))))
@@
-259,8
+261,8
@@
(default (make-symbol "DEFAULT")))
(let ((,default (list* ,object ,@vars ,rest)))
(flet ((call-next-handler (&rest ,next)
(%call-next-handler
(let ((,default (list* ,object ,@vars ,rest)))
(flet ((call-next-handler (&rest ,next)
(%call-next-handler
- ,n-params ',types (or ,next ,default) ',return-type)))
)
- ,@body)))
+ ,n-params ',types (or ,next ,default) ',return-type)))
+ ,@body)))
)
',name)))
',name)))
@@
-414,7
+416,7
@@
(defun create-signal-emit-function (signal-id)
(loop
for arg in (cons object args)
for type in param-types
(loop
for arg in (cons object args)
for type in param-types
- as tmp = params then (
sap
+ tmp +gvalue-size+)
+ as tmp = params then (
pointer
+ tmp +gvalue-size+)
do (gvalue-init tmp type arg)
finally
(if return-type
do (gvalue-init tmp type arg)
finally
(if return-type
@@
-424,7
+426,7
@@
(defun create-signal-emit-function (signal-id)
(%signal-emitv params signal-id detail (make-pointer 0))))
(loop
repeat n-params
(%signal-emitv params signal-id detail (make-pointer 0))))
(loop
repeat n-params
- as tmp = params then (
sap
+ tmp +gvalue-size+)
+ as tmp = params then (
pointer
+ tmp +gvalue-size+)
while (gvalue-p tmp)
do (gvalue-unset tmp)))))))
while (gvalue-p tmp)
do (gvalue-unset tmp)))))))
@@
-477,7
+479,3
@@
(defmacro with-callback-function ((id function) &body body)
(unwind-protect
(progn ,@body)
(destroy-user-data ,id))))
(unwind-protect
(progn ,@body)
(destroy-user-data ,id))))
-
-;; For backward compatibility
-(defmacro def-callback-marshal (name (return-type &rest args))
- `(define-callback-marshal ,name ,return-type ,args))