Add multi-dock support and fix fullscreen issues with dock
* exwm.el (exwm--update-strut-legacy, exwm--update-strut-partial) (exwm--update-strut): Rename (strut => struts). * exwm-manage.el (exwm-manage--manage-window): Listen for UnmapNotify/DestroyNotify events of docks to stop tracking them. (exwm-manage--unmanage-window): Remove dock from tracking list when it's unmapped/destroyed. * exwm-workspace.el (exwm-workspace--id-struts-alist): New variable for tracking docks. (exwm-workspace--struts): Now it stores merged struts. (exwm-workspace--update-struts): New function for doing the 'merge'. * exwm.el (exwm--update-struts-legacy, exwm--update-struts-partial): Now update struts for multiple docks. * exwm-layout.el (exwm-layout-set-fullscreen) (exwm-layout-unset-fullscreen): * exwm-manage.el (exwm-manage--unmanage-window): Fix fullscreen mode with dock. * exwm-workspace.el (exwm-workspace--set-fullscreen): Add optional arguments for ignoring struts / resizing container only. (exwm-workspace-switch): Restack workspace/docks appropriately.
This commit is contained in:
parent
0b8a373e4f
commit
7f12d9fc7a
5 changed files with 149 additions and 65 deletions
|
|
@ -155,6 +155,9 @@
|
|||
(defvar exwm-workspace--current)
|
||||
(defvar exwm-workspace--list)
|
||||
|
||||
(declare-function exwm-workspace--set-fullscreen "exwm-workspace.el"
|
||||
(frame &optional no-struts container-only))
|
||||
|
||||
;;;###autoload
|
||||
(defun exwm-layout-set-fullscreen (&optional id)
|
||||
"Make window ID fullscreen."
|
||||
|
|
@ -169,9 +172,25 @@
|
|||
:drawable exwm--container))))
|
||||
(setq exwm--floating-frame-position
|
||||
(vector (slot-value geometry 'x) (slot-value geometry 'y)))))
|
||||
(exwm-layout--resize-container exwm--id exwm--container 0 0
|
||||
;; Expand the workspace frame & its container to fill the whole screen.
|
||||
(exwm-workspace--set-fullscreen exwm--frame t t)
|
||||
;; Raise the workspace container (in case there are docks).
|
||||
(xcb:+request exwm--connection
|
||||
(make-instance 'xcb:ConfigureWindow
|
||||
:window (frame-parameter exwm--frame 'exwm-workspace)
|
||||
:value-mask xcb:ConfigWindow:StackMode
|
||||
:stack-mode xcb:StackMode:Above))
|
||||
;; Expand the X window and its container to fill the whole screen.
|
||||
;; Rationale: Floating X windows may not be positioned at (0, 0)
|
||||
;; due to the extra border.
|
||||
(exwm-layout--resize-container nil exwm--container 0 0
|
||||
(exwm-workspace--current-width)
|
||||
(exwm-workspace--current-height))
|
||||
(exwm-workspace--current-height)
|
||||
t)
|
||||
(exwm-layout--resize-container nil exwm--id 0 0
|
||||
(exwm-workspace--current-width)
|
||||
(exwm-workspace--current-height)
|
||||
t)
|
||||
;; Raise the X window.
|
||||
(xcb:+request exwm--connection
|
||||
(make-instance 'xcb:ConfigureWindow
|
||||
|
|
@ -193,6 +212,8 @@
|
|||
(with-current-buffer (if id (exwm--id->buffer id) (window-buffer))
|
||||
(unless exwm--fullscreen
|
||||
(user-error "Not in full-screen mode."))
|
||||
;; Restore the size of this workspace.
|
||||
(exwm-workspace--set-fullscreen exwm--frame)
|
||||
(if exwm--floating-frame
|
||||
;; Restore the floating frame.
|
||||
(xcb:+request exwm--connection
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue