From 90185457261eb77ac80609d5d219e0837e81af82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Medra=C3=B1o=20Calvo?= Date: Sun, 17 Jul 2016 12:00:00 +0000 Subject: [PATCH] New function exwm-workspace--workspace-p * exwm-workspace.el (exwm-workspace--workspace-p): New function. * exwm-input.el (exwm-input--on-ButtonPress): * exwm-workspace.el (exwm-workspace-switch): * exwm-layout.el (exwm-layout--refresh): Use it. --- exwm-input.el | 3 ++- exwm-layout.el | 5 +++-- exwm-workspace.el | 6 +++++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/exwm-input.el b/exwm-input.el index d581e7e85..22c7a3606 100644 --- a/exwm-input.el +++ b/exwm-input.el @@ -180,6 +180,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)) +(declare-function exwm-workspace--workspace-p "exwm-workspace.el" (workspace)) (defvar exwm-workspace--list) @@ -206,7 +207,7 @@ It's updated in several occasions, and only used by `exwm-input--set-focus'.") (unless (eq window (selected-window)) (setq frame (window-frame window)) (unless (eq frame exwm-workspace--current) - (if (memq frame exwm-workspace--list) + (if (exwm-workspace--workspace-p frame) ;; The X window is on another workspace (exwm-workspace-switch (exwm-workspace--position frame)) diff --git a/exwm-layout.el b/exwm-layout.el index db1aa0d5f..4d8539004 100644 --- a/exwm-layout.el +++ b/exwm-layout.el @@ -153,7 +153,6 @@ (xcb:flush exwm--connection)))) (defvar exwm-workspace--current) -(defvar exwm-workspace--list) (declare-function exwm-input-grab-keyboard "exwm-input.el") (declare-function exwm-input-release-keyboard "exwm-input.el") @@ -282,6 +281,8 @@ selected by `other-buffer'." (defvar exwm-layout-show-all-buffers nil "Non-nil to allow switching to buffers on other workspaces.") +(declare-function exwm-workspace--workspace-p "exwm-workspace.el" + (workspace)) (defun exwm-layout--set-client-list-stacking () "Set _NET_CLIENT_LIST_STACKING." @@ -312,7 +313,7 @@ selected by `other-buffer'." covered-buffers ;EXWM-buffers covered by a new X window. vacated-windows ;Windows previously displaying EXWM-buffers. windows) - (if (not (memq frame exwm-workspace--list)) + (if (not (exwm-workspace--workspace-p frame)) (if (frame-parameter frame 'exwm-outer-id) ;; Refresh a floating frame (let ((window (frame-first-window frame))) diff --git a/exwm-workspace.el b/exwm-workspace.el index a3f4c2e75..e2df37ede 100644 --- a/exwm-workspace.el +++ b/exwm-workspace.el @@ -40,6 +40,10 @@ NIL if FRAME is not a workspace" "Retrieve total number of workspaces." (length exwm-workspace--list)) +(defsubst exwm-workspace--workspace-p (frame) + "Return t if FRAME is a workspace." + (memq frame exwm-workspace--list)) + (defvar exwm-workspace--switch-map (let ((map (make-sparse-keymap))) (define-key map [t] (lambda () (interactive))) @@ -334,7 +338,7 @@ The optional FORCE option is for internal use only." :stack-mode xcb:StackMode:Above)))) (setq exwm-workspace--current frame exwm-workspace-current-index index) - (unless (memq (selected-frame) exwm-workspace--list) + (unless (exwm-workspace--workspace-p (selected-frame)) ;; Save the floating frame window selected on the previous workspace. (set-frame-parameter (with-current-buffer (window-buffer) exwm--frame)