chiark / gitweb /
Remove around method for SIGNAL-CONNECT
[clg] / glib / gtype.lisp
index 6cab228055ca2352c8914ce9b6576e5cef398cbf..2b4a2d0625129cfcf117b6951f67b965232ef7fc 100644 (file)
@@ -15,7 +15,7 @@
 ;; License along with this library; if not, write to the Free Software
 ;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
-;; $Id: gtype.lisp,v 1.13 2001-11-12 22:24:29 espen Exp $
+;; $Id: gtype.lisp,v 1.16 2002-03-24 12:56:03 espen Exp $
 
 (in-package "GLIB")
 
@@ -139,7 +139,7 @@ (defun %init-types-in-library (pathname ignore)
 
 (defmacro init-types-in-library (filename &key ignore)
   (%init-types-in-library
-   (format nil "~A/~A" user::gtk-library-path filename) ignore))
+   (format nil "~A/~A" *gtk-library-path* filename) ignore))
 
 
 
@@ -244,6 +244,19 @@ (defbinding type-parent (type) type-number
 (defun supertype (type)
   (type-from-number (type-parent type)))
 
+(defbinding %type-interfaces (type) pointer
+  ((find-type-number type t) type-number)
+  (n-interfaces unsigned-int :out))
+
+(defun type-interfaces (type)
+  (multiple-value-bind (array length) (%type-interfaces type)
+    (unwind-protect
+       (map-c-array 'list #'identity array 'type-number length)
+      (deallocate-memory array))))
+
+(defun implements (type)
+  (mapcar #'type-from-number (type-interfaces type)))
+
 (defun type-hierarchy (type)
   (let ((type-number (find-type-number type t)))
     (unless (= type-number 0)
@@ -288,7 +301,8 @@ (defun %sort-types-topologicaly (unsorted)
   (let ((sorted ()))
     (loop while unsorted do
       (dolist (type unsorted)
-       (let ((dependencies (rest (type-hierarchy type))))
+       (let ((dependencies
+              (append (rest (type-hierarchy type)) (type-interfaces type))))
          (cond
           ((null dependencies)
            (push type sorted)
@@ -318,7 +332,11 @@ (defun expand-type-definitions (prefix &optional args)
                   #'(lambda (options)
                       (and
                        (string-prefix-p (first options) name)
-                       (getf (cdr options) :ignore-prefix)))
+                       (getf (cdr options) :ignore-prefix)
+                       (not (some
+                             #'(lambda (exception)
+                                 (string= name exception))
+                             (getf (cdr options) :except)))))
                   args))))
           (find-types prefix))))