emacs-elpa-diffs
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]