- changed the action for the kill-button, to manually kill zombie
clients. - added tracking of the last two focused clients, to refocus the last one if a client has been killed.
This commit is contained in:
		
							parent
							
								
									328ddca7b0
								
							
						
					
					
						commit
						43866aff9e
					
				| 
						 | 
					@ -99,6 +99,7 @@
 | 
				
			||||||
	  wm-clients wm-current-client
 | 
						  wm-clients wm-current-client
 | 
				
			||||||
	  wm-manage-window wm-unmanage-window wm-select-client
 | 
						  wm-manage-window wm-unmanage-window wm-select-client
 | 
				
			||||||
	  wm-configure-window wm-iconify-window wm-maximize-window
 | 
						  wm-configure-window wm-iconify-window wm-maximize-window
 | 
				
			||||||
 | 
						  wm-deinit-client
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	  ignore-next-enter-notify!
 | 
						  ignore-next-enter-notify!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,10 +19,21 @@
 | 
				
			||||||
	       wm)))
 | 
						       wm)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(define-record-type switch-wm-data :switch-wm-data
 | 
					(define-record-type switch-wm-data :switch-wm-data
 | 
				
			||||||
  (make-switch-wm-data titlebars empty-titlebar)
 | 
					  (make-switch-wm-data titlebars empty-titlebar last-focused)
 | 
				
			||||||
  switch-wm-data?
 | 
					  switch-wm-data?
 | 
				
			||||||
  (titlebars data:titlebars set-data:titlebars!)
 | 
					  (titlebars data:titlebars set-data:titlebars!)
 | 
				
			||||||
  (empty-titlebar data:empty-titlebar))
 | 
					  (empty-titlebar data:empty-titlebar)
 | 
				
			||||||
 | 
					  (last-focused data:last-focused set-data:last-focused!))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;; only for switch-wm's, but maybe we will need that for all...
 | 
				
			||||||
 | 
					(define (last-focused-client wm data)
 | 
				
			||||||
 | 
					  (let ((c (cdr (data:last-focused data))))
 | 
				
			||||||
 | 
					    (and (memq c (wm-clients wm)) c)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define (add-last-focused-client! wm data client)
 | 
				
			||||||
 | 
					  (let ((p (data:last-focused data)))
 | 
				
			||||||
 | 
					    (set-cdr! p (car p))
 | 
				
			||||||
 | 
					    (set-car! p client)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(define (init-switch-wm wm channel)
 | 
					(define (init-switch-wm wm channel)
 | 
				
			||||||
  (let* ((dpy (wm:dpy wm))
 | 
					  (let* ((dpy (wm:dpy wm))
 | 
				
			||||||
| 
						 | 
					@ -30,7 +41,7 @@
 | 
				
			||||||
	 (options (wm:options wm))
 | 
						 (options (wm:options wm))
 | 
				
			||||||
	 (gc (create-gc dpy window '()))
 | 
						 (gc (create-gc dpy window '()))
 | 
				
			||||||
	 (empty-titlebar (create-empty-titlebar wm))
 | 
						 (empty-titlebar (create-empty-titlebar wm))
 | 
				
			||||||
	 (data (make-switch-wm-data '() empty-titlebar)))
 | 
						 (data (make-switch-wm-data '() empty-titlebar (cons #f #f))))
 | 
				
			||||||
    (update-titlebars wm data)
 | 
					    (update-titlebars wm data)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    (grab-shortcut dpy window
 | 
					    (grab-shortcut dpy window
 | 
				
			||||||
| 
						 | 
					@ -131,7 +142,8 @@
 | 
				
			||||||
			      (if (window-viewable? dpy window)
 | 
								      (if (window-viewable? dpy window)
 | 
				
			||||||
				  'active
 | 
									  'active
 | 
				
			||||||
				  'normal))))
 | 
									  'normal))))
 | 
				
			||||||
	       (set-titlebar-state! titlebar state)))))
 | 
						       (set-titlebar-state! titlebar state)))
 | 
				
			||||||
 | 
						 (if focused? (add-last-focused-client! wm data client))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      ((update-client-name)
 | 
					      ((update-client-name)
 | 
				
			||||||
       (let ((client (second msg))
 | 
					       (let ((client (second msg))
 | 
				
			||||||
| 
						 | 
					@ -223,7 +235,16 @@
 | 
				
			||||||
		(wm-select-client wm client (fourth msg)))
 | 
							(wm-select-client wm client (fourth msg)))
 | 
				
			||||||
	       ;; from titlebar-buttons
 | 
						       ;; from titlebar-buttons
 | 
				
			||||||
	       ((kill)
 | 
						       ((kill)
 | 
				
			||||||
		(delete-window dpy (client:window client) (second msg)))
 | 
							(let ((time (second msg)))
 | 
				
			||||||
 | 
							  ;; sometimes zombie-client-windows still hang
 | 
				
			||||||
 | 
							  ;; around. this is just a hack to let the user close
 | 
				
			||||||
 | 
							  ;; those manually:
 | 
				
			||||||
 | 
							  (if (or (not (window-exists? dpy (client:window client)))
 | 
				
			||||||
 | 
								  (not (eq? (window-parent dpy (client:window client))
 | 
				
			||||||
 | 
									    (client:client-window client))))
 | 
				
			||||||
 | 
							      (spawn (lambda ()
 | 
				
			||||||
 | 
								       (wm-deinit-client wm client)))
 | 
				
			||||||
 | 
							      (delete-window dpy (client:window client) time))))
 | 
				
			||||||
	       (else (warn "unhandled client message " wm client msg))))
 | 
						       (else (warn "unhandled client message " wm client msg))))
 | 
				
			||||||
	   (loop))))
 | 
						   (loop))))
 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
| 
						 | 
					@ -276,7 +297,9 @@
 | 
				
			||||||
	(if (null? (wm-clients wm))
 | 
						(if (null? (wm-clients wm))
 | 
				
			||||||
	    (set-input-focus dpy (wm:window wm) (revert-to parent)
 | 
						    (set-input-focus dpy (wm:window wm) (revert-to parent)
 | 
				
			||||||
			     current-time)
 | 
								     current-time)
 | 
				
			||||||
	    (wm-select-client wm (car (wm-clients wm)) current-time)))))
 | 
						    (let ((next-client (or (last-focused-client wm data)
 | 
				
			||||||
 | 
									   (car (wm-clients wm)))))
 | 
				
			||||||
 | 
						      (wm-select-client wm next-client current-time))))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
;; ***
 | 
					;; ***
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue