mirror of
https://github.com/emacs-exwm/exwm.git
synced 2024-11-27 14:57:59 +01:00
Fix workspace switch issues
* exwm-core.el (exwm--make-emacs-idle-for): Removed. * exwm-workspace.el (exwm-workspace--switch-count): New variable. (exwm-workspace-switch): Increase exwm-workspace--switch-count when necessary; Remove the call to exwm--make-emacs-idle-for. (exwm-workspace--on-focus-in): Consume exwm-workspace--switch-count. * exwm-workspace.el (exwm-workspace--on-focus-in): Close active minibuffer.
This commit is contained in:
parent
463d0da411
commit
e8bc51280d
2 changed files with 10 additions and 6 deletions
|
@ -38,10 +38,6 @@
|
||||||
(when exwm-debug-on
|
(when exwm-debug-on
|
||||||
`(message (concat "[EXWM] " ,format-string) ,@args)))
|
`(message (concat "[EXWM] " ,format-string) ,@args)))
|
||||||
|
|
||||||
(defun exwm--make-emacs-idle-for (seconds)
|
|
||||||
"Put Emacs in idle state for SECONDS seconds."
|
|
||||||
(with-timeout (seconds) (read-event)))
|
|
||||||
|
|
||||||
(defvar exwm--connection nil "X connection.")
|
(defvar exwm--connection nil "X connection.")
|
||||||
(defvar exwm--root nil "Root window.")
|
(defvar exwm--root nil "Root window.")
|
||||||
(defvar exwm--id-buffer-alist nil "Alist of (<X window ID> . <Emacs buffer>).")
|
(defvar exwm--id-buffer-alist nil "Alist of (<X window ID> . <Emacs buffer>).")
|
||||||
|
|
|
@ -100,6 +100,10 @@
|
||||||
(defvar exwm-workspace-current-index 0 "Index of current active workspace.")
|
(defvar exwm-workspace-current-index 0 "Index of current active workspace.")
|
||||||
(defvar exwm-workspace-show-all-buffers nil
|
(defvar exwm-workspace-show-all-buffers nil
|
||||||
"Non-nil to show buffers on other workspaces.")
|
"Non-nil to show buffers on other workspaces.")
|
||||||
|
(defvar exwm-workspace--switch-count 0
|
||||||
|
"`exwm-workspace-switch' execution counts.
|
||||||
|
|
||||||
|
Consumed by `exwm-workspace--on-focus-in.'")
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun exwm-workspace-switch (index &optional force)
|
(defun exwm-workspace-switch (index &optional force)
|
||||||
|
@ -125,6 +129,7 @@ The optional FORCE option is for internal use only."
|
||||||
(let ((frame (elt exwm-workspace--list index)))
|
(let ((frame (elt exwm-workspace--list index)))
|
||||||
(setq exwm-workspace--current frame
|
(setq exwm-workspace--current frame
|
||||||
exwm-workspace-current-index index)
|
exwm-workspace-current-index index)
|
||||||
|
(unless force (cl-incf exwm-workspace--switch-count))
|
||||||
(select-frame-set-input-focus frame)
|
(select-frame-set-input-focus frame)
|
||||||
;; Move mouse when necessary
|
;; Move mouse when necessary
|
||||||
(let ((position (mouse-pixel-position))
|
(let ((position (mouse-pixel-position))
|
||||||
|
@ -154,7 +159,6 @@ The optional FORCE option is for internal use only."
|
||||||
(set-frame-parameter frame 'exwm--urgency nil)
|
(set-frame-parameter frame 'exwm--urgency nil)
|
||||||
;; Update switch workspace history
|
;; Update switch workspace history
|
||||||
(setq exwm-workspace--switch-history-outdated t)
|
(setq exwm-workspace--switch-history-outdated t)
|
||||||
(exwm--make-emacs-idle-for 0.1) ;FIXME
|
|
||||||
;; Update _NET_CURRENT_DESKTOP
|
;; Update _NET_CURRENT_DESKTOP
|
||||||
(xcb:+request exwm--connection
|
(xcb:+request exwm--connection
|
||||||
(make-instance 'xcb:ewmh:set-_NET_CURRENT_DESKTOP
|
(make-instance 'xcb:ewmh:set-_NET_CURRENT_DESKTOP
|
||||||
|
@ -165,9 +169,13 @@ The optional FORCE option is for internal use only."
|
||||||
"Fix unexpected frame switch."
|
"Fix unexpected frame switch."
|
||||||
(let ((index (cl-position (selected-frame) exwm-workspace--list)))
|
(let ((index (cl-position (selected-frame) exwm-workspace--list)))
|
||||||
(exwm--log "Focus on workspace %s" index)
|
(exwm--log "Focus on workspace %s" index)
|
||||||
|
;; Close the (possible) active minibuffer
|
||||||
|
(when (active-minibuffer-window) (abort-recursive-edit))
|
||||||
(when (and index (/= index exwm-workspace-current-index))
|
(when (and index (/= index exwm-workspace-current-index))
|
||||||
(exwm--log "Workspace was switched unexpectedly")
|
(exwm--log "Workspace was switched unexpectedly")
|
||||||
(exwm-workspace-switch index))))
|
(if (< 0 exwm-workspace--switch-count)
|
||||||
|
(cl-decf exwm-workspace--switch-count)
|
||||||
|
(exwm-workspace-switch index)))))
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun exwm-workspace-move-window (index &optional id)
|
(defun exwm-workspace-move-window (index &optional id)
|
||||||
|
|
Loading…
Reference in a new issue