diff --git a/glfw/cocoa_window.m b/glfw/cocoa_window.m index be0bc9cd8..7ada57e5e 100644 --- a/glfw/cocoa_window.m +++ b/glfw/cocoa_window.m @@ -2179,9 +2179,9 @@ GLFWAPI void glfwCocoaRequestRenderFrame(GLFWwindow *w, GLFWcocoarenderframefun requestRenderFrame((_GLFWwindow*)w, callback); } -GLFWAPI void glfwGetCocoaKeyEquivalent(int glfw_key, int glfw_mods, char cocoa_key[32], int *cocoa_mods) { +GLFWAPI void glfwGetCocoaKeyEquivalent(int glfw_key, int glfw_mods, char *cocoa_key, size_t key_sz, int *cocoa_mods) { *cocoa_mods = 0; - memset(cocoa_key, 0, sizeof(cocoa_key)); + memset(cocoa_key, 0, key_sz); if (glfw_mods & GLFW_MOD_SHIFT) *cocoa_mods |= NSEventModifierFlagShift; @@ -2334,13 +2334,13 @@ START_ALLOW_CASE_RANGE END_ALLOW_CASE_RANGE } if (utf_16_key != 0) { - strncpy(cocoa_key, [[NSString stringWithCharacters:&utf_16_key length:1] UTF8String], sizeof(cocoa_key) - 1); + strncpy(cocoa_key, [[NSString stringWithCharacters:&utf_16_key length:1] UTF8String], key_sz - 1); } else { unsigned str_pos = 0; - for (unsigned i = 0; i < 4 && str_pos < sizeof(cocoa_key) - 1; i++) { + for (unsigned i = 0; i < 4 && str_pos < key_sz - 1; i++) { uint8_t byte = (utf_8_key >> 24) & 0xff; utf_8_key <<= 8; - if (byte != 0) tmp_cocoa_key[str_pos++] = byte; + if (byte != 0) cocoa_key[str_pos++] = byte; } cocoa_key[str_pos] = 0; } diff --git a/glfw/glfw.py b/glfw/glfw.py index 6e19ceb81..4e8aae0e4 100755 --- a/glfw/glfw.py +++ b/glfw/glfw.py @@ -166,7 +166,7 @@ def generate_wrappers(glfw_header): GLFWcocoatogglefullscreenfun glfwSetCocoaToggleFullscreenIntercept(GLFWwindow *window, GLFWcocoatogglefullscreenfun callback) GLFWapplicationshouldhandlereopenfun glfwSetApplicationShouldHandleReopen(GLFWapplicationshouldhandlereopenfun callback) GLFWapplicationwillfinishlaunchingfun glfwSetApplicationWillFinishLaunching(GLFWapplicationwillfinishlaunchingfun callback) - void glfwGetCocoaKeyEquivalent(int glfw_key, int glfw_mods, char[32] cocoa_key, int* cocoa_mods) + void glfwGetCocoaKeyEquivalent(int glfw_key, int glfw_mods, char* cocoa_key, size_t key_sz, int* cocoa_mods) void glfwCocoaRequestRenderFrame(GLFWwindow *w, GLFWcocoarenderframefun callback) void* glfwGetX11Display(void) int32_t glfwGetX11Window(GLFWwindow* window) diff --git a/kitty/cocoa_window.m b/kitty/cocoa_window.m index ccf31b280..1b70c8b58 100644 --- a/kitty/cocoa_window.m +++ b/kitty/cocoa_window.m @@ -105,7 +105,7 @@ cocoa_set_new_window_trigger(PyObject *self UNUSED, PyObject *args) { int mods, key; if (!PyArg_ParseTuple(args, "ii", &mods, &key)) return NULL; int nwm; - get_cocoa_key_equivalent(key, mods, new_window_key, &nwm); + get_cocoa_key_equivalent(key, mods, new_window_key, sizeof(new_window_key), &nwm); new_window_mods = nwm; if (new_window_key[0]) Py_RETURN_TRUE; Py_RETURN_FALSE; diff --git a/kitty/glfw-wrapper.h b/kitty/glfw-wrapper.h index 1ed5d952b..11c83b173 100644 --- a/kitty/glfw-wrapper.h +++ b/kitty/glfw-wrapper.h @@ -2083,7 +2083,7 @@ typedef GLFWapplicationwillfinishlaunchingfun (*glfwSetApplicationWillFinishLaun glfwSetApplicationWillFinishLaunching_func glfwSetApplicationWillFinishLaunching_impl; #define glfwSetApplicationWillFinishLaunching glfwSetApplicationWillFinishLaunching_impl -typedef void (*glfwGetCocoaKeyEquivalent_func)(int, int, char[32], int*); +typedef void (*glfwGetCocoaKeyEquivalent_func)(int, int, char*, size_t, int*); glfwGetCocoaKeyEquivalent_func glfwGetCocoaKeyEquivalent_impl; #define glfwGetCocoaKeyEquivalent glfwGetCocoaKeyEquivalent_impl diff --git a/kitty/glfw.c b/kitty/glfw.c index 58b9ebe03..1aea6f5cc 100644 --- a/kitty/glfw.c +++ b/kitty/glfw.c @@ -1079,8 +1079,8 @@ set_custom_cursor(PyObject *self UNUSED, PyObject *args) { #ifdef __APPLE__ void -get_cocoa_key_equivalent(int key, int mods, char cocoa_key[32], int *cocoa_mods) { - glfwGetCocoaKeyEquivalent(key, mods, cocoa_key, cocoa_mods); +get_cocoa_key_equivalent(int key, int mods, char cocoa_key, size_t key_sz, int *cocoa_mods) { + glfwGetCocoaKeyEquivalent(key, mods, cocoa_key, key_sz, cocoa_mods); } static void diff --git a/kitty/state.h b/kitty/state.h index 7031e1ee9..5b4738ae1 100644 --- a/kitty/state.h +++ b/kitty/state.h @@ -225,7 +225,7 @@ void set_titlebar_color(OSWindow *w, color_type color); FONTS_DATA_HANDLE load_fonts_data(double, double, double); void send_prerendered_sprites_for_window(OSWindow *w); #ifdef __APPLE__ -void get_cocoa_key_equivalent(int, int, char key[32], int*); +void get_cocoa_key_equivalent(int, int, char key, size_t key_sz, int*); typedef enum { PREFERENCES_WINDOW = 1, NEW_OS_WINDOW = 2,