Add support for 'managed' per-application configuration
* exwm-manage.el (exwm-manage-configurations): Add a new value type 'managed' to allow users to specify whether a certain X window should be managed or not. (exwm-manage--manage-window): Use it.
This commit is contained in:
parent
882a628daa
commit
dc3b86d1b8
1 changed files with 26 additions and 17 deletions
|
@ -70,6 +70,7 @@ You can still make the X windows floating afterwards."
|
||||||
(const :tag "Prefix keys" prefix-keys)
|
(const :tag "Prefix keys" prefix-keys)
|
||||||
(const :tag "Simulation keys" simulation-keys)
|
(const :tag "Simulation keys" simulation-keys)
|
||||||
(const :tag "Workspace" workspace)
|
(const :tag "Workspace" workspace)
|
||||||
|
(const :tag "Managed" managed)
|
||||||
;; For forward compatibility.
|
;; For forward compatibility.
|
||||||
(other))
|
(other))
|
||||||
:value-type (sexp :tag "Value" nil))))
|
:value-type (sexp :tag "Value" nil))))
|
||||||
|
@ -214,22 +215,31 @@ You can still make the X windows floating afterwards."
|
||||||
(exwm--update-hints id)
|
(exwm--update-hints id)
|
||||||
(exwm-manage--update-geometry id)
|
(exwm-manage--update-geometry id)
|
||||||
(exwm-manage--update-mwm-hints id)
|
(exwm-manage--update-mwm-hints id)
|
||||||
;; No need to manage (please check OverrideRedirect outside)
|
(setq exwm--configurations (exwm-manage--get-configurations))
|
||||||
(when (or
|
;; OverrideRedirect is not checked here.
|
||||||
(not
|
(when (and
|
||||||
(or (not exwm-window-type)
|
;; The user has specified to manage it.
|
||||||
(memq xcb:Atom:_NET_WM_WINDOW_TYPE_UTILITY exwm-window-type)
|
(not (plist-get exwm--configurations 'managed))
|
||||||
(memq xcb:Atom:_NET_WM_WINDOW_TYPE_DIALOG exwm-window-type)
|
(or
|
||||||
(memq xcb:Atom:_NET_WM_WINDOW_TYPE_NORMAL exwm-window-type)))
|
;; The user has specified not to manage it.
|
||||||
;; Check the _MOTIF_WM_HINTS property.
|
(plist-member exwm--configurations 'managed)
|
||||||
(and (not exwm--mwm-hints-decorations)
|
;; This is not a type of X window we can manage.
|
||||||
(not exwm--hints-input)
|
(and exwm-window-type
|
||||||
;; Floating windows only
|
(not (cl-intersection
|
||||||
(or exwm-transient-for exwm--fixed-size
|
exwm-window-type
|
||||||
(memq xcb:Atom:_NET_WM_WINDOW_TYPE_UTILITY
|
(list xcb:Atom:_NET_WM_WINDOW_TYPE_UTILITY
|
||||||
exwm-window-type)
|
xcb:Atom:_NET_WM_WINDOW_TYPE_DIALOG
|
||||||
(memq xcb:Atom:_NET_WM_WINDOW_TYPE_DIALOG
|
xcb:Atom:_NET_WM_WINDOW_TYPE_NORMAL))))
|
||||||
exwm-window-type))))
|
;; Check the _MOTIF_WM_HINTS property to not manage floating X
|
||||||
|
;; windows without decoration.
|
||||||
|
(and (not exwm--mwm-hints-decorations)
|
||||||
|
(not exwm--hints-input)
|
||||||
|
;; Floating windows only
|
||||||
|
(or exwm-transient-for exwm--fixed-size
|
||||||
|
(memq xcb:Atom:_NET_WM_WINDOW_TYPE_UTILITY
|
||||||
|
exwm-window-type)
|
||||||
|
(memq xcb:Atom:_NET_WM_WINDOW_TYPE_DIALOG
|
||||||
|
exwm-window-type)))))
|
||||||
(exwm--log "No need to manage #x%x" id)
|
(exwm--log "No need to manage #x%x" id)
|
||||||
;; Update struts.
|
;; Update struts.
|
||||||
(when (memq xcb:Atom:_NET_WM_WINDOW_TYPE_DOCK exwm-window-type)
|
(when (memq xcb:Atom:_NET_WM_WINDOW_TYPE_DOCK exwm-window-type)
|
||||||
|
@ -277,7 +287,6 @@ You can still make the X windows floating afterwards."
|
||||||
(let ((kill-buffer-query-functions nil))
|
(let ((kill-buffer-query-functions nil))
|
||||||
(kill-buffer (current-buffer)))
|
(kill-buffer (current-buffer)))
|
||||||
(throw 'return 'ignored))
|
(throw 'return 'ignored))
|
||||||
(setq exwm--configurations (exwm-manage--get-configurations))
|
|
||||||
(let ((index (plist-get exwm--configurations 'workspace)))
|
(let ((index (plist-get exwm--configurations 'workspace)))
|
||||||
(when (and index (< index (length exwm-workspace--list)))
|
(when (and index (< index (length exwm-workspace--list)))
|
||||||
(setq exwm--frame (elt exwm-workspace--list index))))
|
(setq exwm--frame (elt exwm-workspace--list index))))
|
||||||
|
|
Loading…
Reference in a new issue