about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--exwm-floating.el20
-rw-r--r--exwm-manage.el18
-rw-r--r--exwm-systemtray.el17
-rw-r--r--exwm-workspace.el49
-rw-r--r--exwm.el15
5 files changed, 85 insertions, 34 deletions
diff --git a/exwm-floating.el b/exwm-floating.el
index 7c5d811bf5ca..6f6cfecbfe4a 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 b88312455def..a8713ff714fa 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 e978f64e15e3..36f7f3b60183 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 977cfe64bbcb..3d3a542eaf6b 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 afec1526ce3d..0bc9701c0317 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