Focus and Blur events for windows

This commit is contained in:
David Botton 2021-02-17 17:16:22 -05:00
parent bfdd90d42e
commit c1b6da0b5d
3 changed files with 50 additions and 2 deletions

View file

@ -376,6 +376,8 @@ The on-window-change clog-obj received is the new window"))
(defmethod fire-on-window-change (obj app) (defmethod fire-on-window-change (obj app)
"Fire handler if set. Change the value of current-win to clog-obj (Private)" "Fire handler if set. Change the value of current-win to clog-obj (Private)"
(when (current-win app)
(fire-on-window-blurred (current-win app)))
(unless obj (unless obj
(let (new-order (let (new-order
(order -9999)) (order -9999))
@ -388,7 +390,8 @@ The on-window-change clog-obj received is the new window"))
(windows app)))) (windows app))))
(setf (current-win app) obj) (setf (current-win app) obj)
(when (on-window-change app) (when (on-window-change app)
(funcall (on-window-change app) obj))) (funcall (on-window-change app) obj))
(fire-on-window-focused obj))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Implementation - Individual Windows ;; Implementation - Individual Windows
@ -446,6 +449,14 @@ The on-window-change clog-obj received is the new window"))
:accessor on-window-can-size :accessor on-window-can-size
:initform nil :initform nil
:documentation "Return t to allow close of window") :documentation "Return t to allow close of window")
(on-window-focused
:accessor on-window-focused
:initform nil
:documentation "Fired on window focused")
(on-window-blurred
:accessor on-window-blurred
:initform nil
:documentation "Fired on window blurred")
(on-window-close (on-window-close
:accessor on-window-close :accessor on-window-close
:initform nil :initform nil
@ -839,7 +850,41 @@ interactions. Use window-end-modal to undo."))
(setf (height obj) (setf (height obj)
(- (inner-height (window (body app))) (menu-bar-height obj))))) (- (inner-height (window (body app))) (menu-bar-height obj)))))
(fire-on-window-size-done obj))) (fire-on-window-size-done obj)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; set-on-window-focused ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defgeneric set-on-window-focused (clog-gui-window handler)
(:documentation "Set the on-window-focused HANDLER"))
(defmethod set-on-window-focused ((obj clog-gui-window) handler)
(setf (on-window-focused obj) handler))
(defgeneric fire-on-window-focused (clog-gui-window)
(:documentation "Fire handler if set. (Private)"))
(defmethod fire-on-window-focused ((obj clog-gui-window))
(when (on-window-focused obj)
(funcall (on-window-focused obj) obj)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; set-on-window-blurred ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defgeneric set-on-window-blurred (clog-gui-window handler)
(:documentation "Set the on-window-blurred HANDLER"))
(defmethod set-on-window-blurred ((obj clog-gui-window) handler)
(setf (on-window-blurred obj) handler))
(defgeneric fire-on-window-blurred (clog-gui-window)
(:documentation "Fire handler if set. (Private)"))
(defmethod fire-on-window-blurred ((obj clog-gui-window))
(when (on-window-blurred obj)
(funcall (on-window-blurred obj) obj)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; set-on-window-can-close ;; ;; set-on-window-can-close ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View file

@ -689,6 +689,8 @@ embedded in a native template application.)"
(window-keep-on-top generic-function) (window-keep-on-top generic-function)
(window-make-modal generic-function) (window-make-modal generic-function)
(window-end-modal generic-function) (window-end-modal generic-function)
(set-on-window-focused generic-function)
(set-on-window-blurred generic-function)
(set-on-window-can-close generic-function) (set-on-window-can-close generic-function)
(set-on-window-close generic-function) (set-on-window-close generic-function)
(set-on-window-can-move generic-function) (set-on-window-can-move generic-function)

View file

@ -37,6 +37,7 @@
(let* ((menu (create-gui-menu-bar body)) (let* ((menu (create-gui-menu-bar body))
(tmp (create-gui-menu-icon menu :on-click #'on-help-about)) (tmp (create-gui-menu-icon menu :on-click #'on-help-about))
(file (create-gui-menu-drop-down menu :content "File")) (file (create-gui-menu-drop-down menu :content "File"))
(tmp (create-gui-menu-drop-down menu :content "Open Database Connection"))
(win (create-gui-menu-drop-down menu :content "Window")) (win (create-gui-menu-drop-down menu :content "Window"))
(tmp (create-gui-menu-item win :content "Maximize All" :on-click #'maximize-all-windows)) (tmp (create-gui-menu-item win :content "Maximize All" :on-click #'maximize-all-windows))
(tmp (create-gui-menu-item win :content "Normalize All" :on-click #'normalize-all-windows)) (tmp (create-gui-menu-item win :content "Normalize All" :on-click #'normalize-all-windows))