Compare commits

...

5 Commits

Author SHA1 Message Date
halx99
0d91df7942
Merge f1284eb884 into 506c11ba43 2025-07-07 02:00:02 +02:00
Jan Schürkamp
506c11ba43
Wayland: Ignore key repeat events when no window has keyboard focus (#2732)
* Wayland: Ignore key repeat events when no window has keyboard focus
2025-07-05 19:16:08 +02:00
Doug Binks
d30d63313c Examples: disable MSVC warning C5287 in nuklear.h
Latest MSVC has a warning `operands are different enum types` which this disables until upstream nuklear fixes this
2025-07-05 19:12:15 +02:00
halx99
f1284eb884 Fix create as child window style 2024-03-01 21:49:49 +08:00
halx99
a94c9782d5 Add create glfw window as child support for win32 2024-03-01 21:49:49 +08:00
9 changed files with 57 additions and 17 deletions

View File

@ -229,7 +229,7 @@ video tutorials.
- Brandon Schaefer
- Sebastian Schuberth
- Scr3amer
- Jan Schuerkamp
- Jan Schürkamp
- Christian Sdunek
- Matt Sealey
- Steve Sexton

View File

@ -129,6 +129,7 @@ information on what to include when reporting a bug.
- [Wayland] Bugfix: The fractional scaling related objects were not destroyed
- [Wayland] Bugfix: `glfwInit` would segfault on compositor with no seat (#2517)
- [Wayland] Bugfix: A drag entering a non-GLFW surface could cause a segfault
- [Wayland] Bugfix: Ignore key repeat events when no window has keyboard focus (#2727)
- [X11] Bugfix: Running without a WM could trigger an assert (#2593,#2601,#2631)
- [Null] Added Vulkan 'window' surface creation via `VK_EXT_headless_surface`
- [Null] Added EGL context creation on Mesa via `EGL_MESA_platform_surfaceless`

5
deps/nuklear.h vendored
View File

@ -423,6 +423,11 @@ NK_STATIC_ASSERT(sizeof(nk_rune) >= 4);
NK_STATIC_ASSERT(sizeof(nk_size) >= sizeof(void*));
NK_STATIC_ASSERT(sizeof(nk_ptr) >= sizeof(void*));
#if defined(_MSC_VER)
/* disable `operands are different enum types` warning on MSVC */
#pragma warning( disable: 5287 )
#endif
/* ============================================================================
*
* API

View File

@ -1129,6 +1129,7 @@ extern "C" {
/*! @brief Win32 specific [window hint](@ref GLFW_WIN32_SHOWDEFAULT_hint).
*/
#define GLFW_WIN32_SHOWDEFAULT 0x00025002
#define GLFW_WIN32_HWND_PARENT 0x00025003
/*! @brief Wayland specific
* [window hint](@ref GLFW_WAYLAND_APP_ID_hint).
*
@ -3053,6 +3054,14 @@ GLFWAPI void glfwDefaultWindowHints(void);
*/
GLFWAPI void glfwWindowHint(int hint, int value);
/*! @brief Sets the specified window hint to the desired value.
*
* @since Added in version 3.4.x.
*
* @ingroup window
*/
GLFWAPI void glfwWindowHintPointer(int hint, void* value);
/*! @brief Sets the specified window hint to the desired value.
*
* This function sets hints for the next call to @ref glfwCreateWindow. The

View File

@ -425,6 +425,7 @@ struct _GLFWwndconfig
struct {
GLFWbool keymenu;
GLFWbool showDefault;
void* handleParent;
} win32;
struct {
char appId[256];

View File

@ -413,6 +413,7 @@ typedef struct _GLFWlibraryWGL
typedef struct _GLFWwindowWin32
{
HWND handle;
HWND handleParent;
HICON bigIcon;
HICON smallIcon;

View File

@ -46,17 +46,22 @@ static DWORD getWindowStyle(const _GLFWwindow* window)
style |= WS_POPUP;
else
{
style |= WS_SYSMENU | WS_MINIMIZEBOX;
if (window->decorated)
if (!window->win32.handleParent)
{
style |= WS_CAPTION;
style |= WS_SYSMENU | WS_MINIMIZEBOX;
if (window->resizable)
style |= WS_MAXIMIZEBOX | WS_THICKFRAME;
if (window->decorated)
{
style |= WS_CAPTION;
if (window->resizable)
style |= WS_MAXIMIZEBOX | WS_THICKFRAME;
}
else
style |= WS_POPUP;
}
else
style |= WS_POPUP;
style |= WS_CHILD;
}
return style;
@ -1391,7 +1396,7 @@ static int createNativeWindow(_GLFWwindow* window,
style,
frameX, frameY,
frameWidth, frameHeight,
NULL, // No parent window
(HWND)wndconfig->win32.handleParent,
NULL, // No window menu
_glfw.win32.instance,
(LPVOID) wndconfig);
@ -1497,6 +1502,8 @@ GLFWbool _glfwCreateWindowWin32(_GLFWwindow* window,
const _GLFWctxconfig* ctxconfig,
const _GLFWfbconfig* fbconfig)
{
window->win32.handleParent = wndconfig->win32.handleParent;
if (!createNativeWindow(window, wndconfig, fbconfig))
return GLFW_FALSE;

View File

@ -436,6 +436,18 @@ GLFWAPI void glfwWindowHint(int hint, int value)
_glfwInputError(GLFW_INVALID_ENUM, "Invalid window hint 0x%08X", hint);
}
GLFWAPI void glfwWindowHintPointer(int hint, void* value)
{
_GLFW_REQUIRE_INIT();
switch (hint)
{
case GLFW_WIN32_HWND_PARENT:
_glfw.hints.window.win32.handleParent = value;
break;
}
}
GLFWAPI void glfwWindowHintString(int hint, const char* value)
{
assert(value != NULL);

View File

@ -1267,17 +1267,21 @@ static void handleEvents(double* timeout)
if (read(_glfw.wl.keyRepeatTimerfd, &repeats, sizeof(repeats)) == 8)
{
for (uint64_t i = 0; i < repeats; i++)
if(_glfw.wl.keyboardFocus)
{
_glfwInputKey(_glfw.wl.keyboardFocus,
translateKey(_glfw.wl.keyRepeatScancode),
_glfw.wl.keyRepeatScancode,
GLFW_PRESS,
_glfw.wl.xkb.modifiers);
inputText(_glfw.wl.keyboardFocus, _glfw.wl.keyRepeatScancode);
for (uint64_t i = 0; i < repeats; i++)
{
_glfwInputKey(_glfw.wl.keyboardFocus,
translateKey(_glfw.wl.keyRepeatScancode),
_glfw.wl.keyRepeatScancode,
GLFW_PRESS,
_glfw.wl.xkb.modifiers);
inputText(_glfw.wl.keyboardFocus, _glfw.wl.keyRepeatScancode);
}
event = GLFW_TRUE;
}
event = GLFW_TRUE;
}
}