mirror of
https://github.com/emacs-exwm/exwm.git
synced 2024-11-23 21:17:59 +01:00
Resize minibuffer only when it's in its own frame
0e4055d339
introduced a few calls to exwm-workspace--resize-minibuffer
in various places. This function only works when the minibuffer is
displayed in its own frame but was called unconditionally in some cases.
Fix it by wrapping all calls in an appropriate conditional and add an
assertion. Also rename the function so it is clearer that it resizes a
frame, which might prevent calling it unconditionally in the future.
This commit is contained in:
parent
97daba20ad
commit
0006523474
4 changed files with 17 additions and 10 deletions
|
@ -111,7 +111,7 @@ It's updated in several occasions, and only used by `exwm-input--set-focus'.")
|
||||||
(exwm-input--set-focus exwm--id)
|
(exwm-input--set-focus exwm--id)
|
||||||
;; Adjust stacking orders
|
;; Adjust stacking orders
|
||||||
(when exwm--floating-frame
|
(when exwm--floating-frame
|
||||||
(if (memq exwm-workspace-minibuffer-position '(top bottom))
|
(if (exwm-workspace--minibuffer-own-frame-p)
|
||||||
;; Put this floating X window just below the minibuffer.
|
;; Put this floating X window just below the minibuffer.
|
||||||
(xcb:+request exwm--connection
|
(xcb:+request exwm--connection
|
||||||
(make-instance 'xcb:ConfigureWindow
|
(make-instance 'xcb:ConfigureWindow
|
||||||
|
|
|
@ -203,8 +203,9 @@
|
||||||
(id (frame-parameter frame 'exwm-outer-id))
|
(id (frame-parameter frame 'exwm-outer-id))
|
||||||
(workspace (frame-parameter frame 'exwm-workspace)))
|
(workspace (frame-parameter frame 'exwm-workspace)))
|
||||||
(with-slots (x y width height) geometry
|
(with-slots (x y width height) geometry
|
||||||
(when (eq frame exwm-workspace--current)
|
(when (and (eq frame exwm-workspace--current)
|
||||||
(exwm-workspace--resize-minibuffer width height))
|
(exwm-workspace--minibuffer-own-frame-p))
|
||||||
|
(exwm-workspace--resize-minibuffer-frame width height))
|
||||||
(exwm-layout--resize-container id workspace x y width height)
|
(exwm-layout--resize-container id workspace x y width height)
|
||||||
(xcb:flush exwm--connection))))
|
(xcb:flush exwm--connection))))
|
||||||
|
|
||||||
|
@ -395,7 +396,7 @@ See also `exwm-layout-enlarge-window'."
|
||||||
"Initialize layout module."
|
"Initialize layout module."
|
||||||
;; Auto refresh layout
|
;; Auto refresh layout
|
||||||
(add-hook 'window-configuration-change-hook #'exwm-layout--refresh)
|
(add-hook 'window-configuration-change-hook #'exwm-layout--refresh)
|
||||||
(unless (memq exwm-workspace-minibuffer-position '(top bottom))
|
(unless (exwm-workspace--minibuffer-own-frame-p)
|
||||||
;; Refresh when minibuffer grows
|
;; Refresh when minibuffer grows
|
||||||
(add-hook 'minibuffer-setup-hook #'exwm-layout--on-minibuffer-setup t)
|
(add-hook 'minibuffer-setup-hook #'exwm-layout--on-minibuffer-setup t)
|
||||||
(run-with-idle-timer 0 t #'exwm-layout--on-echo-area-change t)
|
(run-with-idle-timer 0 t #'exwm-layout--on-echo-area-change t)
|
||||||
|
|
|
@ -103,8 +103,9 @@
|
||||||
(frame-parameter frame
|
(frame-parameter frame
|
||||||
'exwm-workspace)
|
'exwm-workspace)
|
||||||
x y width height)
|
x y width height)
|
||||||
(when (eq frame exwm-workspace--current)
|
(when (and (eq frame exwm-workspace--current)
|
||||||
(exwm-workspace--resize-minibuffer width height))
|
(exwm-workspace--minibuffer-own-frame-p))
|
||||||
|
(exwm-workspace--resize-minibuffer-frame width height))
|
||||||
(setq workareas
|
(setq workareas
|
||||||
(nconc workareas (list x y width (- height
|
(nconc workareas (list x y width (- height
|
||||||
workarea-offset)))
|
workarea-offset)))
|
||||||
|
|
|
@ -111,11 +111,16 @@ Value nil means to use the default position which is fixed at bottom, while
|
||||||
(defvar exwm-workspace--display-echo-area-timer nil
|
(defvar exwm-workspace--display-echo-area-timer nil
|
||||||
"Timer for auto-hiding echo area.")
|
"Timer for auto-hiding echo area.")
|
||||||
|
|
||||||
(defun exwm-workspace--resize-minibuffer (&optional width height)
|
(defun exwm-workspace--minibuffer-own-frame-p ()
|
||||||
|
"Reports whether the minibuffer is displayed in its own frame."
|
||||||
|
(memq exwm-workspace-minibuffer-position '(top bottom)))
|
||||||
|
|
||||||
|
(defun exwm-workspace--resize-minibuffer-frame (&optional width height)
|
||||||
"Resize minibuffer (and its container) to fit the size of workspace.
|
"Resize minibuffer (and its container) to fit the size of workspace.
|
||||||
|
|
||||||
If WIDTH and HEIGHT of the workspace is not specified, they're get from the
|
If WIDTH and HEIGHT of the workspace is not specified, they're get from the
|
||||||
workspace frame."
|
workspace frame."
|
||||||
|
(cl-assert (exwm-workspace--minibuffer-own-frame-p))
|
||||||
(let ((y (if (eq exwm-workspace-minibuffer-position 'top)
|
(let ((y (if (eq exwm-workspace-minibuffer-position 'top)
|
||||||
0
|
0
|
||||||
(- (or height (frame-pixel-height exwm-workspace--current))
|
(- (or height (frame-pixel-height exwm-workspace--current))
|
||||||
|
@ -168,7 +173,7 @@ The optional FORCE option is for internal use only."
|
||||||
;; Close the (possible) active minibuffer
|
;; Close the (possible) active minibuffer
|
||||||
(when (active-minibuffer-window)
|
(when (active-minibuffer-window)
|
||||||
(run-with-idle-timer 0 nil (lambda () (abort-recursive-edit))))
|
(run-with-idle-timer 0 nil (lambda () (abort-recursive-edit))))
|
||||||
(if (not (memq exwm-workspace-minibuffer-position '(top bottom)))
|
(if (not (exwm-workspace--minibuffer-own-frame-p))
|
||||||
(setq default-minibuffer-frame frame)
|
(setq default-minibuffer-frame frame)
|
||||||
;; Resize/reposition the minibuffer frame
|
;; Resize/reposition the minibuffer frame
|
||||||
(xcb:+request exwm--connection
|
(xcb:+request exwm--connection
|
||||||
|
@ -178,7 +183,7 @@ The optional FORCE option is for internal use only."
|
||||||
'exwm-container)
|
'exwm-container)
|
||||||
:parent (frame-parameter frame 'exwm-workspace)
|
:parent (frame-parameter frame 'exwm-workspace)
|
||||||
:x 0 :y 0))
|
:x 0 :y 0))
|
||||||
(exwm-workspace--resize-minibuffer))
|
(exwm-workspace--resize-minibuffer-frame))
|
||||||
;; Hide windows in other workspaces by preprending a space
|
;; Hide windows in other workspaces by preprending a space
|
||||||
(unless exwm-workspace-show-all-buffers
|
(unless exwm-workspace-show-all-buffers
|
||||||
(dolist (i exwm--id-buffer-alist)
|
(dolist (i exwm--id-buffer-alist)
|
||||||
|
@ -459,7 +464,7 @@ This functions is modified from `display-buffer-reuse-window' and
|
||||||
(0 (y-or-n-p prompt))
|
(0 (y-or-n-p prompt))
|
||||||
(x (yes-or-no-p (format "[EXWM] %d window%s currently alive. %s"
|
(x (yes-or-no-p (format "[EXWM] %d window%s currently alive. %s"
|
||||||
x (if (= x 1) "" "s") prompt))))))
|
x (if (= x 1) "" "s") prompt))))))
|
||||||
(if (not (memq exwm-workspace-minibuffer-position '(top bottom)))
|
(if (not (exwm-workspace--minibuffer-own-frame-p))
|
||||||
;; Initialize workspaces with minibuffers.
|
;; Initialize workspaces with minibuffers.
|
||||||
(progn
|
(progn
|
||||||
(setq exwm-workspace--list (frame-list))
|
(setq exwm-workspace--list (frame-list))
|
||||||
|
|
Loading…
Reference in a new issue