From abc614825361e9891e276805c8822759dab7afad Mon Sep 17 00:00:00 2001 From: Samuel Gomes <47574584+a740g@users.noreply.github.com> Date: Sat, 30 Mar 2024 17:31:41 +0530 Subject: [PATCH 1/2] Avoid monitoring special keys when the window is not in focus --- internal/c/libqb.cpp | 44 +++++++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/internal/c/libqb.cpp b/internal/c/libqb.cpp index 84dea5450..6178d1f26 100644 --- a/internal/c/libqb.cpp +++ b/internal/c/libqb.cpp @@ -27544,28 +27544,34 @@ void GLUT_KEYBOARDUP_FUNC(unsigned char key, int x, int y) { GLUT_key_ascii(key, void GLUT_key_special(int32 key, int32 down) { #ifdef QB64_GLUT + +# ifdef QB64_WINDOWS + if (!func__hasfocus()) + return; +# endif + # ifndef CORE_FREEGLUT - /* - static int32 mod; - mod=glutGetModifiers();//shift=1, control=2, alt=4 - if (mod&GLUT_ACTIVE_SHIFT){ - keydown_vk(VK+QBVK_LSHIFT); - }else{ - keyup_vk(VK+QBVK_LSHIFT); - } + /* + static int32 mod; + mod=glutGetModifiers();//shift=1, control=2, alt=4 + if (mod&GLUT_ACTIVE_SHIFT){ + keydown_vk(VK+QBVK_LSHIFT); + }else{ + keyup_vk(VK+QBVK_LSHIFT); + } - if (mod&GLUT_ACTIVE_CTRL){ - keydown_vk(VK+QBVK_LCTRL); - }else{ - keyup_vk(VK+QBVK_LCTRL); - } + if (mod&GLUT_ACTIVE_CTRL){ + keydown_vk(VK+QBVK_LCTRL); + }else{ + keyup_vk(VK+QBVK_LCTRL); + } - if (mod&GLUT_ACTIVE_ALT){ - keydown_vk(VK+QBVK_LALT); - }else{ - keyup_vk(VK+QBVK_LALT); - } - */ + if (mod&GLUT_ACTIVE_ALT){ + keydown_vk(VK+QBVK_LALT); + }else{ + keyup_vk(VK+QBVK_LALT); + } + */ # endif static int32 vk; From edbc7728431fc0576dbbdf11f462de2d5f4f9b25 Mon Sep 17 00:00:00 2001 From: Samuel Gomes <47574584+a740g@users.noreply.github.com> Date: Sat, 30 Mar 2024 22:09:59 +0530 Subject: [PATCH 2/2] Made change per suggestion in #476 --- internal/c/libqb.cpp | 49 ++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/internal/c/libqb.cpp b/internal/c/libqb.cpp index 6178d1f26..19663b8da 100644 --- a/internal/c/libqb.cpp +++ b/internal/c/libqb.cpp @@ -27544,34 +27544,28 @@ void GLUT_KEYBOARDUP_FUNC(unsigned char key, int x, int y) { GLUT_key_ascii(key, void GLUT_key_special(int32 key, int32 down) { #ifdef QB64_GLUT - -# ifdef QB64_WINDOWS - if (!func__hasfocus()) - return; -# endif - # ifndef CORE_FREEGLUT - /* - static int32 mod; - mod=glutGetModifiers();//shift=1, control=2, alt=4 - if (mod&GLUT_ACTIVE_SHIFT){ - keydown_vk(VK+QBVK_LSHIFT); - }else{ - keyup_vk(VK+QBVK_LSHIFT); - } + /* + static int32 mod; + mod=glutGetModifiers();//shift=1, control=2, alt=4 + if (mod&GLUT_ACTIVE_SHIFT){ + keydown_vk(VK+QBVK_LSHIFT); + }else{ + keyup_vk(VK+QBVK_LSHIFT); + } - if (mod&GLUT_ACTIVE_CTRL){ - keydown_vk(VK+QBVK_LCTRL); - }else{ - keyup_vk(VK+QBVK_LCTRL); - } + if (mod&GLUT_ACTIVE_CTRL){ + keydown_vk(VK+QBVK_LCTRL); + }else{ + keyup_vk(VK+QBVK_LCTRL); + } - if (mod&GLUT_ACTIVE_ALT){ - keydown_vk(VK+QBVK_LALT); - }else{ - keyup_vk(VK+QBVK_LALT); - } - */ + if (mod&GLUT_ACTIVE_ALT){ + keydown_vk(VK+QBVK_LALT); + }else{ + keyup_vk(VK+QBVK_LALT); + } + */ # endif static int32 vk; @@ -27662,6 +27656,11 @@ void GLUT_key_special(int32 key, int32 down) { # endif if (vk != -1) { +# ifdef QB64_WINDOWS + if (!func__hasfocus() && !(keyheld(vk) && !down)) + return; +# endif + if (down) keydown_vk(vk); else