about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--exwm-core.el6
-rw-r--r--exwm-input.el17
-rw-r--r--exwm-layout.el3
3 files changed, 12 insertions, 14 deletions
diff --git a/exwm-core.el b/exwm-core.el
index 612a26f59fde..1f939491c5ef 100644
--- a/exwm-core.el
+++ b/exwm-core.el
@@ -158,7 +158,11 @@ least SECS seconds later."
 (defvar-local exwm--mode-line-format nil) ;save mode-line-format
 (defvar-local exwm--floating-frame-position nil) ;set when hidden.
 (defvar-local exwm--fixed-size nil)              ;fixed size
-(defvar-local exwm--input-mode 'line-mode)       ;Keyboard grabbed.
+(defvar-local exwm--selected-input-mode 'line-mode
+  "Input mode as selected by the user.
+One of `line-mode' or `char-mode'.")
+(defvar-local exwm--input-mode 'line-mode
+  "Actual input mode, i.e. whether mouse and keyboard are grabbed.")
 ;; Properties
 (defvar-local exwm--desktop nil "_NET_WM_DESKTOP.")
 (defvar-local exwm-window-type nil "_NET_WM_WINDOW_TYPE.")
diff --git a/exwm-input.el b/exwm-input.el
index 6e8f6d814a70..c757b09d3fa6 100644
--- a/exwm-input.el
+++ b/exwm-input.el
@@ -411,7 +411,7 @@ ARGS are additional arguments to CALLBACK."
                  (when window (select-window window))))
              (with-current-buffer buffer
                (when (derived-mode-p 'exwm-mode)
-                 (cl-case (exwm-input--current-input-mode)
+                 (cl-case exwm--input-mode
                    (line-mode
                     (setq mode (exwm-input--on-ButtonPress-line-mode buffer button-event)))
                    (char-mode
@@ -427,7 +427,7 @@ ARGS are additional arguments to CALLBACK."
     (exwm--log "major-mode=%s buffer=%s"
                major-mode (buffer-name (current-buffer)))
     (if (derived-mode-p 'exwm-mode)
-        (cl-case (exwm-input--current-input-mode)
+        (cl-case exwm--input-mode
           (line-mode
            (exwm-input--on-KeyPress-line-mode obj data))
           (char-mode
@@ -688,17 +688,10 @@ The return value is used as event_mode to release the original
 button event."
   xcb:Allow:ReplayPointer)
 
-(defun exwm-input--current-input-mode ()
-  "Return current input mode.
-The return value is one of the symbols \\='line-mode or \\=`char-mode.
-
-Current buffer must be an `exwm-mode' buffer."
-  exwm--input-mode)
-
 (defun exwm-input--update-mode-line (id)
   "Update the propertized `mode-line-process' for window ID."
   (let (help-echo cmd mode)
-    (cl-case (exwm-input--current-input-mode)
+    (cl-case exwm--input-mode
       (line-mode
        (setq mode "line"
              help-echo "mouse-1: Switch to char-mode"
@@ -763,6 +756,7 @@ Current buffer must be an `exwm-mode' buffer."
                        (exwm--buffer->id (window-buffer)))))
   (when id
     (exwm--log "id=#x%x" id)
+    (setq exwm--selected-input-mode 'line-mode)
     (exwm-input--grab-keyboard id)
     (exwm-input--update-mode-line id)))
 
@@ -773,6 +767,7 @@ Current buffer must be an `exwm-mode' buffer."
                        (exwm--buffer->id (window-buffer)))))
   (when id
     (exwm--log "id=#x%x" id)
+    (setq exwm--selected-input-mode  'char-mode)
     (exwm-input--release-keyboard id)
     (exwm-input--update-mode-line id)))
 
@@ -784,7 +779,7 @@ Current buffer must be an `exwm-mode' buffer."
   (when id
     (exwm--log "id=#x%x" id)
     (with-current-buffer (exwm--id->buffer id)
-      (cl-case (exwm-input--current-input-mode)
+      (cl-case exwm--input-mode
         (line-mode
          (exwm-input-release-keyboard id))
         (char-mode
diff --git a/exwm-layout.el b/exwm-layout.el
index 90988faae07f..bee6901f8291 100644
--- a/exwm-layout.el
+++ b/exwm-layout.el
@@ -45,7 +45,6 @@
 (defvar exwm-layout--timer nil "Timer used to track echo area changes.")
 
 (defvar exwm-workspace--current)
-(declare-function exwm-input--current-input-mode "exwm-input.el")
 (declare-function exwm-input--release-keyboard "exwm-input.el")
 (declare-function exwm-input--grab-keyboard "exwm-input.el")
 (declare-function exwm-input-grab-keyboard "exwm-input.el")
@@ -200,7 +199,7 @@
         (make-instance 'xcb:ewmh:set-_NET_WM_STATE :window exwm--id :data []))
     (xcb:flush exwm--connection)
     (set-window-dedicated-p (get-buffer-window) nil)
-    (when (eq 'line-mode (exwm-input--current-input-mode))
+    (when (eq 'line-mode exwm--selected-input-mode)
       (exwm-input--grab-keyboard exwm--id))))
 
 ;;;###autoload