mirror of
https://github.com/emacs-exwm/exwm.git
synced 2024-11-27 14:57:59 +01:00
Manage a certain type of undecorated X windows
* exwm-core.el (exwm--mwm-hints): Removed. (exwm--mwm-hints-decorations): New buffer-local variable for indicating whether the X window should have decorations. * exwm-floating.el (exwm-floating--set-floating): Hide the mode-line of undecorated floating X windows by default. * exwm-manage.el (exwm-manage--update-mwm-hints): Set exwm--mwm-hints-decorations; (exwm-manage--manage-window): Manage an undecorated X window if its input model is not 'No Input' or 'Globally Active'.
This commit is contained in:
parent
1b2ae3749e
commit
3dba5f156f
3 changed files with 22 additions and 9 deletions
|
@ -116,7 +116,7 @@
|
|||
(defvar-local exwm--hints-input nil)
|
||||
(defvar-local exwm--hints-urgency nil)
|
||||
;; _MOTIF_WM_HINTS
|
||||
(defvar-local exwm--mwm-hints nil)
|
||||
(defvar-local exwm--mwm-hints-decorations t)
|
||||
|
||||
(defvar exwm-mode-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
|
|
|
@ -159,6 +159,12 @@
|
|||
(- (elt edges 2) (elt edges 0)))))
|
||||
(frame-height (+ height (- (frame-pixel-height frame)
|
||||
(- (elt edges 3) (elt edges 1))))))
|
||||
;; Check `exwm--mwm-hints-decorations'.
|
||||
(unless exwm--mwm-hints-decorations
|
||||
(setq frame-height (- frame-height (window-mode-line-height
|
||||
(frame-root-window frame)))
|
||||
exwm--mode-line-format mode-line-format
|
||||
mode-line-format nil))
|
||||
(set-frame-size frame frame-width frame-height t)
|
||||
;; Create the frame container as the parent of the frame and
|
||||
;; a child of the X window container.
|
||||
|
|
|
@ -48,7 +48,7 @@ corresponding buffer.")
|
|||
(defun exwm-manage--update-mwm-hints (id &optional force)
|
||||
"Update _MOTIF_WM_HINTS."
|
||||
(with-current-buffer (exwm--id->buffer id)
|
||||
(unless (and exwm--mwm-hints (not force))
|
||||
(unless (and (not exwm--mwm-hints-decorations) (not force))
|
||||
(let ((reply (xcb:+request-unchecked+reply exwm--connection
|
||||
(make-instance 'xcb:icccm:-GetProperty
|
||||
:window id
|
||||
|
@ -56,7 +56,17 @@ corresponding buffer.")
|
|||
:type exwm-manage--_MOTIF_WM_HINTS
|
||||
:long-length 5))))
|
||||
(when reply
|
||||
(setq exwm--mwm-hints (append (slot-value reply 'value) nil)))))))
|
||||
;; Check MotifWmHints.decorations.
|
||||
(with-slots (value) reply
|
||||
(setq value (append value nil))
|
||||
(when (and value
|
||||
;; See <Xm/MwmUtil.h> for fields definitions.
|
||||
(/= 0 (logand
|
||||
(elt value 0) ;MotifWmHints.flags
|
||||
2)) ;MWM_HINTS_DECORATIONS
|
||||
(= 0
|
||||
(elt value 2))) ;MotifWmHints.decorations
|
||||
(setq exwm--mwm-hints-decorations nil))))))))
|
||||
|
||||
(defvar exwm-workspace--current)
|
||||
(defvar exwm-workspace--switch-history-outdated)
|
||||
|
@ -90,6 +100,7 @@ corresponding buffer.")
|
|||
(exwm--update-class id)
|
||||
(exwm--update-transient-for id)
|
||||
(exwm--update-normal-hints id)
|
||||
(exwm--update-hints id)
|
||||
(exwm-manage--update-geometry id)
|
||||
(exwm-manage--update-mwm-hints id)
|
||||
;; No need to manage (please check OverrideRedirect outside)
|
||||
|
@ -100,11 +111,8 @@ corresponding buffer.")
|
|||
(memq xcb:Atom:_NET_WM_WINDOW_TYPE_DIALOG exwm-window-type)
|
||||
(memq xcb:Atom:_NET_WM_WINDOW_TYPE_NORMAL exwm-window-type)))
|
||||
;; Check the _MOTIF_WM_HINTS property.
|
||||
(and exwm--mwm-hints
|
||||
;; See <Xm/MwmUtil.h> for fields definitions.
|
||||
(/= 0 (logand (elt exwm--mwm-hints 0) ;MotifWmHints.flags
|
||||
2)) ;MWM_HINTS_DECORATIONS
|
||||
(= 0 (elt exwm--mwm-hints 2)) ;MotifWmHints.decorations
|
||||
(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
|
||||
|
@ -202,7 +210,6 @@ corresponding buffer.")
|
|||
:data (vconcat (mapcar #'car exwm--id-buffer-alist))))
|
||||
(xcb:flush exwm--connection)
|
||||
(exwm--update-title id)
|
||||
(exwm--update-hints id)
|
||||
(exwm--update-protocols id)
|
||||
(exwm--update-state id)
|
||||
(if (or exwm-transient-for exwm--fixed-size
|
||||
|
|
Loading…
Reference in a new issue