[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/ement 0d71dfbe6f 2/4: Fix: (ement-room-start-read-recei
From: |
ELPA Syncer |
Subject: |
[elpa] externals/ement 0d71dfbe6f 2/4: Fix: (ement-room-start-read-receipt-timer) Set timer in variable |
Date: |
Fri, 9 Sep 2022 17:57:44 -0400 (EDT) |
branch: externals/ement
commit 0d71dfbe6f822148291cddf4a7146e5c47fdca23
Author: Adam Porter <adam@alphapapa.net>
Commit: Adam Porter <adam@alphapapa.net>
Fix: (ement-room-start-read-receipt-timer) Set timer in variable
---
README.org | 3 ++-
ement-room.el | 41 +++++++++++++++++++++--------------------
2 files changed, 23 insertions(+), 21 deletions(-)
diff --git a/README.org b/README.org
index d3ac334082..3a005c1700 100644
--- a/README.org
+++ b/README.org
@@ -272,7 +272,8 @@ Note that, while ~matrix-client~ remains usable, and
probably will for some time
** 0.1.3-pre
-Nothing new yet.
+*Fixed*
++ Read receipt-sending function was called too many times when scrolling.
** 0.1.2
diff --git a/ement-room.el b/ement-room.el
index ed561ab333..5a142d31fc 100644
--- a/ement-room.el
+++ b/ement-room.el
@@ -2450,26 +2450,27 @@ WINDOW's end is beyond the marker. For use in
;; get updated if the user only views a room's buffer for a
;; short time.
(let ((room-buffer (window-buffer window)))
- (run-with-idle-timer
- 3 nil (lambda ()
- (when (and (windowp window)
- (eq (window-buffer window) room-buffer))
- (with-selected-window window
- (when-let ((read-receipt-node
(ement-room--ewoc-last-matching ement-ewoc
- (lambda (node-data)
- (eq
'ement-room-read-receipt-marker node-data)))))
- ;; The read-receipt marker is visible (i.e. it's not
between
- ;; earlier events which we have not retrieved).
- (when (> (window-end) (ewoc-location read-receipt-node))
- ;; The window's end has been scrolled past the
position of the receipt marker.
- (when-let* ((window-end-node (or (ewoc-locate
ement-ewoc (window-end))
- (ewoc-nth ement-ewoc
-1)))
- (event-node (cl-typecase (ewoc-data
window-end-node)
- (ement-event
window-end-node)
- (t
(ement-room--ewoc-next-matching ement-ewoc window-end-node
- #'ement-event-p
#'ewoc-prev)))))
- (ement-room-mark-read ement-room ement-session
- :read-event (ewoc-data event-node)))))))))))))
+ (setf ement-room-read-receipt-timer
+ (run-with-idle-timer
+ 3 nil (lambda ()
+ (when (and (windowp window)
+ (eq (window-buffer window) room-buffer))
+ (with-selected-window window
+ (when-let ((read-receipt-node
(ement-room--ewoc-last-matching ement-ewoc
+ (lambda (node-data)
+ (eq
'ement-room-read-receipt-marker node-data)))))
+ ;; The read-receipt marker is visible (i.e. it's
not between
+ ;; earlier events which we have not retrieved).
+ (when (> (window-end) (ewoc-location
read-receipt-node))
+ ;; The window's end has been scrolled past the
position of the receipt marker.
+ (when-let* ((window-end-node (or (ewoc-locate
ement-ewoc (window-end))
+ (ewoc-nth
ement-ewoc -1)))
+ (event-node (cl-typecase (ewoc-data
window-end-node)
+ (ement-event
window-end-node)
+ (t
(ement-room--ewoc-next-matching ement-ewoc window-end-node
+ #'ement-event-p
#'ewoc-prev)))))
+ (ement-room-mark-read ement-room ement-session
+ :read-event (ewoc-data
event-node))))))))))))))
(defun ement-room-goto-fully-read-marker ()
"Move to the fully-read marker in the current room."