Fix a frame resizing problem for Lucid build
* exwm-manage.el (exwm-manage--frame-outer-id-list): New variable for storing frame window-outer-id's. (exwm-manage--add-frame, exwm-manage--remove-frame): New functions for adding/removing ids to/from the variable. (exwm-manage--init): Add the functions to the corresponding hooks. (exwm-manage--on-ConfigureRequest): Check for frames and avoid handling them.
This commit is contained in:
parent
7fbd5220f2
commit
1c8101afbf
1 changed files with 29 additions and 8 deletions
|
@ -560,6 +560,20 @@ Would you like to kill it? "
|
||||||
(defconst exwm-manage--width-delta-min 5)
|
(defconst exwm-manage--width-delta-min 5)
|
||||||
(defconst exwm-manage--height-delta-min 5)
|
(defconst exwm-manage--height-delta-min 5)
|
||||||
|
|
||||||
|
(defvar exwm-manage--frame-outer-id-list nil
|
||||||
|
"List of window-outer-id's of all frames.")
|
||||||
|
|
||||||
|
(defun exwm-manage--add-frame (frame)
|
||||||
|
"Run in `after-make-frame-functions'."
|
||||||
|
(push (string-to-number (frame-parameter frame 'outer-window-id))
|
||||||
|
exwm-manage--frame-outer-id-list))
|
||||||
|
|
||||||
|
(defun exwm-manage--remove-frame (frame)
|
||||||
|
"Run in `delete-frame-functions'."
|
||||||
|
(setq exwm-manage--frame-outer-id-list
|
||||||
|
(delq (string-to-number (frame-parameter frame 'outer-window-id))
|
||||||
|
exwm-manage--frame-outer-id-list)))
|
||||||
|
|
||||||
(defun exwm-manage--on-ConfigureRequest (data _synthetic)
|
(defun exwm-manage--on-ConfigureRequest (data _synthetic)
|
||||||
"Handle ConfigureRequest event."
|
"Handle ConfigureRequest event."
|
||||||
(let ((obj (make-instance 'xcb:ConfigureRequest))
|
(let ((obj (make-instance 'xcb:ConfigureRequest))
|
||||||
|
@ -638,6 +652,11 @@ border-width: %d; sibling: #x%x; stack-mode: %d"
|
||||||
nil t)))
|
nil t)))
|
||||||
(exwm--log "ConfigureWindow (preserve geometry)")
|
(exwm--log "ConfigureWindow (preserve geometry)")
|
||||||
;; Configure the unmanaged window.
|
;; Configure the unmanaged window.
|
||||||
|
;; But Emacs frames should be excluded. Generally we don't
|
||||||
|
;; receive ConfigureRequest events from Emacs frames since we
|
||||||
|
;; have set OverrideRedirect on them, but this is not true for
|
||||||
|
;; Lucid build (as of 25.1).
|
||||||
|
(unless (memq window exwm-manage--frame-outer-id-list)
|
||||||
(xcb:+request exwm--connection
|
(xcb:+request exwm--connection
|
||||||
(make-instance 'xcb:ConfigureWindow
|
(make-instance 'xcb:ConfigureWindow
|
||||||
:window window
|
:window window
|
||||||
|
@ -645,7 +664,7 @@ border-width: %d; sibling: #x%x; stack-mode: %d"
|
||||||
:x x :y y :width width :height height
|
:x x :y y :width width :height height
|
||||||
:border-width border-width
|
:border-width border-width
|
||||||
:sibling sibling
|
:sibling sibling
|
||||||
:stack-mode stack-mode))))))
|
:stack-mode stack-mode)))))))
|
||||||
(xcb:flush exwm--connection))
|
(xcb:flush exwm--connection))
|
||||||
|
|
||||||
(declare-function exwm-layout--iconic-state-p "exwm-layout.el" (&optional id))
|
(declare-function exwm-layout--iconic-state-p "exwm-layout.el" (&optional id))
|
||||||
|
@ -698,6 +717,8 @@ border-width: %d; sibling: #x%x; stack-mode: %d"
|
||||||
:name-len (length atom-name)
|
:name-len (length atom-name)
|
||||||
:name atom-name))
|
:name atom-name))
|
||||||
'atom)))
|
'atom)))
|
||||||
|
(add-hook 'after-make-frame-functions #'exwm-manage--add-frame)
|
||||||
|
(add-hook 'delete-frame-functions #'exwm-manage--remove-frame)
|
||||||
(xcb:+event exwm--connection 'xcb:ConfigureRequest
|
(xcb:+event exwm--connection 'xcb:ConfigureRequest
|
||||||
#'exwm-manage--on-ConfigureRequest)
|
#'exwm-manage--on-ConfigureRequest)
|
||||||
(xcb:+event exwm--connection 'xcb:MapRequest #'exwm-manage--on-MapRequest)
|
(xcb:+event exwm--connection 'xcb:MapRequest #'exwm-manage--on-MapRequest)
|
||||||
|
|
Loading…
Reference in a new issue