From ea579771a7423168ac37047b6e57c071fab1de20 Mon Sep 17 00:00:00 2001 From: Vincent Wei Date: Sun, 27 Nov 2022 16:28:45 +0800 Subject: [PATCH] tune the implementation of auto-repeat message --- src/kernel/desktop-comm.c | 7 ++++++- src/kernel/desktop-procs.c | 8 +++++++- src/kernel/desktop-sa.c | 1 + src/kernel/desktop-ths.c | 1 + 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/kernel/desktop-comm.c b/src/kernel/desktop-comm.c index 1d393407..54389f57 100644 --- a/src/kernel/desktop-comm.c +++ b/src/kernel/desktop-comm.c @@ -1429,6 +1429,8 @@ static LRESULT WindowMessageHandler(UINT message, PMAINWIN pWin, LPARAM lParam) /* Since 5.0.0 */ case MSG_SETAUTOREPEAT: sg_msgAutoRepeat = *(const MSG*)lParam; + /* start auto-repeat after 300ms */ + sg_msgAutoRepeat.time = __mg_tick_counter + (__mg_timeout_usec/10000); break; /* Since 5.0.0 */ @@ -1873,9 +1875,12 @@ static void dskOnTimeout (void) static DWORD uCounter = 0; static DWORD blink_counter = 0; - if (sg_msgAutoRepeat.hwnd != 0) { + if (sg_msgAutoRepeat.hwnd != 0 && + __mg_tick_counter >= sg_msgAutoRepeat.time) { PostMessage (sg_msgAutoRepeat.hwnd, sg_msgAutoRepeat.message, sg_msgAutoRepeat.wParam, sg_msgAutoRepeat.lParam); + /* next auto-repeat msg after 50ms */ + sg_msgAutoRepeat.time = __mg_tick_counter + (__mg_repeat_usec/10000); } if (__mg_tick_counter < (blink_counter + 10)) diff --git a/src/kernel/desktop-procs.c b/src/kernel/desktop-procs.c index fbecee66..ba775e3b 100644 --- a/src/kernel/desktop-procs.c +++ b/src/kernel/desktop-procs.c @@ -78,6 +78,7 @@ #include "server.h" #include "drawsemop.h" #include "devfont.h" +#include "event.h" /******************************* global data *********************************/ PMSGQUEUE __mg_dsk_msg_queue; @@ -2748,6 +2749,8 @@ static LRESULT dskWindowMessageHandler (UINT message, /* Since 5.0.0 */ case MSG_SETAUTOREPEAT: sg_msgAutoRepeat = *(const MSG*)lParam; + /* start auto-repeat after 300ms */ + sg_msgAutoRepeat.time = __mg_tick_counter + (__mg_timeout_usec/10000); break; } @@ -4204,9 +4207,12 @@ static void dskOnTimeout (void) static UINT uCounter = 0; static UINT blink_counter = 0; - if (sg_msgAutoRepeat.hwnd != 0) { + if (sg_msgAutoRepeat.hwnd != 0 && + __mg_tick_counter >= sg_msgAutoRepeat.time) { PostMessage (sg_msgAutoRepeat.hwnd, sg_msgAutoRepeat.message, sg_msgAutoRepeat.wParam, sg_msgAutoRepeat.lParam); + /* next auto-repeat msg after 50ms */ + sg_msgAutoRepeat.time = __mg_tick_counter + (__mg_repeat_usec/10000); } if (__mg_tick_counter < (blink_counter + 10)) diff --git a/src/kernel/desktop-sa.c b/src/kernel/desktop-sa.c index fffa09e7..c843fa12 100644 --- a/src/kernel/desktop-sa.c +++ b/src/kernel/desktop-sa.c @@ -74,6 +74,7 @@ #include "dc.h" #include "misc.h" #include "devfont.h" +#include "event.h" #ifndef WIN32 #include diff --git a/src/kernel/desktop-ths.c b/src/kernel/desktop-ths.c index 1068a87e..954584b3 100644 --- a/src/kernel/desktop-ths.c +++ b/src/kernel/desktop-ths.c @@ -72,6 +72,7 @@ #include "dc.h" #include "misc.h" #include "devfont.h" +#include "event.h" /******************************* global data *********************************/ /* pointer to desktop message queue */