[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
01/01: installer: Allow changing the current form field by mouse click.
From: |
Danny Milosavljevic |
Subject: |
01/01: installer: Allow changing the current form field by mouse click. |
Date: |
Fri, 7 Jul 2017 15:44:02 -0400 (EDT) |
dannym pushed a commit to branch wip-installer-2
in repository guix.
commit 06e075d6d7eba0cac562cf7cb365c82a008f8b0a
Author: Danny Milosavljevic <address@hidden>
Date: Fri Jul 7 21:42:32 2017 +0200
installer: Allow changing the current form field by mouse click.
* gurses/form.scm (std-form-mouse-handler): New variable. Export it.
* gnu/system/installer/page.scm (page-default-mouse-handler): Use it here.
---
gnu/system/installer/page.scm | 3 +++
gurses/form.scm | 18 ++++++++++++++++++
2 files changed, 21 insertions(+)
diff --git a/gnu/system/installer/page.scm b/gnu/system/installer/page.scm
index 879c924..478f114 100644
--- a/gnu/system/installer/page.scm
+++ b/gnu/system/installer/page.scm
@@ -63,6 +63,7 @@
(define (page-default-mouse-handler page device-id x y z button-state)
(let* ((menu (page-datum page 'menu))
(buttons (page-datum page 'navigation))
+ (form (page-datum page 'form))
(status (or (let ((status (and menu (std-menu-mouse-handler menu
device-id x y z button-state))))
(match status
(('menu-item-activated x)
@@ -77,6 +78,8 @@
;(if menu
; (menu-set-active! menu #f))
x))))))
+ (if form
+ (std-form-mouse-handler form device-id x y z button-state))
(if status
(begin
(page-activate-item page status)
diff --git a/gurses/form.scm b/gurses/form.scm
index 13642ff..37d597b 100644
--- a/gurses/form.scm
+++ b/gurses/form.scm
@@ -31,6 +31,7 @@
#:export (form-update-cursor)
#:export (form-set-current-field)
#:export (get-current-field)
+ #:export (std-form-mouse-handler)
#:use-module (ncurses curses)
#:use-module (ncurses panel)
@@ -376,3 +377,20 @@ Set the field value to the newly selected value."
(define (get-current-field form)
(array-ref (form-items form) (form-current-item form)))
+
+(define (std-form-mouse-handler form device-id g-x g-y z button-state)
+ (if (logtest BUTTON1_CLICKED button-state)
+ (let* ((win (form-window form))
+ (items (form-items form))
+ (item-count (array-length items)))
+ (match (mouse-trafo win g-y g-x #f)
+ ((y x)
+ (if (and (>= y 0) (< y item-count))
+ (begin
+ (form-set-current-field form y)
+ (form-update-cursor form)
+ ;(refresh (form-window form))
+ (list 'form-item-selected y))))
+ (_ #f))
+ 'handled)
+ #f))