|
@@ -16,7 +16,8 @@
|
|
|
|
|
|
// CHANGELOG
|
|
|
// (minor and older changes stripped away, please see git history for details)
|
|
|
-// 2021-07-29: *BREAKING CHANGE*: Inputs: MousePos is correctly reported when the host platform window is hovered but not focused (using glfwSetCursorEnterCallback). If you called ImGui_ImplGlfw_InitXXX() with install_callbacks = false, you MUST install the glfwSetCursorEnterCallback() callback and the forward to the backend via ImGui_ImplGlfw_CursorEnterCallback().
|
|
|
+// 2021-08-17: *BREAKING CHANGE*: Now using glfwSetWindowFocusCallback() to calling io.AddFocusEvent(). If you called ImGui_ImplGlfw_InitXXX() with install_callbacks = false, you MUST install glfwSetWindowFocusCallback() and forward it to the backend via ImGui_ImplGlfw_WindowFocusCallback().
|
|
|
+// 2021-07-29: *BREAKING CHANGE*: Now using glfwSetCursorEnterCallback(). MousePos is correctly reported when the host platform window is hovered but not focused. If you called ImGui_ImplGlfw_InitXXX() with install_callbacks = false, you MUST install glfwSetWindowFocusCallback() callback and forward it to the backend via ImGui_ImplGlfw_CursorEnterCallback().
|
|
|
// 2021-06-29: Reorganized backend to pull data from a single structure to facilitate usage with multiple-contexts (all g_XXXX access changed to bd->XXXX).
|
|
|
// 2020-01-17: Inputs: Disable error callback while assigning mouse cursors because some X11 setup don't have them and it generates errors.
|
|
|
// 2019-12-05: Inputs: Added support for new mouse cursors added in GLFW 3.4+ (resizing cursors, not allowed cursor).
|
|
@@ -80,6 +81,7 @@ struct ImGui_ImplGlfw_Data
|
|
|
bool InstalledCallbacks;
|
|
|
|
|
|
// Chain GLFW callbacks: our callbacks will call the user's previously installed callbacks, if any.
|
|
|
+ GLFWwindowfocusfun PrevUserCallbackWindowFocus;
|
|
|
GLFWcursorenterfun PrevUserCallbackCursorEnter;
|
|
|
GLFWmousebuttonfun PrevUserCallbackMousebutton;
|
|
|
GLFWscrollfun PrevUserCallbackScroll;
|
|
@@ -160,11 +162,22 @@ void ImGui_ImplGlfw_KeyCallback(GLFWwindow* window, int key, int scancode, int a
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
+void ImGui_ImplGlfw_WindowFocusCallback(GLFWwindow* window, int focused)
|
|
|
+{
|
|
|
+ ImGui_ImplGlfw_Data* bd = ImGui_ImplGlfw_GetBackendData();
|
|
|
+ if (bd->PrevUserCallbackWindowFocus != NULL && window == bd->Window)
|
|
|
+ bd->PrevUserCallbackWindowFocus(window, focused);
|
|
|
+
|
|
|
+ ImGuiIO& io = ImGui::GetIO();
|
|
|
+ io.AddFocusEvent(focused != 0);
|
|
|
+}
|
|
|
+
|
|
|
void ImGui_ImplGlfw_CursorEnterCallback(GLFWwindow* window, int entered)
|
|
|
{
|
|
|
ImGui_ImplGlfw_Data* bd = ImGui_ImplGlfw_GetBackendData();
|
|
|
- if (bd->PrevUserCallbackCursorEnter != NULL)
|
|
|
+ if (bd->PrevUserCallbackCursorEnter != NULL && window == bd->Window)
|
|
|
bd->PrevUserCallbackCursorEnter(window, entered);
|
|
|
+
|
|
|
if (entered)
|
|
|
bd->MouseWindow = window;
|
|
|
if (!entered && bd->MouseWindow == window)
|
|
@@ -256,6 +269,7 @@ static bool ImGui_ImplGlfw_Init(GLFWwindow* window, bool install_callbacks, Glfw
|
|
|
glfwSetErrorCallback(prev_error_callback);
|
|
|
|
|
|
// Chain GLFW callbacks: our callbacks will call the user's previously installed callbacks, if any.
|
|
|
+ bd->PrevUserCallbackWindowFocus = NULL;
|
|
|
bd->PrevUserCallbackMousebutton = NULL;
|
|
|
bd->PrevUserCallbackScroll = NULL;
|
|
|
bd->PrevUserCallbackKey = NULL;
|
|
@@ -264,6 +278,7 @@ static bool ImGui_ImplGlfw_Init(GLFWwindow* window, bool install_callbacks, Glfw
|
|
|
if (install_callbacks)
|
|
|
{
|
|
|
bd->InstalledCallbacks = true;
|
|
|
+ bd->PrevUserCallbackWindowFocus = glfwSetWindowFocusCallback(window, ImGui_ImplGlfw_WindowFocusCallback);
|
|
|
bd->PrevUserCallbackCursorEnter = glfwSetCursorEnterCallback(window, ImGui_ImplGlfw_CursorEnterCallback);
|
|
|
bd->PrevUserCallbackMousebutton = glfwSetMouseButtonCallback(window, ImGui_ImplGlfw_MouseButtonCallback);
|
|
|
bd->PrevUserCallbackScroll = glfwSetScrollCallback(window, ImGui_ImplGlfw_ScrollCallback);
|
|
@@ -298,6 +313,7 @@ void ImGui_ImplGlfw_Shutdown()
|
|
|
|
|
|
if (bd->InstalledCallbacks)
|
|
|
{
|
|
|
+ glfwSetWindowFocusCallback(bd->Window, bd->PrevUserCallbackWindowFocus);
|
|
|
glfwSetCursorEnterCallback(bd->Window, bd->PrevUserCallbackCursorEnter);
|
|
|
glfwSetMouseButtonCallback(bd->Window, bd->PrevUserCallbackMousebutton);
|
|
|
glfwSetScrollCallback(bd->Window, bd->PrevUserCallbackScroll);
|