Do not wait for WM_STATE property events

* exwm-layout.el (exwm-layout--show, exwm-layout--hide): Save the state
directly.
This commit is contained in:
Chris Feng 2016-02-26 18:18:34 +08:00
parent bc4aafec16
commit 74fba563b8

View file

@ -103,7 +103,8 @@
(xcb:+request exwm--connection (xcb:+request exwm--connection
(make-instance 'xcb:icccm:set-WM_STATE (make-instance 'xcb:icccm:set-WM_STATE
:window id :state xcb:icccm:WM_STATE:NormalState :window id :state xcb:icccm:WM_STATE:NormalState
:icon xcb:Window:None))) :icon xcb:Window:None))
(setq exwm-state xcb:icccm:WM_STATE:NormalState))
(xcb:+request exwm--connection (xcb:+request exwm--connection
(make-instance 'xcb:SendEvent (make-instance 'xcb:SendEvent
:propagate 0 :destination id :propagate 0 :destination id
@ -122,27 +123,27 @@
(defun exwm-layout--hide (id) (defun exwm-layout--hide (id)
"Hide window ID." "Hide window ID."
(unless (eq xcb:icccm:WM_STATE:IconicState ;already hidden (with-current-buffer (exwm--id->buffer id)
(with-current-buffer (exwm--id->buffer id) exwm-state)) (unless (eq xcb:icccm:WM_STATE:IconicState exwm-state) ;already hidden
(exwm--log "Hide #x%x" id) (exwm--log "Hide #x%x" id)
(xcb:+request exwm--connection
(make-instance 'xcb:ChangeWindowAttributes
:window id :value-mask xcb:CW:EventMask
:event-mask xcb:EventMask:NoEvent))
(xcb:+request exwm--connection (make-instance 'xcb:UnmapWindow :window id))
(xcb:+request exwm--connection
(make-instance 'xcb:ChangeWindowAttributes
:window id :value-mask xcb:CW:EventMask
:event-mask exwm--client-event-mask))
(with-current-buffer (exwm--id->buffer id)
(xcb:+request exwm--connection (xcb:+request exwm--connection
(make-instance 'xcb:UnmapWindow :window exwm--container))) (make-instance 'xcb:ChangeWindowAttributes
(xcb:+request exwm--connection :window id :value-mask xcb:CW:EventMask
(make-instance 'xcb:icccm:set-WM_STATE :event-mask xcb:EventMask:NoEvent))
:window id (xcb:+request exwm--connection (make-instance 'xcb:UnmapWindow :window id))
:state xcb:icccm:WM_STATE:IconicState (xcb:+request exwm--connection
:icon xcb:Window:None)) (make-instance 'xcb:ChangeWindowAttributes
(xcb:flush exwm--connection))) :window id :value-mask xcb:CW:EventMask
:event-mask exwm--client-event-mask))
(xcb:+request exwm--connection
(make-instance 'xcb:UnmapWindow :window exwm--container))
(xcb:+request exwm--connection
(make-instance 'xcb:icccm:set-WM_STATE
:window id
:state xcb:icccm:WM_STATE:IconicState
:icon xcb:Window:None))
(setq exwm-state xcb:icccm:WM_STATE:IconicState)
(xcb:flush exwm--connection))))
(defvar exwm-workspace--current) (defvar exwm-workspace--current)
(defvar exwm-workspace--list) (defvar exwm-workspace--list)