about summary refs log tree commit diff
diff options
context:
space:
mode:
authorChris Feng <chris.w.feng@gmail.com>2016-02-21T12·19+0800
committerChris Feng <chris.w.feng@gmail.com>2016-02-21T12·19+0800
commit55cec760ca3cee21e735bff9a9a5229b222b97ff (patch)
treef6593789633637697906259b5a3b2103de815343
parent7116b01b0c9b7efda105487a17192470c466b9c4 (diff)
Fix emacsclient related issues
* exwm-systemtray.el (exwm-systemtray-height): The value is not available
when emacsclient has just loaded the library (and it crashes emacsclient).

* exwm-workspace.el (exwm-workspace--init): Set `default-minibuffer-frame'
later to prevent it from being modified when using emacsclient.

* exwm-floating.el:
* exwm-randr.el:
* exwm-systemtray.el:
* exwm-workspace.el:
* exwm.el: Use `exwm-workspace--minibuffer-own-frame-p' instead of the raw
variable.
-rw-r--r--exwm-floating.el3
-rw-r--r--exwm-randr.el3
-rw-r--r--exwm-systemtray.el14
-rw-r--r--exwm-workspace.el9
-rw-r--r--exwm.el2
5 files changed, 15 insertions, 16 deletions
diff --git a/exwm-floating.el b/exwm-floating.el
index 97d673c15bd7..b56201914e60 100644
--- a/exwm-floating.el
+++ b/exwm-floating.el
@@ -53,7 +53,6 @@
 (defvar exwm-workspace--list)
 (defvar exwm-workspace-current-index)
 (defvar exwm-workspace--switch-history-outdated)
-(defvar exwm-workspace-minibuffer-position)
 
 (declare-function exwm-layout--refresh "exwm-layout.el")
 (declare-function exwm-layout--show "exwm-layout.el")
@@ -104,7 +103,7 @@
     ;; FIXME: check normal hints restrictions
     (let* ((display-width (frame-pixel-width original-frame))
            (display-height (- (frame-pixel-height original-frame)
-                              (if exwm-workspace-minibuffer-position
+                              (if (exwm-workspace--minibuffer-own-frame-p)
                                   0
                                 (window-pixel-height (minibuffer-window
                                                       original-frame)))
diff --git a/exwm-randr.el b/exwm-randr.el
index 7f9b443c862b..e761d8f2e34d 100644
--- a/exwm-randr.el
+++ b/exwm-randr.el
@@ -54,7 +54,6 @@
 (defvar exwm-randr-refresh-hook nil
   "Normal hook run when the RandR module just refreshed.")
 
-(defvar exwm-workspace-minibuffer-position)
 (defvar exwm-layout--fullscreen-frame-count)
 (defvar exwm-workspace-number)
 (defvar exwm-workspace--list)
@@ -94,7 +93,7 @@
                 (setq default-geometry geometry)))))))
     (exwm--log "(randr) outputs: %s" output-plist)
     (when output-plist
-      (setq workarea-offset (if exwm-workspace-minibuffer-position
+      (setq workarea-offset (if (exwm-workspace--minibuffer-own-frame-p)
                                 0
                               (window-pixel-height (minibuffer-window))))
       (setq exwm-layout--fullscreen-frame-count 0)
diff --git a/exwm-systemtray.el b/exwm-systemtray.el
index e9a974531686..861304ab7c4e 100644
--- a/exwm-systemtray.el
+++ b/exwm-systemtray.el
@@ -43,9 +43,7 @@
 ;; GTK icons require at least 16 pixels to show normally.
 (defconst exwm-systemtray--icon-min-size 16 "Minimum icon size.")
 
-(defvar exwm-systemtray-height (max exwm-systemtray--icon-min-size
-                                    (line-pixel-height))
-  "System tray height.
+(defvar exwm-systemtray-height nil "System tray height.
 
 You shall use the default value if using auto-hide minibuffer.")
 
@@ -258,12 +256,11 @@ You shall use the default value if using auto-hide minibuffer.")
               (t
                (exwm--log "(System Tray) Unknown opcode message: %s" obj)))))))
 
