[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/exwm 1ce18af 28/64: Center floating windows by default
From: |
Chris Feng |
Subject: |
[elpa] externals/exwm 1ce18af 28/64: Center floating windows by default |
Date: |
Thu, 17 Sep 2015 23:18:00 +0000 |
branch: externals/exwm
commit 1ce18afd0559bacc3a7c43f5a73342814a5b176f
Author: Chris Feng <address@hidden>
Commit: Chris Feng <address@hidden>
Center floating windows by default
This commit makes a floating window centered to its leading window if it has
a valid WM_TRANSIENT_FOR property set. Other it's placed at the center of
the
screen.
---
exwm-floating.el | 20 +++++++++++++++++++-
exwm-input.el | 1 -
exwm-manage.el | 7 +++++++
3 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/exwm-floating.el b/exwm-floating.el
index 3971fa4..7888fd2 100644
--- a/exwm-floating.el
+++ b/exwm-floating.el
@@ -67,6 +67,7 @@
(y (slot-value exwm--geometry 'y))
(width (slot-value exwm--geometry 'width))
(height (slot-value exwm--geometry 'height)))
+ (exwm--log "Floating geometry (original): %dx%d%+d%+d" width height x y)
;; Save window IDs
(set-frame-parameter frame 'exwm-window-id frame-id)
(set-frame-parameter frame 'exwm-outer-id outer-id)
@@ -102,7 +103,24 @@
(when (= 0 height) (setq height (/ display-height 2)))
;; Completely outside
(when (or (> y display-height) (> 0 (+ y display-height)))
- (setq y (/ (- display-height height) 2)))))
+ (setq y (/ (- display-height height) 2))))
+ ;; Center floating windows
+ (when (and (= x 0) (= y 0))
+ (let ((buffer (exwm--id->buffer exwm-transient-for))
+ window edges)
+ (when (and buffer (setq window (get-buffer-window buffer)))
+ (setq edges (window-inside-absolute-pixel-edges window))
+ (unless (and (<= width (- (elt edges 2) (elt edges 0)))
+ (<= height (- (elt edges 3) (elt edges 1))))
+ (setq edges nil)))
+ (if edges
+ ;; Put at the center of leading window
+ (setq x (/ (- (+ (elt edges 2) (elt edges 0)) width) 2)
+ y (/ (- (+ (elt edges 3) (elt edges 1)) height) 2))
+ ;; Put at the center of screen
+ (setq x (/ (- display-width width) 2)
+ y (/ (- display-height height) 2))))))
+ (exwm--log "Floating geometry (corrected): %dx%d%+d%+d" width height x y)
;; Set OverrideRedirect on this frame
(xcb:+request exwm--connection
(make-instance 'xcb:ChangeWindowAttributes
diff --git a/exwm-input.el b/exwm-input.el
index a193314..4acacdf 100644
--- a/exwm-input.el
+++ b/exwm-input.el
@@ -86,7 +86,6 @@ It's updated in several occasions, and only used by
`exwm-input--set-focus'.")
"Update input focus."
(when (and (frame-parameter nil 'exwm-window-id) ;e.g. emacsclient frame
(eq (current-buffer) (window-buffer))) ;e.g. `with-temp-buffer'
- (exwm--log "EXWM-INPUT--UPDATE-FOCUS")
(if (eq major-mode 'exwm-mode)
(progn (exwm--log "Set focus ID to #x%x" exwm--id)
(setq exwm-input--focus-id exwm--id)
diff --git a/exwm-manage.el b/exwm-manage.el
index 79cff22..fc61e50 100644
--- a/exwm-manage.el
+++ b/exwm-manage.el
@@ -276,6 +276,8 @@ corresponding buffer.")
buffer edges)
(xcb:unmarshal obj data)
(with-slots (window x y width height border-width) obj
+ (exwm--log "ConfigureRequest from #x%x @%dx%d%+d%+d, border: %d"
+ window width height x y border-width)
(if (setq buffer (exwm--id->buffer window))
;; Send client message for managed windows
(with-current-buffer buffer
@@ -286,6 +288,7 @@ corresponding buffer.")
(or exwm--floating-edges
(window-inside-absolute-pixel-edges
(get-buffer-window)))))
+ (exwm--log "Reply with ConfigureNotify (edges): %s" edges)
(xcb:+request exwm--connection
(make-instance 'xcb:SendEvent
:propagate 0 :destination window
@@ -300,6 +303,7 @@ corresponding buffer.")
:height (- (elt edges 3) (elt edges 1))
:border-width 0 :override-redirect 0)
exwm--connection))))
+ (exwm--log "ConfigureWindow (preserve geometry)")
;; Configure unmanaged windows
(xcb:+request exwm--connection
(make-instance 'xcb:ConfigureWindow
@@ -317,6 +321,7 @@ corresponding buffer.")
"Handle MapRequest event."
(let ((obj (make-instance 'xcb:MapRequest)))
(xcb:unmarshal obj data)
+ (exwm--log "MapRequest from #x%x" (slot-value obj 'window))
(exwm-manage--manage-window (slot-value obj 'window))))
(defun exwm-manage--on-UnmapNotify (data synthetic)
@@ -324,6 +329,7 @@ corresponding buffer.")
(unless synthetic
(let ((obj (make-instance 'xcb:UnmapNotify)))
(xcb:unmarshal obj data)
+ (exwm--log "UnmapNotify from #x%x" (slot-value obj 'window))
(exwm-manage--unmanage-window (slot-value obj 'window) t))))
(defun exwm-manage--on-DestroyNotify (data synthetic)
@@ -331,6 +337,7 @@ corresponding buffer.")
(unless synthetic
(let ((obj (make-instance 'xcb:DestroyNotify)))
(xcb:unmarshal obj data)
+ (exwm--log "DestroyNotify from #x%x" (slot-value obj 'window))
(exwm-manage--unmanage-window (slot-value obj 'window)))))
(defun exwm-manage--init ()
- [elpa] externals/exwm 3b9d0dd 17/64: Fixes for manage/unmanage window, (continued)
- [elpa] externals/exwm 3b9d0dd 17/64: Fixes for manage/unmanage window, Chris Feng, 2015/09/17
- [elpa] externals/exwm 42f4ec6 20/64: Show moved window by default, Chris Feng, 2015/09/17
- [elpa] externals/exwm 36bb579 21/64: Refresh when minibuffer grows (fix #10), Chris Feng, 2015/09/17
- [elpa] externals/exwm 2ad1a89 14/64: Various input fixes, Chris Feng, 2015/09/17
- [elpa] externals/exwm 84f0f03 15/64: Fix input focus lost after closing window, Chris Feng, 2015/09/17
- [elpa] externals/exwm 63402b0 19/64: Correct layout refresh problems, Chris Feng, 2015/09/17
- [elpa] externals/exwm edc70eb 22/64: Remove redundant code caused by the concurrency of events, Chris Feng, 2015/09/17
- [elpa] externals/exwm 2d4104a 23/64: Fix emacsclient bugs, Chris Feng, 2015/09/17
- [elpa] externals/exwm 24b964b 25/64: Ignore repeated `MappingNotify` events, Chris Feng, 2015/09/17
- [elpa] externals/exwm 801185c 27/64: Fix buffer switch problems, Chris Feng, 2015/09/17
- [elpa] externals/exwm 1ce18af 28/64: Center floating windows by default,
Chris Feng <=
- [elpa] externals/exwm 048994c 24/64: Remove redundant code caused by the concurrency of events (continued), Chris Feng, 2015/09/17
- [elpa] externals/exwm 35560a4 30/64: Minor fixes for emacsclient, Chris Feng, 2015/09/17
- [elpa] externals/exwm b755296 26/64: Remove redundant code caused by the concurrency of events (contd, 2), Chris Feng, 2015/09/17
- [elpa] externals/exwm 7bfd429 33/64: Honor `value-mask` field in ConfigureRequest event, Chris Feng, 2015/09/17
- [elpa] externals/exwm dba43b0 32/64: Fix input focus stealing, Chris Feng, 2015/09/17
- [elpa] externals/exwm d998b42 34/64: Provide hooks run when the floating state of a window changes (close #28), Chris Feng, 2015/09/17
- [elpa] externals/exwm 15ad591 35/64: Fix bug when moving a window to the current workspace, Chris Feng, 2015/09/17
- [elpa] externals/exwm 43b00d2 36/64: fix buffer renaming, Chris Feng, 2015/09/17
- [elpa] externals/exwm 2d07429 39/64: Merge branch 'move-window-fix' of https://github.com/pipcet/exwm into pipcet-move-window-fix, Chris Feng, 2015/09/17
- [elpa] externals/exwm 5882015 40/64: Merge branch 'pipcet-move-window-fix', Chris Feng, 2015/09/17