[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master ae8b1b8fd4: Implement `display-monitors-changed-functions' on MS
From: |
Po Lu |
Subject: |
master ae8b1b8fd4: Implement `display-monitors-changed-functions' on MS Windows |
Date: |
Sun, 22 May 2022 05:16:35 -0400 (EDT) |
branch: master
commit ae8b1b8fd476b8c6240c1337c0c51763d4879ac9
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>
Implement `display-monitors-changed-functions' on MS Windows
* src/w32term.c (w32_read_socket): Handle WM_DISPLAYCHANGE by
sending monitor change events.
---
src/w32term.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/src/w32term.c b/src/w32term.c
index da7ac37972..373c5b5f78 100644
--- a/src/w32term.c
+++ b/src/w32term.c
@@ -5912,6 +5912,29 @@ w32_read_socket (struct terminal *terminal,
(short) HIWORD (msg.msg.lParam)));
}
+ /* According to the MS documentation, this message is sent
+ to each window whenever a monitor is added, removed, or
+ has its resolution change. Detect duplicate events when
+ there are multiple frames by ensuring only one event is
+ put in the keyboard buffer at any given time. */
+ {
+ union buffered_input_event *ev;
+
+ ev = (kbd_store_ptr == kbd_buffer
+ ? kbd_buffer + KBD_BUFFER_SIZE - 1
+ : kbd_store_ptr - 1);
+
+ if (kbd_store_ptr != kbd_fetch_ptr
+ && ev->ie.kind == MONITORS_CHANGED_EVENT
+ && XTERMINAL (ev->ie.arg) == dpyinfo->terminal)
+ /* Don't store a MONITORS_CHANGED_EVENT if there is
+ already an undelivered event on the queue. */
+ break;
+
+ inev.kind = MONITORS_CHANGED_EVENT;
+ XSETTERMINAL (inev.arg, dpyinfo->terminal);
+ }
+
check_visibility = 1;
break;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master ae8b1b8fd4: Implement `display-monitors-changed-functions' on MS Windows,
Po Lu <=