Merge branch 'fjl-fix-resize-minibuffer'

This commit is contained in:
Chris Feng 2016-02-07 10:18:45 +08:00
commit e9e476c4de
4 changed files with 17 additions and 10 deletions

View file

@ -111,7 +111,7 @@ It's updated in several occasions, and only used by `exwm-input--set-focus'.")
(exwm-input--set-focus exwm--id)
;; Adjust stacking orders
(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.
(xcb:+request exwm--connection
(make-instance 'xcb:ConfigureWindow

View file

@ -203,8 +203,9 @@
(id (frame-parameter frame 'exwm-outer-id))
(workspace (frame-parameter frame 'exwm-workspace)))
(with-slots (x y width height) geometry
(when (eq frame exwm-workspace--current)
(exwm-workspace--resize-minibuffer width height))
(when (and (eq frame exwm-workspace--current)
(exwm-workspace--minibuffer-own-frame-p))
(exwm-workspace--resize-minibuffer-frame width height))
(exwm-layout--resize-container id workspace x y width height)
(xcb:flush exwm--connection))))
@ -395,7 +396,7 @@ See also `exwm-layout-enlarge-window'."
"Initialize layout module."
;; Auto refresh layout
(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
(add-hook 'minibuffer-setup-hook #'exwm-layout--on-minibuffer-setup t)
(run-with-idle-timer 0 t #'exwm-layout--on-echo-area-change t)

View file

@ -103,8 +103,9 @@
(frame-parameter frame
'exwm-workspace)
x y width height)
(when (eq frame exwm-workspace--current)
(exwm-workspace--resize-minibuffer width height))
(when (and (eq frame exwm-workspace--current)
(exwm-workspace--minibuffer-own-frame-p))
(exwm-workspace--resize-minibuffer-frame width height))
(setq workareas
(nconc workareas (list x y width (- height
workarea-offset)))

View file

@ -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
"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.
If WIDTH and HEIGHT of the workspace is not specified, they're get from the
workspace frame."
(cl-assert (exwm-workspace--minibuffer-own-frame-p))
(let ((y (if (eq exwm-workspace-minibuffer-position 'top)
0
(- (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
(when (active-minibuffer-window)
(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)
;; Resize/reposition the minibuffer frame
(xcb:+request exwm--connection
@ -178,7 +183,7 @@ The optional FORCE option is for internal use only."
'exwm-container)
:parent (frame-parameter frame 'exwm-workspace)
:x 0 :y 0))
(exwm-workspace--resize-minibuffer))
(exwm-workspace--resize-minibuffer-frame))
;; Hide windows in other workspaces by preprending a space
(unless exwm-workspace-show-all-buffers
(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))
(x (yes-or-no-p (format "[EXWM] %d window%s currently alive. %s"
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.
(progn
(setq exwm-workspace--list (frame-list))