Add support for RandR 1.5 monitor

* exwm-randr.el (exwm-randr-workspace-monitor-plist): New user option
for specifying which monitor each workspace should be displayed on.
(exwm-randr-workspace-monitor-plist): Made obsolete.
(exwm-randr--get-monitors): New function for fetching active monitors.
(exwm-randr--refresh): Adapted to use monitor.
(exwm-randr--init): Now requires RandR 1.5.

* exwm-randr.el:
* exwm-workspace.el: Rename `output' to `monitor'.
This commit is contained in:
Chris Feng 2018-11-04 00:00:00 +00:00
parent fec85bb72a
commit e597ab4f78
2 changed files with 81 additions and 82 deletions

View file

@ -374,7 +374,7 @@ NIL if FRAME is not a workspace"
(run-hooks 'exwm-workspace--update-workareas-hook))
(defun exwm-workspace--set-active (frame active)
"Make frame FRAME active on its output."
"Make frame FRAME active on its monitor."
(exwm--log "active=%s; frame=%s" frame active)
(set-frame-parameter frame 'exwm-active active)
(if active
@ -543,15 +543,15 @@ for internal use only."
(set-frame-parameter (buffer-local-value 'exwm--frame (window-buffer))
'exwm-selected-window (selected-window)))
;; Show/Hide X windows.
(let ((output-old (frame-parameter old-frame 'exwm-randr-output))
(output-new (frame-parameter frame 'exwm-randr-output))
(let ((monitor-old (frame-parameter old-frame 'exwm-randr-monitor))
(monitor-new (frame-parameter frame 'exwm-randr-monitor))
(active-old (exwm-workspace--active-p old-frame))
(active-new (exwm-workspace--active-p frame))
workspaces-to-hide)
(cond
((not active-old)
(exwm-workspace--set-active frame t))
((equal output-old output-new)
((equal monitor-old monitor-new)
(exwm-workspace--set-active frame t)
(unless (eq frame old-frame)
(exwm-workspace--set-active old-frame nil)
@ -560,8 +560,8 @@ for internal use only."
(t
(dolist (w exwm-workspace--list)
(when (and (exwm-workspace--active-p w)
(equal output-new
(frame-parameter w 'exwm-randr-output)))
(equal monitor-new
(frame-parameter w 'exwm-randr-monitor)))
(exwm-workspace--set-active w nil)
(setq workspaces-to-hide (append workspaces-to-hide (list w)))))
(exwm-workspace--set-active frame t)))
@ -818,8 +818,8 @@ INDEX must not exceed the current number of workspaces."
;; Floating.
(setq container (frame-parameter exwm--floating-frame
'exwm-container))
(unless (equal (frame-parameter old-frame 'exwm-randr-output)
(frame-parameter frame 'exwm-randr-output))
(unless (equal (frame-parameter old-frame 'exwm-randr-monitor)
(frame-parameter frame 'exwm-randr-monitor))
(with-slots (x y)
(xcb:+request-unchecked+reply exwm--connection
(make-instance 'xcb:GetGeometry
@ -1240,7 +1240,7 @@ Please check `exwm-workspace--minibuffer-own-frame-p' first."
;; prevent potential problems. The values do not matter here as
;; they'll be updated by the RandR module later.
(let ((w (car exwm-workspace--list)))
(dolist (param '(exwm-randr-output
(dolist (param '(exwm-randr-monitor
exwm-geometry))
(set-frame-parameter frame param (frame-parameter w param))))
(xcb:+request exwm--connection