@@ -876,19 +876,25 @@ static void ImGui_ImplSDL2_CreateWindow(ImGuiViewport* viewport)
876
876
float y_pos = viewport->Pos .y - main_viewport->Pos .y ;
877
877
878
878
NativeChildWindow *child_window = new NativeChildWindow;
879
-
880
- void *parent_ptr = nullptr ;
881
-
882
- SDL_Window* sdl_mouse_window = SDL_GetWindowFromID (bd->MouseWindowID );
883
879
880
+ ImGuiViewport *parent_viewport = ImGui::FindViewportByID (viewport->ParentViewportId );
881
+
882
+ while (parent_viewport->Flags & ImGuiViewportFlags_NativeChild)
883
+ parent_viewport = ImGui::FindViewportByID (parent_viewport->ParentViewportId );
884
+
885
+ ImGui_ImplSDL2_ViewportData *parent_viewport_data = (ImGui_ImplSDL2_ViewportData *)parent_viewport->PlatformUserData ;
886
+
887
+ void *parent_ptr = nullptr ;
888
+ SDL_Window *parent_window = parent_viewport_data->Window ;
889
+
884
890
#ifdef __linux__
885
891
parent_ptr = sdl_mouse_window;
886
892
#else
887
- if (sdl_mouse_window != nullptr )
893
+ if (parent_window != nullptr )
888
894
{
889
895
SDL_SysWMinfo wmInfo;
890
896
SDL_VERSION (&wmInfo.version );
891
- SDL_GetWindowWMInfo (sdl_mouse_window , &wmInfo);
897
+ SDL_GetWindowWMInfo (parent_window , &wmInfo);
892
898
893
899
#if defined _WIN32
894
900
parent_ptr = wmInfo.info .win .window ;
@@ -1023,24 +1029,26 @@ static ImVec2 ImGui_ImplSDL2_GetWindowPos(ImGuiViewport* viewport)
1023
1029
static void ImGui_ImplSDL2_SetWindowPos (ImGuiViewport* viewport, ImVec2 pos)
1024
1030
{
1025
1031
ImGui_ImplSDL2_ViewportData* vd = (ImGui_ImplSDL2_ViewportData*)viewport->PlatformUserData ;
1026
-
1032
+
1027
1033
int pos_x = (int )pos.x , pos_y = (int )pos.y ;
1028
1034
1035
+ ImGuiViewport *parent_viewport = ImGui::FindViewportByID (viewport->ParentViewportId );
1036
+
1037
+ while (parent_viewport->Flags & ImGuiViewportFlags_NativeChild)
1038
+ parent_viewport = ImGui::FindViewportByID (parent_viewport->ParentViewportId );
1039
+
1029
1040
// Microstrain edit (use child coordinates for child windows)
1030
1041
#if defined(_WIN32)
1031
1042
if (vd->ChildWindow != nullptr )
1032
1043
{
1033
- ImGuiViewport* main_viewport = ImGui::GetMainViewport ();
1034
-
1035
- pos_x = (int )(viewport->Pos .x - main_viewport->Pos .x );
1036
- pos_y = (int )(viewport->Pos .y - main_viewport->Pos .y );
1044
+ pos_x = (int )(viewport->Pos .x - parent_viewport->Pos .x );
1045
+ pos_y = (int )(viewport->Pos .y - parent_viewport->Pos .y );
1037
1046
1038
1047
SetWindowPos ((HWND)vd->ChildWindow ->get (), HWND_TOP, pos_x, pos_y, 0 , 0 , SWP_NOCOPYBITS | SWP_NOACTIVATE | SWP_NOSIZE);
1039
1048
}
1040
1049
#elif defined __linux__
1041
1050
if (vd->ChildWindow != nullptr )
1042
1051
{
1043
- ImGuiViewport* main_viewport = ImGui::GetMainViewport ();
1044
1052
pos_x = viewport->Pos .x - main_viewport->Pos .x ;
1045
1053
pos_y = viewport->Pos .y - main_viewport->Pos .y ;
1046
1054
0 commit comments