mirror of
https://github.com/ch11ng/exwm.git
synced 2024-11-27 13:07:59 +01:00
Clean up when failing to start
* exwm.el (exwm-init, exwm-exit): Clean up when failing to start. (exwm--exit-icccm-ewmh): Stop deleting root window properties on exit: delete function.
This commit is contained in:
parent
cf98e3d921
commit
350950abfc
1 changed files with 28 additions and 45 deletions
49
exwm.el
49
exwm.el
|
@ -667,28 +667,6 @@
|
|||
:data [0 0]))
|
||||
(xcb:flush exwm--connection))
|
||||
|
||||
(defun exwm--exit-icccm-ewmh ()
|
||||
"Remove ICCCM/EWMH properties."
|
||||
(dolist (p (list
|
||||
xcb:Atom:_NET_WM_NAME
|
||||
xcb:Atom:_NET_SUPPORTED
|
||||
xcb:Atom:_NET_CLIENT_LIST
|
||||
xcb:Atom:_NET_CLIENT_LIST_STACKING
|
||||
xcb:Atom:_NET_NUMBER_OF_DESKTOPS
|
||||
xcb:Atom:_NET_DESKTOP_GEOMETRY
|
||||
xcb:Atom:_NET_DESKTOP_VIEWPORT
|
||||
xcb:Atom:_NET_CURRENT_DESKTOP
|
||||
xcb:Atom:_NET_ACTIVE_WINDOW
|
||||
xcb:Atom:_NET_SUPPORTING_WM_CHECK
|
||||
;; TODO: Keep this list synchronized with that in
|
||||
;; `exwm--init-icccm-ewmh'.
|
||||
))
|
||||
(xcb:+request exwm--connection
|
||||
(make-instance 'xcb:DeleteProperty
|
||||
:window exwm--root
|
||||
:property p))
|
||||
(xcb:flush exwm--connection)))
|
||||
|
||||
;;;###autoload
|
||||
(defun exwm-init (&optional frame)
|
||||
"Initialize EXWM."
|
||||
|
@ -697,9 +675,12 @@
|
|||
;; The frame might not be selected if it's created by emacslicnet.
|
||||
(select-frame-set-input-focus frame)
|
||||
(setq frame (selected-frame)))
|
||||
(if (not (eq 'x (framep frame)))
|
||||
(exwm--log "Not running under X environment")
|
||||
(unless exwm--connection
|
||||
(when (not (eq 'x (framep frame)))
|
||||
(user-error "Not running under X environment"))
|
||||
(when exwm--connection
|
||||
(user-error "EXWM already running"))
|
||||
(condition-case err
|
||||
(progn
|
||||
(exwm-enable 'undo) ;never initialize again
|
||||
(setq exwm--connection (xcb:connect))
|
||||
(set-process-query-on-exit-flag (slot-value exwm--connection 'process)
|
||||
|
@ -708,14 +689,11 @@
|
|||
(slot-value (car (slot-value
|
||||
(xcb:get-setup exwm--connection) 'roots))
|
||||
'root))
|
||||
(if (xcb:+request-checked+request-check exwm--connection
|
||||
(when (xcb:+request-checked+request-check exwm--connection
|
||||
(make-instance 'xcb:ChangeWindowAttributes
|
||||
:window exwm--root :value-mask xcb:CW:EventMask
|
||||
:event-mask xcb:EventMask:SubstructureRedirect))
|
||||
;; Other window manager is running
|
||||
(progn (xcb:disconnect exwm--connection)
|
||||
(setq exwm--connection nil)
|
||||
(exwm--log "Other window manager detected"))
|
||||
(error "Other window manager is running"))
|
||||
;; Disable some features not working well with EXWM
|
||||
(setq use-dialog-box nil
|
||||
confirm-kill-emacs #'exwm--confirm-kill-emacs)
|
||||
|
@ -734,7 +712,12 @@
|
|||
(exwm-input--post-init)
|
||||
;; Manage existing windows
|
||||
(exwm-manage--scan)
|
||||
(run-hooks 'exwm-init-hook)))))
|
||||
(run-hooks 'exwm-init-hook))
|
||||
((quit error)
|
||||
(exwm-exit)
|
||||
;; Rethrow error
|
||||
(signal (car err) (cdr err)))))
|
||||
|
||||
|
||||
;;;###autoload
|
||||
(defun exwm-exit ()
|
||||
|
@ -748,13 +731,13 @@
|
|||
(exwm-workspace--exit)
|
||||
(exwm-floating--exit)
|
||||
(exwm-layout--exit)
|
||||
(exwm--exit-icccm-ewmh)
|
||||
(xcb:+request-checked+request-check exwm--connection
|
||||
(make-instance 'xcb:ChangeWindowAttributes
|
||||
:window exwm--root :value-mask xcb:CW:EventMask
|
||||
:event-mask xcb:EventMask:NoEvent))
|
||||
(when exwm--connection
|
||||
(xcb:flush exwm--connection)
|
||||
(xcb:disconnect exwm--connection)
|
||||
(xcb:disconnect exwm--connection))
|
||||
(setq exwm--connection nil))
|
||||
|
||||
(defun exwm-enable (&optional undo)
|
||||
|
|
Loading…
Reference in a new issue