Avoid using the "no window manager" code in Emacs

* exwm.el (exwm--on-ClientMessage): Handle fullscreen requests
	for frames.
	(exwm-init): Initialize workspaces after unlocking events.

	* exwm-workspace.el (exwm-workspace--init): Create frames as
	invisible, then make them visible only once their OverrideRedirect
	property has been set.

	* exwm-randr.el (exwm-randr--refresh): New frame parameter
	`exwm-geometry'.

	* exwm-layout.el (exwm-layout--set-frame-fullscreen): New
        function.

The Emacs code is buggy, see https://github.com/ch11ng/exwm/issues/39

https://github.com/ch11ng/exwm/pull/42
This commit is contained in:
Philip 2015-08-24 19:09:42 +00:00
parent 5882015eb5
commit 94bdbfc0da
4 changed files with 60 additions and 6 deletions

18
exwm.el
View file

@ -441,6 +441,20 @@
(props (list (elt data 1) (elt data 2)))
(buffer (exwm--id->buffer id))
props-new)
;; only support _NET_WM_STATE_FULLSCREEN / _NET_WM_STATE_ADD for frames
(when (and (not buffer)
(memq xcb:Atom:_NET_WM_STATE_FULLSCREEN props)
(= action xcb:ewmh:_NET_WM_STATE_ADD))
(dolist (f exwm-workspace--list)
(when (equal (frame-parameter f 'exwm-outer-id) id)
(exwm-layout--set-frame-fullscreen f)
(xcb:+request
exwm--connection
(make-instance 'xcb:ewmh:set-_NET_WM_STATE
:window id
:data (vector
xcb:Atom:_NET_WM_STATE_FULLSCREEN)))
(xcb:flush exwm--connection))))
(when buffer ;ensure it's managed
(with-current-buffer buffer
;; _NET_WM_STATE_MODAL
@ -609,14 +623,14 @@
;; (xcb:icccm:init exwm--connection)
(xcb:ewmh:init exwm--connection)
(exwm--lock)
(exwm-workspace--init)
(exwm--init-icccm-ewmh)
(exwm-layout--init)
(exwm-floating--init)
(exwm-manage--init)
(exwm-input--init)
(exwm--unlock)
;; Manage exiting windows
(exwm-workspace--init)
;; Manage existing windows
(exwm-manage--scan)
(run-hooks 'exwm-init-hook)))))