Split exwm-layout--refresh into three functions
* exwm-layout.el (exwm-layout--refresh): Split in three functions for clarity. (exwm-layout--refresh-workspace, exwm-layout--refresh-other) (exwm-layout--refresh-floating): New functions.
This commit is contained in:
		
							parent
							
								
									633065ad55
								
							
						
					
					
						commit
						f820217d00
					
				
					 1 changed files with 57 additions and 46 deletions
				
			
		| 
						 | 
					@ -261,12 +261,15 @@ selected by `other-buffer'."
 | 
				
			||||||
  ;; `window-configuration-change-hook' makes the frame selected.
 | 
					  ;; `window-configuration-change-hook' makes the frame selected.
 | 
				
			||||||
  (unless frame
 | 
					  (unless frame
 | 
				
			||||||
    (setq frame (selected-frame)))
 | 
					    (setq frame (selected-frame)))
 | 
				
			||||||
  (let (covered-buffers   ;EXWM-buffers covered by a new X window.
 | 
					 | 
				
			||||||
        vacated-windows   ;Windows previously displaying EXWM-buffers.
 | 
					 | 
				
			||||||
        windows)
 | 
					 | 
				
			||||||
  (if (not (exwm-workspace--workspace-p frame))
 | 
					  (if (not (exwm-workspace--workspace-p frame))
 | 
				
			||||||
      (if (frame-parameter frame 'exwm-outer-id)
 | 
					      (if (frame-parameter frame 'exwm-outer-id)
 | 
				
			||||||
            ;; Refresh a floating frame
 | 
					          (exwm-layout--refresh-floating frame)
 | 
				
			||||||
 | 
					        (exwm-layout--refresh-other frame))
 | 
				
			||||||
 | 
					    (exwm-layout--refresh-workspace frame)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(defun exwm-layout--refresh-floating (frame)
 | 
				
			||||||
 | 
					  "Refresh floating frame FRAME."
 | 
				
			||||||
 | 
					  (exwm--log "Refresh floating %s" frame)
 | 
				
			||||||
  (let ((window (frame-first-window frame)))
 | 
					  (let ((window (frame-first-window frame)))
 | 
				
			||||||
    (with-current-buffer (window-buffer window)
 | 
					    (with-current-buffer (window-buffer window)
 | 
				
			||||||
      (when (and (derived-mode-p 'exwm-mode)
 | 
					      (when (and (derived-mode-p 'exwm-mode)
 | 
				
			||||||
| 
						 | 
					@ -275,25 +278,33 @@ selected by `other-buffer'."
 | 
				
			||||||
        (exwm--log "Refresh floating window #x%x" exwm--id)
 | 
					        (exwm--log "Refresh floating window #x%x" exwm--id)
 | 
				
			||||||
        (if (exwm-workspace--active-p exwm--frame)
 | 
					        (if (exwm-workspace--active-p exwm--frame)
 | 
				
			||||||
            (exwm-layout--show exwm--id window)
 | 
					            (exwm-layout--show exwm--id window)
 | 
				
			||||||
                    (exwm-layout--hide exwm--id)))))
 | 
					          (exwm-layout--hide exwm--id))))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(defun exwm-layout--refresh-other (frame)
 | 
				
			||||||
 | 
					  "Refresh client or nox frame FRAME."
 | 
				
			||||||
  ;; Other frames (e.g. terminal/graphical frame of emacsclient)
 | 
					  ;; Other frames (e.g. terminal/graphical frame of emacsclient)
 | 
				
			||||||
  ;; We shall bury all `exwm-mode' buffers in this case
 | 
					  ;; We shall bury all `exwm-mode' buffers in this case
 | 
				
			||||||
          (setq windows (window-list frame 'nomini))
 | 
					  (exwm--log "Refresh other %s" frame)
 | 
				
			||||||
          (let ((exwm-layout--other-buffer-exclude-exwm-mode-buffers t))
 | 
					  (let ((windows (window-list frame 'nomini)) ;exclude minibuffer
 | 
				
			||||||
 | 
					        (exwm-layout--other-buffer-exclude-exwm-mode-buffers t))
 | 
				
			||||||
    (dolist (window windows)
 | 
					    (dolist (window windows)
 | 
				
			||||||
      (with-current-buffer (window-buffer window)
 | 
					      (with-current-buffer (window-buffer window)
 | 
				
			||||||
        (when (derived-mode-p 'exwm-mode)
 | 
					        (when (derived-mode-p 'exwm-mode)
 | 
				
			||||||
          (switch-to-prev-buffer window))))))
 | 
					          (switch-to-prev-buffer window))))))
 | 
				
			||||||
      ;; Refresh the whole workspace
 | 
					
 | 
				
			||||||
      ;; Workspaces other than the active one can also be refreshed (RandR)
 | 
					(defun exwm-layout--refresh-workspace (frame)
 | 
				
			||||||
 | 
					  "Refresh workspace frame FRAME."
 | 
				
			||||||
  (exwm--log "Refresh workspace %s" frame)
 | 
					  (exwm--log "Refresh workspace %s" frame)
 | 
				
			||||||
 | 
					  ;; Workspaces other than the active one can also be refreshed (RandR)
 | 
				
			||||||
 | 
					  (let (covered-buffers   ;EXWM-buffers covered by a new X window.
 | 
				
			||||||
 | 
					        vacated-windows)  ;Windows previously displaying EXWM-buffers.
 | 
				
			||||||
    (dolist (pair exwm--id-buffer-alist)
 | 
					    (dolist (pair exwm--id-buffer-alist)
 | 
				
			||||||
      (with-current-buffer (cdr pair)
 | 
					      (with-current-buffer (cdr pair)
 | 
				
			||||||
        (when (and (not exwm--floating-frame) ;exclude floating X windows
 | 
					        (when (and (not exwm--floating-frame) ;exclude floating X windows
 | 
				
			||||||
                   (or exwm-layout-show-all-buffers
 | 
					                   (or exwm-layout-show-all-buffers
 | 
				
			||||||
                       ;; Exclude X windows on other workspaces
 | 
					                       ;; Exclude X windows on other workspaces
 | 
				
			||||||
                       (eq frame exwm--frame)))
 | 
					                       (eq frame exwm--frame)))
 | 
				
			||||||
            (setq windows (get-buffer-window-list (current-buffer) 'nomini frame))
 | 
					          (let ((windows (get-buffer-window-list (current-buffer) 'nomini frame)))
 | 
				
			||||||
            (if (not windows)
 | 
					            (if (not windows)
 | 
				
			||||||
                (when (eq frame exwm--frame)
 | 
					                (when (eq frame exwm--frame)
 | 
				
			||||||
                  (exwm-layout--hide exwm--id))
 | 
					                  (exwm-layout--hide exwm--id))
 | 
				
			||||||
| 
						 | 
					@ -318,7 +329,7 @@ selected by `other-buffer'."
 | 
				
			||||||
                   prev-buffer
 | 
					                   prev-buffer
 | 
				
			||||||
                   (with-current-buffer prev-buffer
 | 
					                   (with-current-buffer prev-buffer
 | 
				
			||||||
                     (derived-mode-p 'exwm-mode))
 | 
					                     (derived-mode-p 'exwm-mode))
 | 
				
			||||||
                   (push prev-buffer covered-buffers))))))))
 | 
					                   (push prev-buffer covered-buffers)))))))))
 | 
				
			||||||
    ;; Set some sensible buffer to vacated windows.
 | 
					    ;; Set some sensible buffer to vacated windows.
 | 
				
			||||||
    (let ((exwm-layout--other-buffer-exclude-buffers covered-buffers))
 | 
					    (let ((exwm-layout--other-buffer-exclude-buffers covered-buffers))
 | 
				
			||||||
      (dolist (window vacated-windows)
 | 
					      (dolist (window vacated-windows)
 | 
				
			||||||
| 
						 | 
					@ -331,7 +342,7 @@ selected by `other-buffer'."
 | 
				
			||||||
                     (or exwm--floating-frame (not (eq frame exwm--frame))))
 | 
					                     (or exwm--floating-frame (not (eq frame exwm--frame))))
 | 
				
			||||||
            (switch-to-prev-buffer window)))))
 | 
					            (switch-to-prev-buffer window)))))
 | 
				
			||||||
    (exwm-layout--set-client-list-stacking)
 | 
					    (exwm-layout--set-client-list-stacking)
 | 
				
			||||||
      (xcb:flush exwm--connection))))
 | 
					    (xcb:flush exwm--connection)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(defun exwm-layout--on-minibuffer-setup ()
 | 
					(defun exwm-layout--on-minibuffer-setup ()
 | 
				
			||||||
  "Refresh layout when minibuffer grows."
 | 
					  "Refresh layout when minibuffer grows."
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue