guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/01: installer: Factor out run-event-loop and add mouse support.


From: Danny Milosavljevic
Subject: 01/01: installer: Factor out run-event-loop and add mouse support.
Date: Wed, 5 Jul 2017 09:04:12 -0400 (EDT)

dannym pushed a commit to branch wip-installer-2
in repository guix.

commit 2bdfaab28e3024d299838b431469240063bc23a1
Author: Danny Milosavljevic <address@hidden>
Date:   Wed Jul 5 15:03:31 2017 +0200

    installer: Factor out run-event-loop and add mouse support.
    
    * gurses/form.scm (run-event-loop): New variable.
    (maybe-run-modal-popup): Use it here.
---
 gurses/form.scm | 50 +++++++++++++++++++++++++++++++++-----------------
 1 file changed, 33 insertions(+), 17 deletions(-)

diff --git a/gurses/form.scm b/gurses/form.scm
index c603128..6c41f1c 100644
--- a/gurses/form.scm
+++ b/gurses/form.scm
@@ -257,6 +257,27 @@ label eq? to N"
   (if (not (panel? win))
       (make-panel! win)))
 
+(define (run-event-loop form menu end-status)
+  "Run modal event loop for FORM until END-STATUS returns something other
+than #f.  Return that to our caller."
+  (let* ((win (form-window form))
+         (ch (getch win)))
+    (cond
+     ((eqv? ch KEY_MOUSE)
+      (match (getmouse)
+       ((device-id g-x g-y z button-state)
+        (std-menu-mouse-handler menu device-id g-x g-y z button-state))
+       (_ #f)))
+     ((end-status form ch)
+      (end-status form ch))
+     (else
+       (std-menu-key-handler menu ch)
+       (menu-redraw menu)
+       (menu-refresh menu)
+       (update-panels)
+       (doupdate)
+       (run-event-loop form menu end-status)))))
+
 (define (maybe-run-modal-popup form which)
   "Check whether the field at index WHICH has a popup menu.
 If so, show it, run a modal popup menu, then hide it again.
@@ -270,23 +291,18 @@ Set the field value to the newly selected value."
           (show-panel popup)
           (keypad! win #t)
           (menu-refresh menu)
-          (let loop ((ch (getch win)))
-            (if (or (eq? ch #\newline)
-                    (eq? ch #\tab))
-                (begin
-                  (field-set-value! new-field (menu-get-current-item menu))
-                  (hide-panel popup)
-                  (redraw-field form new-field (form-current-item form))
-                  (move win which (form-tabpos form))
-                  (if (eq? ch #\tab)
-                    (form-next-field form)))
-                (begin
-                  (std-menu-key-handler menu ch)
-                  (menu-redraw menu)
-                  (menu-refresh menu)
-                  (update-panels)
-                  (doupdate)
-                  (loop (getch win))))))))
+          (let ((ch (run-event-loop form menu
+                                    (lambda (form ch)
+                                    (if (or (eqv? ch #\newline)
+                                            (eqv? ch #\tab))
+                                        ch
+                                        #f)))))
+            (field-set-value! new-field (menu-get-current-item menu))
+            (hide-panel popup)
+            (redraw-field form new-field (form-current-item form))
+            (move win which (form-tabpos form))
+            (if (eq? ch #\tab)
+              (form-next-field form))))))
 
 (define (form-set-current-field form which)
   (let* ((old-field  (get-current-field form))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]