From 03802c3c0b7fc68d0e14fe39a1adf637cefbf66d Mon Sep 17 00:00:00 2001 From: espen Date: Thu, 6 Jan 2005 21:00:51 +0000 Subject: [PATCH] New method CREATE-CALLBACK-FUNCTION --- gtk/gtkcontainer.lisp | 11 ++++++++++- gtk/gtkwidget.lisp | 20 ++++++++++++++++++-- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/gtk/gtkcontainer.lisp b/gtk/gtkcontainer.lisp index a6981c6..6729eb3 100644 --- a/gtk/gtkcontainer.lisp +++ b/gtk/gtkcontainer.lisp @@ -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: gtkcontainer.lisp,v 1.15 2004-12-29 21:14:23 espen Exp $ +;; $Id: gtkcontainer.lisp,v 1.16 2005-01-06 21:00:53 espen Exp $ (in-package "GTK") @@ -30,6 +30,15 @@ initargs :child :children)) +(defmethod create-callback-function ((container container) function arg1) + (if (eq arg1 :children) + #'(lambda (&rest args) + (mapc #'(lambda (child) + (apply function child (rest args))) + (container-children container))) + (call-next-method))) + + (defbinding %container-add () nil (container container) (widget widget)) diff --git a/gtk/gtkwidget.lisp b/gtk/gtkwidget.lisp index 0320921..c680614 100644 --- a/gtk/gtkwidget.lisp +++ b/gtk/gtkwidget.lisp @@ -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: gtkwidget.lisp,v 1.13 2004-12-20 20:09:53 espen Exp $ +;; $Id: gtkwidget.lisp,v 1.14 2005-01-06 21:00:51 espen Exp $ (in-package "GTK") @@ -49,7 +49,23 @@ :parent parent :child object)))) (t (call-next-method)))) - +(defmethod create-callback-function ((widget widget) function arg1) + (if (eq arg1 :parent) + #'(lambda (&rest args) + (if (slot-boundp widget 'parent) + (apply function (widget-parent widget) (rest args)) + (signal-connect widget 'parent-set + #'(lambda (old-parent) + (declare (ignore old-parent)) + (let ((*signal-stop-emission* + #'(lambda () + (warn "Ignoring emission stop in delayed signal handler")))) + (apply function (widget-parent widget) (rest args)))) + :remove t) +; (warn "Widget has no parent -- ignoring signal") + )) + (call-next-method))) + (defun child-property-value (widget slot) (slot-value (widget-child-properties widget) slot)) -- 2.11.0