Fix emacsclient related issues
* exwm-systemtray.el (exwm-systemtray-height): The value is not available when emacsclient has just loaded the library (and it crashes emacsclient). * exwm-workspace.el (exwm-workspace--init): Set `default-minibuffer-frame' later to prevent it from being modified when using emacsclient. * exwm-floating.el: * exwm-randr.el: * exwm-systemtray.el: * exwm-workspace.el: * exwm.el: Use `exwm-workspace--minibuffer-own-frame-p' instead of the raw variable.
This commit is contained in:
		
							parent
							
								
									7116b01b0c
								
							
						
					
					
						commit
						55cec760ca
					
				
					 5 changed files with 15 additions and 16 deletions
				
			
		| 
						 | 
				
			
			@ -53,7 +53,6 @@
 | 
			
		|||
(defvar exwm-workspace--list)
 | 
			
		||||
(defvar exwm-workspace-current-index)
 | 
			
		||||
(defvar exwm-workspace--switch-history-outdated)
 | 
			
		||||
(defvar exwm-workspace-minibuffer-position)
 | 
			
		||||
 | 
			
		||||
(declare-function exwm-layout--refresh "exwm-layout.el")
 | 
			
		||||
(declare-function exwm-layout--show "exwm-layout.el")
 | 
			
		||||
| 
						 | 
				
			
			@ -104,7 +103,7 @@
 | 
			
		|||
    ;; FIXME: check normal hints restrictions
 | 
			
		||||
    (let* ((display-width (frame-pixel-width original-frame))
 | 
			
		||||
           (display-height (- (frame-pixel-height original-frame)
 | 
			
		||||
                              (if exwm-workspace-minibuffer-position
 | 
			
		||||
                              (if (exwm-workspace--minibuffer-own-frame-p)
 | 
			
		||||
                                  0
 | 
			
		||||
                                (window-pixel-height (minibuffer-window
 | 
			
		||||
                                                      original-frame)))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -54,7 +54,6 @@
 | 
			
		|||
(defvar exwm-randr-refresh-hook nil
 | 
			
		||||
  "Normal hook run when the RandR module just refreshed.")
 | 
			
		||||
 | 
			
		||||
(defvar exwm-workspace-minibuffer-position)
 | 
			
		||||
(defvar exwm-layout--fullscreen-frame-count)
 | 
			
		||||
(defvar exwm-workspace-number)
 | 
			
		||||
(defvar exwm-workspace--list)
 | 
			
		||||
| 
						 | 
				
			
			@ -94,7 +93,7 @@
 | 
			
		|||
                (setq default-geometry geometry)))))))
 | 
			
		||||
    (exwm--log "(randr) outputs: %s" output-plist)
 | 
			
		||||
    (when output-plist
 | 
			
		||||
      (setq workarea-offset (if exwm-workspace-minibuffer-position
 | 
			
		||||
      (setq workarea-offset (if (exwm-workspace--minibuffer-own-frame-p)
 | 
			
		||||
                                0
 | 
			
		||||
                              (window-pixel-height (minibuffer-window))))
 | 
			
		||||
      (setq exwm-layout--fullscreen-frame-count 0)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,9 +43,7 @@
 | 
			
		|||
;; GTK icons require at least 16 pixels to show normally.
 | 
			
		||||
(defconst exwm-systemtray--icon-min-size 16 "Minimum icon size.")
 | 
			
		||||
 | 
			
		||||
(defvar exwm-systemtray-height (max exwm-systemtray--icon-min-size
 | 
			
		||||
                                    (line-pixel-height))
 | 
			
		||||
  "System tray height.
 | 
			
		||||
(defvar exwm-systemtray-height nil "System tray height.
 | 
			
		||||
 | 
			
		||||
You shall use the default value if using auto-hide minibuffer.")
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -258,12 +256,11 @@ You shall use the default value if using auto-hide minibuffer.")
 | 
			
		|||
              (t
 | 
			
		||||
               (exwm--log "(System Tray) Unknown opcode message: %s" obj)))))))
 | 
			
		||||
 | 
			
		||||
(defvar exwm-workspace-minibuffer-position)
 | 
			
		||||
(defvar exwm-workspace--current)
 | 
			
		||||
 | 
			
		||||
