[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/exwm 97daba2: Improve bc80eefe
From: |
Chris Feng |
Subject: |
[elpa] externals/exwm 97daba2: Improve bc80eefe |
Date: |
Sat, 06 Feb 2016 12:37:29 +0000 |
branch: externals/exwm
commit 97daba20ad22f05f2e4c1347ff86d6c957142a0a
Author: Chris Feng <address@hidden>
Commit: Chris Feng <address@hidden>
Improve bc80eefe
* exwm-layout.el (exwm-layout--set-frame-fullscreen):
* exwm-randr.el (exwm-randr--refresh):
* exwm-workspace.el (exwm-workspace--resize-minibuffer):
(exwm-workspace-switch):
* exwm.el (exwm--on-ClientMessage):
Calling `exwm-workspace-switch' in bc80eefe does not work correctly
sometimes. This commit improves it by directly specify the geometry info
rather than getting it from Emacs frame.
---
exwm-layout.el | 2 ++
exwm-randr.el | 6 +++---
exwm-workspace.el | 52 +++++++++++++++++++++++++++++++---------------------
exwm.el | 4 +---
4 files changed, 37 insertions(+), 27 deletions(-)
diff --git a/exwm-layout.el b/exwm-layout.el
index 316bf62..0dc5e1a 100644
--- a/exwm-layout.el
+++ b/exwm-layout.el
@@ -203,6 +203,8 @@
(id (frame-parameter frame 'exwm-outer-id))
(workspace (frame-parameter frame 'exwm-workspace)))
(with-slots (x y width height) geometry
+ (when (eq frame exwm-workspace--current)
+ (exwm-workspace--resize-minibuffer width height))
(exwm-layout--resize-container id workspace x y width height)
(xcb:flush exwm--connection))))
diff --git a/exwm-randr.el b/exwm-randr.el
index 566f4ee..7e0d9ba 100644
--- a/exwm-randr.el
+++ b/exwm-randr.el
@@ -103,6 +103,8 @@
(frame-parameter frame
'exwm-workspace)
x y width height)
+ (when (eq frame exwm-workspace--current)
+ (exwm-workspace--resize-minibuffer width height))
(setq workareas
(nconc workareas (list x y width (- height
workarea-offset)))
@@ -116,9 +118,7 @@
(make-instance 'xcb:ewmh:set-_NET_DESKTOP_VIEWPORT
:window exwm--root
:data (vconcat viewports)))
- (xcb:flush exwm--connection))
- ;; Force update workspace settings.
- (exwm-workspace-switch exwm-workspace-current-index t))
+ (xcb:flush exwm--connection)))
(defvar exwm-randr-screen-change-hook nil
"Normal hook run when screen changes.")
diff --git a/exwm-workspace.el b/exwm-workspace.el
index 9669428..1c23ca0 100644
--- a/exwm-workspace.el
+++ b/exwm-workspace.el
@@ -111,6 +111,29 @@ Value nil means to use the default position which is fixed
at bottom, while
(defvar exwm-workspace--display-echo-area-timer nil
"Timer for auto-hiding echo area.")
+(defun exwm-workspace--resize-minibuffer (&optional width height)
+ "Resize minibuffer (and its container) to fit the size of workspace.
+
+If WIDTH and HEIGHT of the workspace is not specified, they're get from the
+workspace frame."
+ (let ((y (if (eq exwm-workspace-minibuffer-position 'top)
+ 0
+ (- (or height (frame-pixel-height exwm-workspace--current))
+ (frame-pixel-height exwm-workspace--minibuffer))))
+ (width (or width (frame-pixel-width exwm-workspace--current)))
+ (container (frame-parameter exwm-workspace--minibuffer
+ 'exwm-container)))
+ (xcb:+request exwm--connection
+ (make-instance 'xcb:ConfigureWindow
+ :window container
+ :value-mask (logior xcb:ConfigWindow:Y
+ xcb:ConfigWindow:Width
+ xcb:ConfigWindow:StackMode)
+ :y y
+ :width width
+ :stack-mode xcb:StackMode:Above))
+ (set-frame-width exwm-workspace--minibuffer width nil t)))
+
;;;###autoload
(defun exwm-workspace-switch (index &optional force)
"Switch to workspace INDEX. Query for INDEX if it's not specified.
@@ -148,27 +171,14 @@ The optional FORCE option is for internal use only."
(if (not (memq exwm-workspace-minibuffer-position '(top bottom)))
(setq default-minibuffer-frame frame)
;; Resize/reposition the minibuffer frame
- (let ((x 0)
- (y (if (eq exwm-workspace-minibuffer-position 'top)
- 0
- (- (frame-pixel-height frame)
- (frame-pixel-height exwm-workspace--minibuffer))))
- (width (x-display-pixel-width))
- (container (frame-parameter exwm-workspace--minibuffer
- 'exwm-container)))
- (xcb:+request exwm--connection
- (make-instance 'xcb:ReparentWindow
- :window container
- :parent (frame-parameter frame 'exwm-workspace)
- :x x :y y))
- (xcb:+request exwm--connection
- (make-instance 'xcb:ConfigureWindow
- :window container
- :value-mask (logior xcb:ConfigWindow:Width
- xcb:ConfigWindow:StackMode)
- :width width
- :stack-mode xcb:StackMode:Above))
- (set-frame-width exwm-workspace--minibuffer width nil t)))
+ (xcb:+request exwm--connection
+ (make-instance 'xcb:ReparentWindow
+ :window
+ (frame-parameter exwm-workspace--minibuffer
+ 'exwm-container)
+ :parent (frame-parameter frame 'exwm-workspace)
+ :x 0 :y 0))
+ (exwm-workspace--resize-minibuffer))
;; Hide windows in other workspaces by preprending a space
(unless exwm-workspace-show-all-buffers
(dolist (i exwm--id-buffer-alist)
diff --git a/exwm.el b/exwm.el
index 4335c81..720274f 100644
--- a/exwm.el
+++ b/exwm.el
@@ -341,9 +341,7 @@
:window id
:data (vector
xcb:Atom:_NET_WM_STATE_FULLSCREEN)))
- (xcb:flush exwm--connection)))
- ;; Force update workspace settings.
- (exwm-workspace-switch exwm-workspace-current-index t))
+ (xcb:flush exwm--connection))))
(when buffer ;ensure it's managed
(with-current-buffer buffer
;; _NET_WM_STATE_MODAL
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [elpa] externals/exwm 97daba2: Improve bc80eefe,
Chris Feng <=