#+clisp
(:import-from "SOCKET" "SOCKET-STATUS")
(:export "EVENTS-PENDING-P" "GET-CURRENT-EVENT" "MAIN-DO-EVENT" "MAIN"
- "MAIN-LEVEL" "MAIN-QUIT" "MAIN-ITERATION-DO" "MAIN-ITERATE-ALL")
+ "MAIN-LEVEL" "MAIN-QUIT" "MAIN-ITERATION-DO" "MAIN-ITERATE-ALL"
+ "*REENTRANT-MAIN-ITERATION*" "*RUNNING-MAIN-ITERATION*")
(:export "CONTAINER-CHILD-CLASS" "CONTAINER-CHILD" "CONTAINER-CHILD-CLASS")
;; Signal names that need to be explicit exported
(:export "TOGGLED")
;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-;; $Id: gtkobject.lisp,v 1.45 2008/02/28 18:33:12 espen Exp $
+;; $Id: gtkobject.lisp,v 1.46 2008/03/04 16:03:38 espen Exp $
(in-package "GTK")
;;;; Main loop and event handling
+(defparameter *reentrant-main-iteration* t)
+(defvar *running-main-iteration* nil)
+
(defbinding events-pending-p () boolean)
(defbinding get-current-event () gdk:event)
(defun main-iterate-all (&rest args)
(declare (ignore args))
- (loop
- while (events-pending-p)
- do (main-iteration-do nil))
+ (unless (and (not *reentrant-main-iteration*) *running-main-iteration*)
+ (let ((*running-main-iteration* t))
+ (loop
+ while (events-pending-p)
+ do (main-iteration-do nil))))
#+clisp 0)