1 ;;; --------------------------------------------------------------------------
2 ;;; CLFSWM - FullScreen Window Manager
4 ;;; --------------------------------------------------------------------------
5 ;;; Documentation: Main functions
6 ;;; --------------------------------------------------------------------------
8 ;;; (C) 2010 Philippe Brochard <hocwp@free.fr>
10 ;;; This program is free software; you can redistribute it and/or modify
11 ;;; it under the terms of the GNU General Public License as published by
12 ;;; the Free Software Foundation; either version 3 of the License, or
13 ;;; (at your option) any later version.
15 ;;; This program is distributed in the hope that it will be useful,
16 ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
17 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 ;;; GNU General Public License for more details.
20 ;;; You should have received a copy of the GNU General Public License
21 ;;; along with this program; if not, write to the Free Software
22 ;;; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24 ;;; --------------------------------------------------------------------------
29 (defun generic-mode (mode exit-tag
&key enter-function loop-function leave-function
30 (loop-hook *loop-hook
*) original-mode
)
31 "Enter in a generic mode"
32 (let ((last-mode *current-event-mode
*))
33 (unassoc-keyword-handle-event)
35 (dolist (add-mode (ensure-list original-mode
))
36 (assoc-keyword-handle-event add-mode
)))
37 (assoc-keyword-handle-event mode
)
38 (nfuncall enter-function
)
44 (nfuncall loop-function
)
45 (when (xlib:event-listen
*display
* *loop-timeout
*)
46 (xlib:process-event
*display
* :handler
#'handle-event
))
47 (xlib:display-finish-output
*display
*))
48 (nfuncall leave-function
)
49 (unassoc-keyword-handle-event)
50 (assoc-keyword-handle-event last-mode
)))))