[mcclim-cvs] CVS update: mcclim/frames.lisp
Gilbert Baumann
gbaumann at common-lisp.net
Mon Nov 28 13:51:07 UTC 2005
Update of /project/mcclim/cvsroot/mcclim
In directory common-lisp.net:/tmp/cvs-serv29697
Modified Files:
frames.lisp
Log Message:
EXECUTE-FRAME-COMMAND
When called from another process, pass command as
EXECUTE-COMMAND-EVENT to the frame. So that commands are always
executed in sync with the command loop.
However, my method to check for being in frame process is far from
perfect.
Date: Mon Nov 28 14:51:06 2005
Author: gbaumann
Index: mcclim/frames.lisp
diff -u mcclim/frames.lisp:1.109 mcclim/frames.lisp:1.110
--- mcclim/frames.lisp:1.109 Thu Oct 27 03:21:33 2005
+++ mcclim/frames.lisp Mon Nov 28 14:51:05 2005
@@ -588,8 +588,25 @@
#+NIL (read-command (frame-command-table frame) :use-keystrokes nil :stream stream)
(read-command (frame-command-table frame) :use-keystrokes t :stream stream))
+(defclass execute-command-event (window-manager-event)
+ ((sheet :initarg :sheet :reader event-sheet)
+ (command :initarg :command :reader execute-command-event-command)))
+
(defmethod execute-frame-command ((frame application-frame) command)
- (apply (command-name command) (command-arguments command)))
+ ;; ### FIXME: I'd like a different method than checking for
+ ;; *application-frame* to decide, which process processes which
+ ;; frames command loop. Perhaps looking ath the process slot?
+ ;; --GB 2005-11-28
+ (cond ((eq *application-frame* frame)
+ (apply (command-name command) (command-arguments command)))
+ (t
+ (let ((eq (sheet-event-queue (frame-top-level-sheet frame))))
+ (event-queue-append eq (make-instance 'execute-command-event
+ :sheet frame
+ :command command))))))
+
+(defmethod handle-event ((frame application-frame) (event execute-command-event))
+ (execute-frame-command frame (execute-command-event-command event)))
(defmethod command-enabled (command-name (frame standard-application-frame))
(and (command-accessible-in-command-table-p command-name
More information about the Mcclim-cvs
mailing list