-(defvar exwm-workspace-minibuffer-position)
 (defvar exwm-workspace--current)
 
 (defun exwm-systemtray--on-workspace-switch ()
   "Reparent/Refresh the system tray in `exwm-workspace-switch-hook'."
-  (unless exwm-workspace-minibuffer-position
+  (unless (exwm-workspace--minibuffer-own-frame-p)
     (xcb:+request exwm-systemtray--connection
         (make-instance 'xcb:ReparentWindow
                        :window exwm-systemtray--embedder
@@ -277,7 +274,7 @@ You shall use the default value if using auto-hide minibuffer.")
 
 (defun exwm-systemtray--on-randr-refresh ()
   "Reposition/Refresh the system tray in `exwm-randr-refresh-hook'."
-  (unless exwm-workspace-minibuffer-position
+  (unless (exwm-workspace--minibuffer-own-frame-p)
     (xcb:+request exwm-systemtray--connection
         (make-instance 'xcb:ConfigureWindow
                        :window exwm-systemtray--embedder
@@ -295,6 +292,9 @@ You shall use the default value if using auto-hide minibuffer.")
   (cl-assert (not exwm-systemtray--list))
   (cl-assert (not exwm-systemtray--selection-owner-window))
   (cl-assert (not exwm-systemtray--embedder))
+  (unless exwm-systemtray-height
+    (setq exwm-systemtray-height (max exwm-systemtray--icon-min-size
+                                      (line-pixel-height))))
   ;; Create a new connection.
   (setq exwm-systemtray--connection (xcb:connect-to-socket))
   (set-process-query-on-exit-flag (slot-value exwm-systemtray--connection
@@ -345,7 +345,7 @@ You shall use the default value if using auto-hide minibuffer.")
                        :border-width 0 :class xcb:WindowClass:CopyFromParent
                        :visual 0 :value-mask xcb:CW:EventMask
                        :event-mask xcb:EventMask:SubstructureNotify))
-    (if exwm-workspace-minibuffer-position
+    (if (exwm-workspace--minibuffer-own-frame-p)
         (setq parent (frame-parameter exwm-workspace--minibuffer
                                       'exwm-container)
               ;; Vertically centered.
diff --git a/exwm-workspace.el b/exwm-workspace.el
index 99bc605e5f20..07bfdd9d5e37 100644
--- a/exwm-workspace.el
+++ b/exwm-workspace.el
@@ -274,7 +274,7 @@ The optional FORCE option is for internal use only."
                                  (frame-parameter frame 'exwm-workspace)
                                  :x x :y y))
               (xcb:flush exwm--connection)
-              (unless exwm-workspace-minibuffer-position
+              (unless (exwm-workspace--minibuffer-own-frame-p)
                 ;; The frame needs to be recreated since it won't use the
                 ;; minibuffer on the new workspace.
                 (let* ((old-frame exwm--floating-frame)
@@ -567,7 +567,7 @@ This functions is modified from `display-buffer-reuse-window' and
       (xcb:+request exwm--connection
           (make-instance 'xcb:MapWindow :window (car i))))
     ;; Reparent out the minibuffer frame.
-    (when exwm-workspace-minibuffer-position
+    (when (exwm-workspace--minibuffer-own-frame-p)
       (xcb:+request exwm--connection
           (make-instance 'xcb:ReparentWindow
                          :window (frame-parameter exwm-workspace--minibuffer
@@ -614,13 +614,14 @@ This functions is modified from `display-buffer-reuse-window' and
       (setq exwm-workspace--minibuffer
             (make-frame '((window-system . x) (minibuffer . only)
                           (left . 10000) (right . 10000)
-                          (width . 0) (height . 0)))
-            default-minibuffer-frame exwm-workspace--minibuffer)
+                          (width . 0) (height . 0))))
       ;; Remove/hide existing frames.
       (dolist (f old-frames)
         (if (frame-parameter f 'client)
             (make-frame-invisible f)
           (delete-frame f))))
+    ;; This is the only usable minibuffer frame.
+    (setq default-minibuffer-frame exwm-workspace--minibuffer)
     (let ((outer-id (string-to-number
                      (frame-parameter exwm-workspace--minibuffer
                                       'outer-window-id)))
diff --git a/exwm.el b/exwm.el
index b425acf7b538..d3d2c10255b9 100644
--- a/exwm.el
+++ b/exwm.el
@@ -462,7 +462,7 @@
   (let* ((workareas
           (vector 0 0 (x-display-pixel-width)
                   (- (x-display-pixel-height)
-                     (if exwm-workspace-minibuffer-position
+                     (if (exwm-workspace--minibuffer-own-frame-p)
                          0
                        (window-pixel-height (minibuffer-window))))))
          (workareas (mapconcat (lambda (_) workareas)