diff options
author | Chris Feng <chris.w.feng@gmail.com> | 2016-02-06T04·59+0800 |
---|---|---|
committer | Chris Feng <chris.w.feng@gmail.com> | 2016-02-06T04·59+0800 |
commit | 0e4055d3392537cd4138181b9c615fa03053add8 (patch) | |
tree | cf9642d140b82a8c8d401dd01e26145fd7f060ea /exwm-floating.el | |
parent | 2d42fee327f92b01444718cfc83ce5f00716fa33 (diff) |
Add auto-hiding minibuffer support
* exwm-floating.el (exwm-floating--set-floating): Take auto-hiding minibuffer into account when calculating available height. (exwm-floating--unset-floating): Restack the container to avoid further restacking. * exwm-input.el (exwm-input--update-focus): Use more accurate restacking. (exwm-input--on-minibuffer-setup): Replaced by `exwm-layout--on-minibuffer-setup' and `exwm-workspace--on-minibuffer-setup'. (exwm-input-command-whitelist, exwm-input--during-command) (exwm-input--on-KeyPress-line-mode): The functionality of `exwm-input-command-whitelist' is replaced by `exwm-input--during-command', which can automatically tell whether functions like `read-event' are being called. (exwm-input--init): Add/remove corresponding hooks. * exwm-layout.el (exwm-layout--on-minibuffer-setup): Also set input focus. (exwm-layout--on-echo-area-change): New function for refreshing layout when the size of echo area changes. (exwm-layout--init): Track size changes for fixed minibuffer and echo area. * exwm-manage.el (exwm-manage--on-ConfigureRequest): Never grant restacking requests initiated by other clients. * exwm-workspace.el (exwm-workspace--minibuffer): New variable for the auto-hiding minibuffer. (exwm-workspace-minibuffer-position): For setting the position of the auto-hiding minibuffer. (exwm-workspace-display-echo-area-timeout): Seconds before echo area auto-hides. (exwm-workspace--display-echo-area-timer): The corresponding timer. (exwm-workspace-switch): Configure the auto-hiding minibuffer when switching workspace. (exwm-workspace--update-minibuffer): New function for adjusting the height of the auto-hiding minibuffer. (exwm-workspace--on-ConfigureNotify): New function for configuring the container of the auto-hiding minibuffer. (exwm-workspace--display-buffer): New function for forcing `minibuffer-completion-help' to use the workspace frame. (exwm-workspace--show-minibuffer, exwm-workspace--hide-minibuffer): New functions for showing/hiding the auto-hiding minibuffer (container). (exwm-workspace--on-minibuffer-setup, exwm-workspace--on-minibuffer-exit): New functions called when the auto-hiding minibuffer entered/exists. (exwm-workspace--on-echo-area-dirty, exwm-workspace--on-echo-area-clear): New functions when the auto-hiding echo area is ready to show/hide. (exwm-workspace--init): Set up the auto-hiding minibuffer and workspace frames. Track sizes changes for auto-hiding minibuffer and echo area. No need to set OverrideRedirect on workspace frames. * exwm.el (exwm--init-icccm-ewmh): Correct the value of _NET_WORKAREA.
Diffstat (limited to 'exwm-floating.el')
-rw-r--r-- | exwm-floating.el | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/exwm-floating.el b/exwm-floating.el index 88fa2077e733..ff584c03eeb1 100644 --- a/exwm-floating.el +++ b/exwm-floating.el @@ -106,8 +106,10 @@ ;; FIXME: check normal hints restrictions (let* ((display-width (frame-pixel-width original-frame)) (display-height (- (frame-pixel-height original-frame) - (window-pixel-height (minibuffer-window - original-frame)) + (if exwm-workspace-minibuffer-position + 0 + (window-pixel-height (minibuffer-window + original-frame))) (* 2 (window-mode-line-height)) (window-header-line-height window) (* 2 exwm-floating-border-width))) @@ -180,12 +182,22 @@ (interactive) (let ((buffer (exwm--id->buffer id))) (with-current-buffer buffer + ;; Reparent the container to the workspace (xcb:+request exwm--connection (make-instance 'xcb:ReparentWindow :window exwm--container :parent (frame-parameter exwm-workspace--current 'exwm-workspace) - :x 0 :y 0))) ;temporary position + :x 0 :y 0)) ;temporary position + ;; Put the container just above the Emacs frame + (xcb:+request exwm--connection + (make-instance 'xcb:ConfigureWindow + :window exwm--container + :value-mask (logior xcb:ConfigWindow:Sibling + xcb:ConfigWindow:StackMode) + :sibling (frame-parameter exwm-workspace--current + 'exwm-outer-id) + :stack-mode xcb:StackMode:Above))) (xcb:flush exwm--connection) (with-current-buffer buffer (when exwm--floating-frame ;from floating to non-floating |