From 7bfd429d5252e8df43d1b19b836a6c4970290fa0 Mon Sep 17 00:00:00 2001 From: Chris Feng Date: Fri, 14 Aug 2015 17:46:43 +0800 Subject: [PATCH] Honor `value-mask` field in ConfigureRequest event Some applications (e.g. JNLP) don't set correct values for fields not mentioned in `value-mask`. This commit corrects this bug together with another Java AWT specific problem. --- exwm-manage.el | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/exwm-manage.el b/exwm-manage.el index 4f11874..ffe21e2 100644 --- a/exwm-manage.el +++ b/exwm-manage.el @@ -71,7 +71,8 @@ corresponding buffer.") (memq xcb:Atom:_NET_WM_WINDOW_TYPE_DIALOG exwm-window-type) (memq xcb:Atom:_NET_WM_WINDOW_TYPE_NORMAL exwm-window-type))) ;; For Java applications - (and exwm-instance-name + (and (memq xcb:Atom:_NET_WM_WINDOW_TYPE_NORMAL exwm-window-type) + exwm-instance-name (string-prefix-p "sun-awt-X11-" exwm-instance-name) (not (string-suffix-p "XFramePeer" exwm-instance-name)))) (exwm--log "No need to manage #x%x" id) @@ -274,9 +275,11 @@ corresponding buffer.") (let ((obj (make-instance 'xcb:ConfigureRequest)) 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) + (with-slots (stack-mode window sibling x y width height border-width + value-mask) + obj + (exwm--log "ConfigureRequest from #x%x (#x%x) @%dx%d%+d%+d, border: %d" + value-mask window width height x y border-width) (if (setq buffer (exwm--id->buffer window)) ;; Send client message for managed windows (with-current-buffer buffer @@ -308,13 +311,10 @@ corresponding buffer.") (xcb:+request exwm--connection (make-instance 'xcb:ConfigureWindow :window window - :value-mask (logior xcb:ConfigWindow:X - xcb:ConfigWindow:Y - xcb:ConfigWindow:Width - xcb:ConfigWindow:Height - xcb:ConfigWindow:BorderWidth) + :value-mask value-mask :x x :y y :width width :height height - :border-width border-width))))) + :border-width border-width + :sibling sibling :stack-mode stack-mode))))) (xcb:flush exwm--connection)) (defun exwm-manage--on-MapRequest (data synthetic)