emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/exwm 3fb90b9 12/64: Fix fullscreen issues


From: Chris Feng
Subject: [elpa] externals/exwm 3fb90b9 12/64: Fix fullscreen issues
Date: Thu, 17 Sep 2015 23:17:53 +0000

branch: externals/exwm
commit 3fb90b9eaac752760fc32404cbd1574b8ef61669
Author: Chris Feng <address@hidden>
Commit: Chris Feng <address@hidden>

    Fix fullscreen issues
    
    * Correct ConfigureNotify events sent to fullscreen windows.
    * Exit fullscreen mode before switching workspace.
    * Temporarily treat `xcb:Atom:_NET_WM_STATE_ABOVE` as
      `xcb:Atom:_NET_WM_STATE_FULLSCREEN` since
      a) "plugin-container" (Flash Player) seems only set this, and
      b) it's not normally used by applications.
      This makes fullscreen videos working in e.g. iceweasel.
---
 exwm-manage.el    |   14 +++++++++-----
 exwm-workspace.el |    5 +++++
 exwm.el           |    3 ++-
 3 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/exwm-manage.el b/exwm-manage.el
index afab18e..0d2c74f 100644
--- a/exwm-manage.el
+++ b/exwm-manage.el
@@ -133,7 +133,7 @@ corresponding buffer.")
       (exwm-input-grab-keyboard id)
       (exwm-workspace--update-switch-history)
       (setq exwm-input--focus-lock nil) ;unlocked in advance
-      (with-current-buffer (exwm--id->buffer id)
+      (exwm--with-current-id id
         (run-hooks 'exwm-manage-finish-hook))))
   (setq exwm-input--focus-lock nil))
 
@@ -266,10 +266,14 @@ corresponding buffer.")
     (with-slots (window x y width height border-width) obj
       (if (setq buffer (exwm--id->buffer window))
           ;; Send client message for managed windows
-          (progn
-            (setq edges (or (with-current-buffer buffer exwm--floating-edges)
-                            (window-inside-absolute-pixel-edges
-                             (get-buffer-window buffer))))
+          (with-current-buffer buffer
+            (setq edges
+                  (if exwm--fullscreen
+                      (list 0 0
+                            (x-display-pixel-width) (x-display-pixel-height))
+                    (or exwm--floating-edges
+                        (window-inside-absolute-pixel-edges
+                         (get-buffer-window)))))
             (xcb:+request exwm--connection
                 (make-instance 'xcb:SendEvent
                                :propagate 0 :destination window
diff --git a/exwm-workspace.el b/exwm-workspace.el
index 3add212..ed06f64 100644
--- a/exwm-workspace.el
+++ b/exwm-workspace.el
@@ -111,6 +111,11 @@ The optional FORCE option is for internal use only."
     (unless (and (<= 0 index) (< index exwm-workspace-number))
       (user-error "[EXWM] Workspace index out of range: %d" index))
     (when (or force (/= exwm-workspace-current-index index))
+      ;; Exit fullscreen mode
+      (with-current-buffer (window-buffer)
+        (when (and (eq major-mode 'exwm-mode) exwm--fullscreen)
+          (exwm-layout-unset-fullscreen)
+          (exwm-input-grab-keyboard)))
       (let ((frame (elt exwm-workspace--list index)))
         (setq exwm-workspace--current frame
               exwm-workspace-current-index index)
diff --git a/exwm.el b/exwm.el
index 3f38b66..c8f10af 100644
--- a/exwm.el
+++ b/exwm.el
@@ -462,7 +462,8 @@
                        (exwm-floating--set-floating id)
                        (push xcb:Atom:_NET_WM_STATE_MODAL props-new)))))
             ;; _NET_WM_STATE_FULLSCREEN
-            (when (memq xcb:Atom:_NET_WM_STATE_FULLSCREEN props)
+            (when (or (memq xcb:Atom:_NET_WM_STATE_FULLSCREEN props)
+                      (memq xcb:Atom:_NET_WM_STATE_ABOVE props))
               (cond ((= action xcb:ewmh:_NET_WM_STATE_ADD)
                      (unless exwm--fullscreen (exwm-layout-set-fullscreen id))
                      (push xcb:Atom:_NET_WM_STATE_FULLSCREEN props-new))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]