home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 22 gnu / 22-gnu.zip / gwm18a.zip / data / icon-groups.gwm < prev    next >
Lisp/Scheme  |  1995-07-03  |  3KB  |  122 lines

  1. ; iconification following the "group" hint
  2.  
  3. ;;File: icon-groups.gwm -- iconify-window manage groups
  4. ;;Author: colas@mirsa.inria.fr (Colas NAHABOO) -- Bull Research FRANCE
  5. ;;Revision: 1.2 -- Jan 30 1990
  6. ;;State: Exp
  7. ;;GWM Version: 1.4
  8.  
  9. ; do not manage some groups and manage groups starting iconified
  10.  
  11. (if (not (boundp 'iconify-window-redefined-for-groups))
  12.     (setq opening
  13.       (+ opening
  14.          '((if (and window-group (= window-status 'window))
  15.            (with (leader (# 0 window-group))
  16.              (if (member (atom window-client-class)
  17.                  icon-groups.excluded)
  18.              (## 'no-group wob t)
  19.                (if (and (not (= leader window))
  20.                                 (not window-is-transient-for)
  21.                 (with (window leader)
  22.                   (and window-starts-iconic
  23.                        (= 'icon (window-wm-state)))))
  24.                (: window-starts-iconic t)))))))))
  25.  
  26. (defaults-to icon-groups.excluded ())
  27.  
  28. ; iconifies a whole group in a single icon
  29.  
  30. (if (not (boundp 'iconify-window-redefined-for-groups))
  31.   (progn
  32.     (: iconify-window-redefined-for-groups iconify-window)
  33.     (de iconify-window ()
  34.       (if window-group    
  35.                     ; we are in a group
  36.     (if (= window-window (# 0 window-group))
  37.                     ; leader
  38.       (if (= window-status 'window)
  39.                     ; iconify leader
  40.         (if (# 'no-group window)
  41.           (iconify-window-redefined-for-groups)
  42.           (progn
  43.         (for window window-group
  44.           (if window-is-mapped
  45.             (progn (register-group-member window)
  46.               (unmap-window))))
  47.         (raise-and-map-window window-icon))
  48.         )
  49.                     ; de-iconify leader
  50.         (progn
  51.           (raise-and-map-window window-window)
  52.           (for w window-group 
  53.         (if (is-group-member w)
  54.           (raise-and-map-window w)))
  55.           (unmap-window window-icon)
  56.           (clear-group-members window-group)
  57.       ))
  58.                     ; member
  59.       (if (= window-status 'window)
  60.                     ; iconify member
  61.         (if (# 'no-group window)
  62.           (iconify-window-redefined-for-groups)
  63.           (progn
  64.         (setq window-wm-state-icon 
  65.           (with (window (# 0 window-group))
  66.             (raise-and-map-window window-icon)
  67.             window-icon))
  68.         (register-group-member window)
  69.         (unmap-window window))
  70.         )
  71.                     ; de-iconify member 
  72.                     ; (not possible normally)
  73.         (iconify-window-redefined-for-groups)))
  74.                     ; window do not belong to a group
  75.     (iconify-window-redefined-for-groups)))))
  76.  
  77. ; not to map back withdrawn windows, we maintain a 'group property for mapped
  78. ; windows of the group
  79.  
  80. (de register-group-member (w)
  81.     (## 'group w t))
  82.  
  83. (de is-group-member (w)
  84.     (# 'group w))
  85.  
  86. (de clear-group-members (l)
  87.     (for w l
  88.      (## 'group w ())))
  89.  
  90. (de raise-and-map-window (w)
  91.     (with (window w)
  92.       (raise-window)
  93.       (map-window)))
  94.  
  95. ;; iconify all the group except this window
  96.  
  97. (defun iconify-other-windows ()
  98.   (with (leader (# 0 window-group)
  99.       current window)
  100.     (for window window-group
  101.       (if (= window current) ()
  102.     (= window leader) (iconify-window-redefined-for-groups)
  103.     (= 'window window-status)
  104.     (iconify-window)))))
  105.  
  106. ;; inconify all group, even if clicked on a son
  107.  
  108. (defun iconify-all-windows ()
  109.   (for window window-group
  110.     (if (= 'window window-status)
  111.       (iconify-window)
  112. )))
  113.  
  114. ;; sets entries in the window menu
  115.  
  116. (## 0 window-pop-items 
  117.   '(multi-item-make 
  118.     ("Group" (iconify-all-windows))
  119.     ("Iconify" (iconify-window)) 
  120.     ("Others" (iconify-other-windows))
  121. ))
  122.