(defun exwm-systemtray--on-workspace-switch ()
 | 
			
		||||
  "Reparent/Refresh the system tray in `exwm-workspace-switch-hook'."
 | 
			
		||||
  (unless exwm-workspace-minibuffer-position
 | 
			
		||||
  (unless (exwm-workspace--minibuffer-own-frame-p)
 | 
			
		||||
    (xcb:+request exwm-systemtray--connection
 | 
			
		||||
        (make-instance 'xcb:ReparentWindow
 | 
			
		||||
                       :window exwm-systemtray--embedder
 | 
			
		||||
| 
						 | 
				
			
			@ -277,7 +274,7 @@ You shall use the default value if using auto-hide minibuffer.")
 | 
			
		|||
 | 
			
		||||
(defun exwm-systemtray--on-randr-refresh ()
 | 
			
		||||
  "Reposition/Refresh the system tray in `exwm-randr-refresh-hook'."
 | 
			
		||||
  (unless exwm-workspace-minibuffer-position
 | 
			
		||||
  (unless (exwm-workspace--minibuffer-own-frame-p)
 | 
			
		||||
    (xcb:+request exwm-systemtray--connection
 | 
			
		||||
        (make-instance 'xcb:ConfigureWindow
 | 
			
		||||
                       :window exwm-systemtray--embedder
 | 
			
		||||
| 
						 | 
				
			
			@ -295,6 +292,9 @@ You shall use the default value if using auto-hide minibuffer.")
 | 
			
		|||
  (cl-assert (not exwm-systemtray--list))
 | 
			
		||||
  (cl-assert (not exwm-systemtray--selection-owner-window))
 | 
			
		||||
  (cl-assert (not exwm-systemtray--embedder))
 | 
			
		||||
  (unless exwm-systemtray-height
 | 
			
		||||
    (setq exwm-systemtray-height (max exwm-systemtray--icon-min-size
 | 
			
		||||
                                      (line-pixel-height))))
 | 
			
		||||
  ;; Create a new connection.
 | 
			
		||||
  (setq exwm-systemtray--connection (xcb:connect-to-socket))
 | 
			
		||||
  (set-process-query-on-exit-flag (slot-value exwm-systemtray--connection
 | 
			
		||||
| 
						 | 
				
			
			@ -345,7 +345,7 @@ You shall use the default value if using auto-hide minibuffer.")
 | 
			
		|||
                       :border-width 0 :class xcb:WindowClass:CopyFromParent
 | 
			
		||||
                       :visual 0 :value-mask xcb:CW:EventMask
 | 
			
		||||
                       :event-mask xcb:EventMask:SubstructureNotify))
 | 
			
		||||
    (if exwm-workspace-minibuffer-position
 | 
			
		||||
    (if (exwm-workspace--minibuffer-own-frame-p)
 | 
			
		||||
        (setq parent (frame-parameter exwm-workspace--minibuffer
 | 
			
		||||
                                      'exwm-container)
 | 
			
		||||
              ;; Vertically centered.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -274,7 +274,7 @@ The optional FORCE option is for internal use only."
 | 
			
		|||
                                 (frame-parameter frame 'exwm-workspace)
 | 
			
		||||
                                 :x x :y y))
 | 
			
		||||
              (xcb:flush exwm--connection)
 | 
			
		||||
              (unless exwm-workspace-minibuffer-position
 | 
			
		||||
              (unless (exwm-workspace--minibuffer-own-frame-p)
 | 
			
		||||
                ;; The frame needs to be recreated since it won't use the
 | 
			
		||||
                ;; minibuffer on the new workspace.
 | 
			
		||||
                (let* ((old-frame exwm--floating-frame)
 | 
			
		||||
| 
						 | 
				
			
			@ -567,7 +567,7 @@ This functions is modified from `display-buffer-reuse-window' and
 | 
			
		|||
      (xcb:+request exwm--connection
 | 
			
		||||
          (make-instance 'xcb:MapWindow :window (car i))))
 | 
			
		||||
    ;; Reparent out the minibuffer frame.
 | 
			
		||||
    (when exwm-workspace-minibuffer-position
 | 
			
		||||
    (when (exwm-workspace--minibuffer-own-frame-p)
 | 
			
		||||
      (xcb:+request exwm--connection
 | 
			
		||||
          (make-instance 'xcb:ReparentWindow
 | 
			
		||||
                         :window (frame-parameter exwm-workspace--minibuffer
 | 
			
		||||
| 
						 | 
				
			
			@ -614,13 +614,14 @@ This functions is modified from `display-buffer-reuse-window' and
 | 
			
		|||
      (setq exwm-workspace--minibuffer
 | 
			
		||||
            (make-frame '((window-system . x) (minibuffer . only)
 | 
			
		||||
                          (left . 10000) (right . 10000)
 | 
			
		||||
                          (width . 0) (height . 0)))
 | 
			
		||||
            default-minibuffer-frame exwm-workspace--minibuffer)
 | 
			
		||||
                          (width . 0) (height . 0))))
 | 
			
		||||
      ;; Remove/hide existing frames.
 | 
			
		||||
      (dolist (f old-frames)
 | 
			
		||||
        (if (frame-parameter f 'client)
 | 
			
		||||
            (make-frame-invisible f)
 | 
			
		||||
          (delete-frame f))))
 | 
			
		||||
    ;; This is the only usable minibuffer frame.
 | 
			
		||||
    (setq default-minibuffer-frame exwm-workspace--minibuffer)
 | 
			
		||||
    (let ((outer-id (string-to-number
 | 
			
		||||
                     (frame-parameter exwm-workspace--minibuffer
 | 
			
		||||
                                      'outer-window-id)))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								exwm.el
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								exwm.el
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -462,7 +462,7 @@
 | 
			
		|||
  (let* ((workareas
 | 
			
		||||
          (vector 0 0 (x-display-pixel-width)
 | 
			
		||||
                  (- (x-display-pixel-height)
 | 
			
		||||
                     (if exwm-workspace-minibuffer-position
 | 
			
		||||
                     (if (exwm-workspace--minibuffer-own-frame-p)
 | 
			
		||||
                         0
 | 
			
		||||
                       (window-pixel-height (minibuffer-window))))))
 | 
			
		||||
         (workareas (mapconcat (lambda (_) workareas)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue