From 2c3ea60c7960acfc2095c9f0e067d02d6490ba0d Mon Sep 17 00:00:00 2001 From: Sasha Szpakowski Date: Sat, 1 Apr 2023 18:02:16 -0300 Subject: [PATCH] Add love.window.focus (resolves #1911). Calling the function brings the window into the foreground and makes it the focused window for keyboard input. --- src/modules/window/Window.h | 1 + src/modules/window/sdl/Window.cpp | 9 +++++++++ src/modules/window/sdl/Window.h | 1 + src/modules/window/wrap_Window.cpp | 7 +++++++ 4 files changed, 18 insertions(+) diff --git a/src/modules/window/Window.h b/src/modules/window/Window.h index 15cc02bda..773815587 100644 --- a/src/modules/window/Window.h +++ b/src/modules/window/Window.h @@ -178,6 +178,7 @@ public: virtual void minimize() = 0; virtual void maximize() = 0; virtual void restore() = 0; + virtual void focus() = 0; virtual bool isMaximized() const = 0; virtual bool isMinimized() const = 0; diff --git a/src/modules/window/sdl/Window.cpp b/src/modules/window/sdl/Window.cpp index c37537413..481b45779 100644 --- a/src/modules/window/sdl/Window.cpp +++ b/src/modules/window/sdl/Window.cpp @@ -1182,6 +1182,15 @@ void Window::restore() } } +void Window::focus() +{ + if (window != nullptr) + { + SDL_RaiseWindow(window); + updateSettings(settings, true); + } +} + bool Window::isMaximized() const { return window != nullptr && (SDL_GetWindowFlags(window) & SDL_WINDOW_MAXIMIZED); diff --git a/src/modules/window/sdl/Window.h b/src/modules/window/sdl/Window.h index 5b6bf27fb..1d2770dd2 100644 --- a/src/modules/window/sdl/Window.h +++ b/src/modules/window/sdl/Window.h @@ -87,6 +87,7 @@ public: void minimize() override; void maximize() override; void restore() override; + void focus() override; bool isMaximized() const override; bool isMinimized() const override; diff --git a/src/modules/window/wrap_Window.cpp b/src/modules/window/wrap_Window.cpp index 60c2ca340..3d3d86708 100644 --- a/src/modules/window/wrap_Window.cpp +++ b/src/modules/window/wrap_Window.cpp @@ -548,6 +548,12 @@ int w_restore(lua_State *) return 0; } +int w_focus(lua_State *) +{ + instance()->focus(); + return 0; +} + int w_isMaximized(lua_State *L) { luax_pushboolean(L, instance()->isMaximized()); @@ -668,6 +674,7 @@ static const luaL_Reg functions[] = { "minimize", w_minimize }, { "maximize", w_maximize }, { "restore", w_restore }, + { "focus", w_focus }, { "isMaximized", w_isMaximized }, { "isMinimized", w_isMinimized }, { "showMessageBox", w_showMessageBox },