@ -367,10 +367,13 @@ static bool ImGui_ImplSDL2_Init(SDL_Window* window, void* sdl_gl_context)
io . BackendFlags | = ImGuiBackendFlags_HasMouseCursors ; // We can honor GetMouseCursor() values (optional)
io . BackendFlags | = ImGuiBackendFlags_HasSetMousePos ; // We can honor io.WantSetMousePos requests (optional, rarely used)
if ( mouse_can_use_global_state )
{
io . BackendFlags | = ImGuiBackendFlags_PlatformHasViewports ; // We can create multi-viewports on the Platform side (optional)
// SDL on Linux/OSX doesn't report events for unfocused windows (see https://github.com/ocornut/imgui/issues/4960)
# ifdef _WIN32
if ( mouse_can_use_global_state )
io . BackendFlags | = ImGuiBackendFlags_HasMouseHoveredViewport ; // We can call io.AddMouseViewportEvent() with correct data (optional)
}
# endif
bd - > Window = window ;
bd - > MouseCanUseGlobalState = mouse_can_use_global_state ;
@ -528,11 +531,14 @@ static void ImGui_ImplSDL2_UpdateMouseData()
// for docking, the viewport has the _NoInputs flag in order to allow us to find the viewport under), then Dear ImGui is forced to ignore the value reported
// by the backend, and use its flawed heuristic to guess the viewport behind.
// - [X] SDL backend correctly reports this regardless of another viewport behind focused and dragged from (we need this to find a useful drag and drop target).
if ( io . BackendFlags & ImGuiBackendFlags_HasMouseHoveredViewport )
{
ImGuiID mouse_viewport_id = 0 ;
if ( SDL_Window * sdl_mouse_window = SDL_GetWindowFromID ( bd - > MouseWindowID ) )
if ( ImGuiViewport * mouse_viewport = ImGui : : FindViewportByPlatformHandle ( ( void * ) sdl_mouse_window ) )
mouse_viewport_id = mouse_viewport - > ID ;
io . AddMouseViewportEvent ( mouse_viewport_id ) ;
}
}
static void ImGui_ImplSDL2_UpdateMouseCursor ( )