
(defvar *iconified-windows* nil)

(defun iconify-all ()
  "Iconfify all windows."
  (interactive)

  (setq *iconified-windows* nil)
  (let* ((wins (stacking-order)) (len (length wins)) (i 0)

    (while (< i len)
      (let ((w (nth i wins)))
	(cond ((and (eq current-workspace (window-get w 'workspace))
		    (not (window-get w 'iconified)))
	       (setq *iconified-windows* (cons w *iconified-windows*))
	       (iconify-window w))))
      (setq i (+ i 1)))))

(defun uniconify-windows (wins)
  (cond ((not (null wins))
	 (uniconify-window (car wins))
	 (uniconify-windows (cdr wins)))))

(defun uniconify-all ()
  "Deiconify windows iconified with iconify-all."
  (interactive)
  (uniconify-windows *iconified-windows*))

