diff options
author | Philip <pipcet@gmail.com> | 2015-08-24T19·09+0000 |
---|---|---|
committer | Philip <pipcet@gmail.com> | 2015-08-24T19·12+0000 |
commit | 94bdbfc0da7c8ef14acdc8aa4e73dc1c8fee9700 (patch) | |
tree | ddfe7add7d2dee590f8d366eefbef930067c3ebd /exwm-layout.el | |
parent | 5882015eb5a21cb859794388e21d6dc023764480 (diff) |
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
Diffstat (limited to 'exwm-layout.el')
-rw-r--r-- | exwm-layout.el | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/exwm-layout.el b/exwm-layout.el index 1ffb3b93fce0..735b156e16cc 100644 --- a/exwm-layout.el +++ b/exwm-layout.el @@ -162,6 +162,34 @@ (setq exwm--fullscreen nil) (exwm-input-grab-keyboard))) +;; This function is superficially similar to `exwm-layout-set-fullscreen', but +;; they do very different things: `exwm-layout--set-frame-fullscreen' resizes a +;; frame to the actual monitor size, `exwm-layout-set-fullscreen' resizes an X +;; window to the frame size. +(defun exwm-layout--set-frame-fullscreen (frame) + "Make frame FRAME fullscreen, with regard to its XRandR output if applicable." + (let ((geometry (or (frame-parameter frame 'exwm-geometry) + (xcb:+request-unchecked+reply + exwm--connection + (make-instance 'xcb:GetGeometry + :drawable exwm--root)) + (make-instance 'xcb:RECTANGLE :x 0 :y 0 + :width (x-display-width) + :height (x-display-height)))) + (id (frame-parameter frame 'exwm-outer-id))) + (with-slots (x y width height) geometry + (xcb:+request exwm--connection + (make-instance 'xcb:ConfigureWindow + :window id + :value-mask (logior xcb:ConfigWindow:X + xcb:ConfigWindow:Y + xcb:ConfigWindow:Width + xcb:ConfigWindow:Height) + :x x :y y + :width width + :height height)) + (xcb:flush exwm--connection)))) + (defun exwm-layout--refresh () "Refresh layout." (let ((frame (selected-frame)) |