[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/exwm 874c383 43/64: Merge pull request #42 from pipcet/
From: |
Chris Feng |
Subject: |
[elpa] externals/exwm 874c383 43/64: Merge pull request #42 from pipcet/ewmh-fullscreen |
Date: |
Thu, 17 Sep 2015 23:18:06 +0000 |
branch: externals/exwm
commit 874c383672e42cc642aca8b470afe394b39a1965
Merge: 5210e13 94bdbfc
Author: Chris Feng <address@hidden>
Commit: Chris Feng <address@hidden>
Merge pull request #42 from pipcet/ewmh-fullscreen
Avoid using the "no window manager" code in Emacs
---
exwm-layout.el | 28 ++++++++++++++++++++++++++++
exwm-randr.el | 6 ++++++
exwm-workspace.el | 14 ++++++++++----
exwm.el | 18 ++++++++++++++++--
4 files changed, 60 insertions(+), 6 deletions(-)
diff --git a/exwm-layout.el b/exwm-layout.el
index 1ffb3b9..735b156 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))
diff --git a/exwm-randr.el b/exwm-randr.el
index cd40fb4..6bddb00 100644
--- a/exwm-randr.el
+++ b/exwm-randr.el
@@ -85,6 +85,12 @@
(setq geometry default-geometry
output nil))
(set-frame-parameter frame 'exwm-randr-output output)
+ (set-frame-parameter frame 'exwm-geometry
+ (make-instance 'xcb:RECTANGLE
+ :x (elt geometry 0)
+ :y (elt geometry 1)
+ :width (elt geometry 2)
+ :height (elt geometry 3)))
(set-frame-parameter frame 'exwm-x (elt geometry 0))
(set-frame-parameter frame 'exwm-y (elt geometry 1))
(xcb:+request exwm--connection
diff --git a/exwm-workspace.el b/exwm-workspace.el
index 7ac1fec..8e3839f 100644
--- a/exwm-workspace.el
+++ b/exwm-workspace.el
@@ -231,13 +231,11 @@ The optional FORCE option is for internal use only."
(unless (frame-parameter i 'window-id)
(setq exwm-workspace--list (delq i exwm-workspace--list)))))
(cl-assert (= 1 (length exwm-workspace--list)))
- (exwm--make-emacs-idle-for 0.1) ;wait for the frame ready
- ;; Configure the existing frame
- (set-frame-parameter (car exwm-workspace--list) 'fullscreen 'fullboth)
;; Create remaining frames
(dotimes (i (1- exwm-workspace-number))
(nconc exwm-workspace--list
- (list (make-frame '((window-system . x) (fullscreen . fullboth))))))
+ (list (make-frame '((window-system . x)
+ (visibility . nil))))))
;; Configure workspaces
(dolist (i exwm-workspace--list)
(let ((window-id (string-to-int (frame-parameter i 'window-id)))
@@ -256,6 +254,14 @@ The optional FORCE option is for internal use only."
:window window-id :value-mask xcb:CW:EventMask
:event-mask xcb:EventMask:SubstructureRedirect))))
(xcb:flush exwm--connection)
+ ;; We have to delay making the frame visible until the
+ ;; override-redirect flag has been set.
+ (select-frame-set-input-focus (car exwm-workspace--list))
+ (dolist (i exwm-workspace--list)
+ (set-frame-parameter i 'visibility t)
+ (lower-frame i)
+ (set-frame-parameter i 'fullscreen 'fullboth))
+ (raise-frame (car exwm-workspace--list))
;; Handle unexpected frame switch
(add-hook 'focus-in-hook 'exwm-workspace--on-focus-in)
;; Switch to the first workspace
diff --git a/exwm.el b/exwm.el
index 7dffa87..a52e114 100644
--- a/exwm.el
+++ b/exwm.el
@@ -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)))))
- [elpa] externals/exwm 43b00d2 36/64: fix buffer renaming, (continued)
- [elpa] externals/exwm 43b00d2 36/64: fix buffer renaming, Chris Feng, 2015/09/17
- [elpa] externals/exwm 2d07429 39/64: Merge branch 'move-window-fix' of https://github.com/pipcet/exwm into pipcet-move-window-fix, Chris Feng, 2015/09/17
- [elpa] externals/exwm 5882015 40/64: Merge branch 'pipcet-move-window-fix', Chris Feng, 2015/09/17
- [elpa] externals/exwm 04e4269 29/64: Improve input focus switch mechanism, Chris Feng, 2015/09/17
- [elpa] externals/exwm 7120291 38/64: Merge branch 'pipcet-robustness', Chris Feng, 2015/09/17
- [elpa] externals/exwm 5210e13 41/64: Only manage windows mapped as the direct children of root window (close #38), Chris Feng, 2015/09/17
- [elpa] externals/exwm 07e59e0 31/64: Fix multi-screen bugs, Chris Feng, 2015/09/17
- [elpa] externals/exwm d1806e9 37/64: Improve code robustness., Chris Feng, 2015/09/17
- [elpa] externals/exwm bb4ebde 46/64: Fix `exwm-workspace-rename-buffer`, Chris Feng, 2015/09/17
- [elpa] externals/exwm 94bdbfc 42/64: Avoid using the "no window manager" code in Emacs, Chris Feng, 2015/09/17
- [elpa] externals/exwm 874c383 43/64: Merge pull request #42 from pipcet/ewmh-fullscreen,
Chris Feng <=
- [elpa] externals/exwm 5f9f673 47/64: Fix window size calculations, Chris Feng, 2015/09/17
- [elpa] externals/exwm 7032ee7 48/64: Re-enable complete refresh of keyboard mapping, Chris Feng, 2015/09/17
- [elpa] externals/exwm 981293f 44/64: Replay KeyPress events instead of fake them in line-mode, Chris Feng, 2015/09/17
- [elpa] externals/exwm f7bec7a 51/64: Minor fix, Chris Feng, 2015/09/17
- [elpa] externals/exwm 5222dc1 49/64: Avoid deleting the frame created by Emacs client by accident, Chris Feng, 2015/09/17
- [elpa] externals/exwm f1d37b9 53/64: Ungrab pointer timely when resizing is aborted, Chris Feng, 2015/09/17
- [elpa] externals/exwm 76f4849 50/64: Drop intro to xelb-util, Chris Feng, 2015/09/17
- [elpa] externals/exwm 9eee94e 52/64: Merge pull request #52 from pipcet/minor-fix, Chris Feng, 2015/09/17
- [elpa] externals/exwm 637ac15 55/64: Code cleanups, Chris Feng, 2015/09/17
- [elpa] externals/exwm b50a6e6 45/64: Correct several EWMH properties, Chris Feng, 2015/09/17