mirror of
https://github.com/emacs-exwm/exwm.git
synced 2024-11-27 14:57:59 +01:00
Add `exwm-workspace--position' helper
* exwm-workspace.el (exwm-workspace--position): New function. * exwm-layout.el (exwm-layout--refresh): * exwm-input.el (exwm-input--on-ButtonPress): * exwm-workspace.el (exwm-workspace--update-switch-history): * exwm.el (exwm--on-ClientMessage, exwm-workspace--init): Use it.
This commit is contained in:
parent
cd1372eaec
commit
ed6a18a697
4 changed files with 16 additions and 7 deletions
|
@ -179,6 +179,7 @@ It's updated in several occasions, and only used by `exwm-input--set-focus'.")
|
|||
|
||||
(declare-function exwm-floating--start-moveresize "exwm-floating.el"
|
||||
(id &optional type))
|
||||
(declare-function exwm-workspace--position "exwm-workspace.el" (frame))
|
||||
|
||||
(defvar exwm-workspace--list)
|
||||
|
||||
|
@ -208,14 +209,14 @@ It's updated in several occasions, and only used by `exwm-input--set-focus'.")
|
|||
(if (memq frame exwm-workspace--list)
|
||||
;; The X window is on another workspace
|
||||
(exwm-workspace-switch
|
||||
(cl-position frame exwm-workspace--list))
|
||||
(exwm-workspace--position frame))
|
||||
(with-current-buffer (window-buffer window)
|
||||
(when (and (eq major-mode 'exwm-mode)
|
||||
(not (eq exwm--frame
|
||||
exwm-workspace--current)))
|
||||
;; The floating X window is on another workspace
|
||||
(exwm-workspace-switch
|
||||
(cl-position exwm--frame exwm-workspace--list))))))
|
||||
(exwm-workspace--position exwm--frame))))))
|
||||
;; It has been reported that the `window' may have be deleted
|
||||
(if (window-live-p window)
|
||||
(select-window window)
|
||||
|
|
|
@ -161,6 +161,7 @@
|
|||
(declare-function exwm-workspace--current-width "exwm-workspace.el")
|
||||
(declare-function exwm-workspace--get-geometry "exwm-workspace.el" (frame))
|
||||
(declare-function exwm-workspace--minibuffer-own-frame-p "exwm-workspace.el")
|
||||
(declare-function exwm-workspace--position "exwm-workspace.el" (frame))
|
||||
(declare-function exwm-workspace--set-fullscreen "exwm-workspace.el" (frame))
|
||||
(declare-function exwm-workspace-move-window "exwm-workspace.el"
|
||||
(index &optional id))
|
||||
|
@ -346,7 +347,7 @@ selected by `other-buffer'."
|
|||
(if (eq frame exwm--frame)
|
||||
(exwm-layout--show exwm--id window)
|
||||
(exwm-workspace-move-window
|
||||
(cl-position frame exwm-workspace--list) exwm--id))
|
||||
(exwm-workspace--position frame) exwm--id))
|
||||
;; Make sure this buffer is not displayed elsewhere. Note down
|
||||
;; windows displaying an EXWM-buffer now displayed elsewhere; we
|
||||
;; need to display with some other buffer there.
|
||||
|
|
|
@ -29,6 +29,13 @@
|
|||
|
||||
(defvar exwm-workspace-number 4 "Number of workspaces (1 ~ 10).")
|
||||
(defvar exwm-workspace--list nil "List of all workspaces (Emacs frames).")
|
||||
|
||||
(defsubst exwm-workspace--position (frame)
|
||||
"Retrieve index of given FRAME in workspace list.
|
||||
|
||||
NIL if FRAME is not a workspace"
|
||||
(cl-position frame exwm-workspace--list))
|
||||
|
||||
(defvar exwm-workspace--switch-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
(define-key map [t] (lambda () (interactive)))
|
||||
|
@ -72,7 +79,7 @@
|
|||
(with-current-buffer (cdr i)
|
||||
(when exwm--frame
|
||||
(setf (aref not-empty
|
||||
(cl-position exwm--frame exwm-workspace--list))
|
||||
(exwm-workspace--position exwm--frame))
|
||||
t))))
|
||||
(setq exwm-workspace--switch-history
|
||||
(mapcar
|
||||
|
@ -948,13 +955,13 @@ applied to all subsequently created X frames."
|
|||
:window workspace
|
||||
:data
|
||||
(format "EXWM workspace %d"
|
||||
(cl-position i exwm-workspace--list))))
|
||||
(exwm-workspace--position i))))
|
||||
(xcb:+request exwm--connection
|
||||
(make-instance 'xcb:ewmh:set-_NET_WM_NAME
|
||||
:window container
|
||||
:data
|
||||
(format "EXWM workspace %d frame container"
|
||||
(cl-position i exwm-workspace--list)))))
|
||||
(exwm-workspace--position i)))))
|
||||
(xcb:+request exwm--connection
|
||||
(make-instance 'xcb:ReparentWindow
|
||||
:window outer-id :parent container :x 0 :y 0))
|
||||
|
|
2
exwm.el
2
exwm.el
|
@ -438,7 +438,7 @@
|
|||
;; FIXME: check (may require other properties set)
|
||||
(when (memq xcb:Atom:_NET_WM_STATE_DEMANDS_ATTENTION props)
|
||||
(when (= action xcb:ewmh:_NET_WM_STATE_ADD)
|
||||
(let ((idx (cl-position exwm--frame exwm-workspace--list)))
|
||||
(let ((idx (exwm-workspace--position exwm--frame)))
|
||||
(unless (= idx exwm-workspace-current-index)
|
||||
(set-frame-parameter exwm--frame 'exwm--urgency t)
|
||||
(setq exwm-workspace--switch-history-outdated t))))
|
||||
|
|
Loading…
Reference in a new issue