ocornut / imgui

Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies
MIT License
59.77k stars 10.17k forks source link

Dragging secondary viewports out of main viewport #7733

Open Rakshitx1 opened 3 months ago

Rakshitx1 commented 3 months ago

Version/Branch of Dear ImGui:

Branch: Docking

Back-ends:

imgui_impl_glfw.cpp + imgui_impl_opengl3.cpp

Compiler, OS:

Linux + clang 19

Full config/build information:

Dear ImGui 1.90.9 WIP (19083)
--------------------------------
sizeof(size_t): 8, sizeof(ImDrawIdx): 2, sizeof(ImDrawVert): 20
define: __cplusplus=201703
define: __linux__
define: __GNUC__=4
define: __clang_version__=19.0.0 (++20240620031356+e3eb12cce97f-1~exp1~20240620151533.1757)
define: IMGUI_HAS_VIEWPORT
define: IMGUI_HAS_DOCK
--------------------------------
io.BackendPlatformName: imgui_impl_glfw
io.BackendRendererName: imgui_impl_opengl3
io.ConfigFlags: 0x00000481
 NavEnableKeyboard
 DockingEnable
 ViewportsEnable
io.ConfigViewportsNoDecoration
io.ConfigInputTextCursorBlink
io.ConfigWindowsResizeFromEdges
io.ConfigMemoryCompactTimer = 60.0
io.BackendFlags: 0x00001C0E
 HasMouseCursors
 HasSetMousePos
 PlatformHasViewports
 HasMouseHoveredViewport
 RendererHasVtxOffset
 RendererHasViewports
--------------------------------
io.Fonts: 1 fonts, Flags: 0x00000000, TexSize: 512,64
io.DisplaySize: 1280.00,720.00
io.DisplayFramebufferScale: 1.00,1.00
--------------------------------
style.WindowPadding: 8.00,8.00
style.WindowBorderSize: 1.00
style.FramePadding: 4.00,3.00
style.FrameRounding: 0.00
style.FrameBorderSize: 0.00
style.ItemSpacing: 8.00,4.00
style.ItemInnerSpacing: 4.00,4.00

Details:

When dragging a window either outside or inside the main screen boundary, it drops, necessitating a double-click to resume dragging.

Screenshots/Video:

No response

Minimal, Complete and Verifiable Example code:

ImGui::Begin("Test"); ImGui::Text("Hello World"); ImGui::End();

Rakshitx1 commented 3 months ago

I forgot to mention, but I am using CMake to compile imgui to a library and then using it

are there any plans to add official CMake support for imgui?

ocornut commented 3 months ago

Which version of GLFW are you using?

Currently the GLFW backend under systems other than Windows seems to be calling a different codepath, where it is possible that a combination of what GLFW does and what the WM does means you lose mouse inputs while dragging.

Please confirm GLFW version and open Tools->Debug Log->IO and capture IO log at the time of extracting a window into its own viewport.

With GLFW 3.3 we normally call:

    glfwWindowHint(GLFW_FOCUS_ON_SHOW, false);

https://github.com/ocornut/imgui/blob/docking/backends/imgui_impl_glfw.cpp#L122C9-L122C41

And there's a workaround for older versions but it's Windows only: https://github.com/ocornut/imgui/blob/docking/backends/imgui_impl_glfw.cpp#L1128

Rakshitx1 commented 3 months ago

I am using GLFW 3.5, I did notice imgui came with GLFW 3.3

[04951] [io] Processed: MouseButton 0 Up (Mouse)
[04951] SetActiveID() old:0xB89D6EE5 (window "Dear ImGui Debug Log") -> new:0x00000000 (window "")
[04952] [dragdrop] ClearDragDrop()
[04952] [viewport] Destroy Platform Window 8E350B18 'Dear ImGui Debug Log'
[04953] [viewport] Focused viewport changed 8E350B18 -> 11111111, attempting to apply our focus.
[04953] [viewport] Delete Viewport 8E350B18 'Dear ImGui Debug Log'
[04954] [io] Processed: AppFocused 0
[04954] [io] Processed: AppFocused 1

It seems to be destroying old window and creating a new window?

i forked on this commit: 7237d3e5c3a6b837b7b457460877cf5eea8c3745

video: https://media.discordapp.net/attachments/844849219504046154/1254947933447651348/imgui.webm?ex=667b58d7&is=667a0757&hm=d9aec2d766ce8380f9791afa297f3189d3c6db95eadbbe12ae3b37b8d9ec3b13&

ocornut commented 3 months ago

The video link is invalid. I guess the question is to understand why you are getting the MouseButton 0 up event there.

At this point frankly I am considering to stop supporting multi-viewport under Linux since it's so complicated under this OS and we don't have any serious/focused contributor using Linux.

JamesWrigley commented 3 months ago

I think this is a duplicate of #3158, which links to an upstream issue in GLFW: https://github.com/glfw/glfw/issues/1562 With a potential fix here: https://github.com/rokups/imgui/commit/c510c112e081e334e06601302e5d9ca151ce62aa

Is that fix mergeable? I also see this on ImGui 1.90.8 under Linux/X11, so I'm happy to test things or work on improving that patch if you'd prefer a different fix. Multi-viewport support on Linux is critical for my usecase so I'm quite motivated to help out where I can :)

(though this particular bug doesn't personally bother me much)