From db5128c1b9f77ecefd62a7150ccbdef33dd870af Mon Sep 17 00:00:00 2001 From: Chris Feng Date: Fri, 12 Aug 2016 19:18:32 +0800 Subject: [PATCH] Fix CreateWindow attributes ; Also fix various compile warnings. * exwm-floating.el (exwm-floating--set-floating): * exwm-manage.el (exwm-manage--manage-window): * exwm-systemtray.el (exwm-systemtray--init): * exwm-workspace.el (exwm-workspace--add-frame-as-workspace) (exwm-workspace--init): * exwm.el (exwm--init-icccm-ewmh): Explicitly specify the class (InputOutput or InputOnly) and for an InputOutput X window the background pixmap when creating an X window. --- exwm-floating.el | 20 ++++++++++++++----- exwm-manage.el | 18 ++++++++++++----- exwm-systemtray.el | 17 +++++++++++----- exwm-workspace.el | 49 ++++++++++++++++++++++++++++++++-------------- exwm.el | 15 ++++++++++---- 5 files changed, 85 insertions(+), 34 deletions(-) diff --git a/exwm-floating.el b/exwm-floating.el index 7c5d811..6f6cfec 100644 --- a/exwm-floating.el +++ b/exwm-floating.el @@ -70,11 +70,14 @@ context of the corresponding buffer.") (defvar exwm-workspace--current) (defvar exwm-workspace--struts) +(defvar exwm-workspace--workareas) +(defvar exwm-workspace-current-index) (declare-function exwm-layout--refresh "exwm-layout.el" ()) (declare-function exwm-layout--show "exwm-layout.el" (id &optional window)) (declare-function exwm-layout--iconic-state-p "exwm-layout.el" (&optional id)) (declare-function exwm-workspace--minibuffer-own-frame-p "exwm-workspace.el") +(declare-function exwm-workspace--position "exwm-workspace.el" (frame)) (defun exwm-floating--set-floating (id) "Make window ID floating." @@ -191,12 +194,19 @@ context of the corresponding buffer.") ;; a child of the X window container. (xcb:+request exwm--connection (make-instance 'xcb:CreateWindow - :depth 0 :wid frame-container + :depth 0 + :wid frame-container :parent container - :x 0 :y 0 :width width :height height :border-width 0 - :class xcb:WindowClass:CopyFromParent - :visual 0 ;CopyFromParent - :value-mask xcb:CW:OverrideRedirect + :x 0 + :y 0 + :width width + :height height + :border-width 0 + :class xcb:WindowClass:InputOutput + :visual 0 + :value-mask (logior xcb:CW:BackPixmap + xcb:CW:OverrideRedirect) + :background-pixmap xcb:BackPixmap:ParentRelative :override-redirect 1)) ;; Put it at bottom. (xcb:+request exwm--connection diff --git a/exwm-manage.el b/exwm-manage.el index b883124..a8713ff 100644 --- a/exwm-manage.el +++ b/exwm-manage.el @@ -83,6 +83,7 @@ corresponding buffer.") (defvar exwm-workspace--current) (defvar exwm-workspace--switch-history-outdated) (defvar exwm-workspace-current-index) +(defvar exwm-workspace--workareas) (declare-function exwm--update-window-type "exwm.el" (id &optional force)) (declare-function exwm--update-class "exwm.el" (id &optional force)) @@ -208,14 +209,21 @@ corresponding buffer.") (setq exwm--container (xcb:generate-id exwm--connection)) (xcb:+request exwm--connection (make-instance 'xcb:CreateWindow - :depth 0 :wid exwm--container + :depth 0 + :wid exwm--container :parent (frame-parameter exwm-workspace--current 'exwm-workspace) - :x 0 :y 0 :width 1 :height 1 :border-width 0 - :class xcb:WindowClass:CopyFromParent - :visual 0 ;CopyFromParent - :value-mask (logior xcb:CW:OverrideRedirect + :x 0 + :y 0 + :width 1 + :height 1 + :border-width 0 + :class xcb:WindowClass:InputOutput + :visual 0 + :value-mask (logior xcb:CW:BackPixmap + xcb:CW:OverrideRedirect xcb:CW:EventMask) + :background-pixmap xcb:BackPixmap:ParentRelative :override-redirect 1 :event-mask xcb:EventMask:SubstructureRedirect)) (exwm--debug diff --git a/exwm-systemtray.el b/exwm-systemtray.el index e978f64..36f7f3b 100644 --- a/exwm-systemtray.el +++ b/exwm-systemtray.el @@ -334,10 +334,17 @@ You shall use the default value if using auto-hide minibuffer.") (setq exwm-systemtray--selection-owner-window id) (xcb:+request exwm-systemtray--connection (make-instance 'xcb:CreateWindow - :depth 0 :wid id :parent exwm--root - :x 0 :y 0 :width 1 :height 1 - :border-width 0 :class xcb:WindowClass:InputOnly - :visual 0 :value-mask xcb:CW:OverrideRedirect + :depth 0 + :wid id + :parent exwm--root + :x 0 + :y 0 + :width 1 + :height 1 + :border-width 0 + :class xcb:WindowClass:InputOnly + :visual 0 + :value-mask xcb:CW:OverrideRedirect :override-redirect 1)) ;; Get the selection ownership. (xcb:+request exwm-systemtray--connection @@ -397,7 +404,7 @@ You shall use the default value if using auto-hide minibuffer.") :width 1 :height exwm-systemtray-height :border-width 0 - :class xcb:WindowClass:CopyFromParent + :class xcb:WindowClass:InputOutput :visual 0 :value-mask (logior xcb:CW:BackPixmap xcb:CW:EventMask) :background-pixmap xcb:BackPixmap:ParentRelative diff --git a/exwm-workspace.el b/exwm-workspace.el index 977cfe6..3d3a542 100644 --- a/exwm-workspace.el +++ b/exwm-workspace.el @@ -1171,14 +1171,20 @@ Please check `exwm-workspace--minibuffer-own-frame-p' first." (set-frame-parameter frame param (frame-parameter w param)))) (xcb:+request exwm--connection (make-instance 'xcb:CreateWindow - :depth 0 :wid workspace :parent exwm--root - :x 0 :y 0 + :depth 0 + :wid workspace + :parent exwm--root + :x 0 + :y 0 :width (x-display-pixel-width) :height (x-display-pixel-height) - :border-width 0 :class xcb:WindowClass:CopyFromParent - :visual 0 ;CopyFromParent - :value-mask (logior xcb:CW:OverrideRedirect + :border-width 0 + :class xcb:WindowClass:InputOutput + :visual 0 + :value-mask (logior xcb:CW:BackPixmap + xcb:CW:OverrideRedirect xcb:CW:EventMask) + :background-pixmap xcb:BackPixmap:ParentRelative :override-redirect 1 :event-mask xcb:EventMask:SubstructureRedirect)) (xcb:+request exwm--connection @@ -1188,13 +1194,19 @@ Please check `exwm-workspace--minibuffer-own-frame-p' first." :stack-mode xcb:StackMode:Below)) (xcb:+request exwm--connection (make-instance 'xcb:CreateWindow - :depth 0 :wid container :parent workspace - :x 0 :y 0 + :depth 0 + :wid container + :parent workspace + :x 0 + :y 0 :width (x-display-pixel-width) :height (x-display-pixel-height) - :border-width 0 :class xcb:WindowClass:CopyFromParent - :visual 0 ;CopyFromParent - :value-mask xcb:CW:OverrideRedirect + :border-width 0 + :class xcb:WindowClass:InputOutput + :visual 0 + :value-mask (logior xcb:CW:BackPixmap + xcb:CW:OverrideRedirect) + :background-pixmap xcb:BackPixmap:ParentRelative :override-redirect 1)) (exwm--debug (xcb:+request exwm--connection @@ -1372,12 +1384,19 @@ applied to all subsequently created X frames." container) (xcb:+request exwm--connection (make-instance 'xcb:CreateWindow - :depth 0 :wid container :parent exwm--root - :x -1 :y -1 :width 1 :height 1 + :depth 0 + :wid container + :parent exwm--root + :x 0 + :y 0 + :width 1 + :height 1 :border-width 0 - :class xcb:WindowClass:CopyFromParent - :visual 0 ;CopyFromParent - :value-mask xcb:CW:OverrideRedirect + :class xcb:WindowClass:InputOutput + :visual 0 + :value-mask (logior xcb:CW:BackPixmap + xcb:CW:OverrideRedirect) + :background-pixmap xcb:BackPixmap:ParentRelative :override-redirect 1)) (exwm--debug (xcb:+request exwm--connection diff --git a/exwm.el b/exwm.el index afec152..0bc9701 100644 --- a/exwm.el +++ b/exwm.el @@ -609,10 +609,17 @@ (let ((new-id (xcb:generate-id exwm--connection))) (xcb:+request exwm--connection (make-instance 'xcb:CreateWindow - :depth 0 :wid new-id :parent exwm--root - :x -1 :y -1 :width 1 :height 1 - :border-width 0 :class xcb:WindowClass:CopyFromParent - :visual 0 :value-mask xcb:CW:OverrideRedirect + :depth 0 + :wid new-id + :parent exwm--root + :x 0 + :y 0 + :width 1 + :height 1 + :border-width 0 + :class xcb:WindowClass:InputOnly + :visual 0 + :value-mask xcb:CW:OverrideRedirect :override-redirect 1)) (dolist (i (list exwm--root new-id)) ;; Set _NET_SUPPORTING_WM_CHECK