mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-04 07:01:04 +01:00 
			
		
		
		
	Viewport: Added ImGuiViewportFlags_NoFocusOnClick + support in imgui_impl_win32. Made windows with no decoration always set the _NoFocus flags. (#1542, #2117)
Fix e.g. clicking on protruding combo box stealing highlight from parent window with decoration.
This commit is contained in:
		@@ -139,6 +139,10 @@ int main(int, char**)
 | 
			
		||||
    //io.ConfigFlags |= ImGuiConfigFlags_ViewportsNoMerge;
 | 
			
		||||
    io.ConfigFlags |= ImGuiConfigFlags_DpiEnableScaleFonts;     // FIXME-DPI: THIS CURRENTLY DOESN'T WORK AS EXPECTED. DON'T USE IN USER APP!
 | 
			
		||||
    io.ConfigFlags |= ImGuiConfigFlags_DpiEnableScaleViewports; // FIXME-DPI
 | 
			
		||||
    //io.ConfigViewportsNoAutoMerge = true;
 | 
			
		||||
    //io.ConfigViewportsNoTaskBarIcon = false;
 | 
			
		||||
    //io.ConfigDockingTabBarOnSingleWindows = true;
 | 
			
		||||
    //io.ConfigDockingTransparentPayload = true;
 | 
			
		||||
 | 
			
		||||
    // Setup Dear ImGui style
 | 
			
		||||
    ImGui::StyleColorsDark();
 | 
			
		||||
 
 | 
			
		||||
@@ -737,6 +737,10 @@ static LRESULT CALLBACK ImGui_ImplWin32_WndProcHandler_PlatformWindow(HWND hWnd,
 | 
			
		||||
        case WM_SIZE:
 | 
			
		||||
            viewport->PlatformRequestResize = true;
 | 
			
		||||
            break;
 | 
			
		||||
        case WM_MOUSEACTIVATE:
 | 
			
		||||
            if (viewport->Flags & ImGuiViewportFlags_NoFocusOnClick)
 | 
			
		||||
                return MA_NOACTIVATE;
 | 
			
		||||
            break;
 | 
			
		||||
        case WM_NCHITTEST:
 | 
			
		||||
            // Let mouse pass-through the window. This will allow the back-end to set io.MouseHoveredViewport properly (which is OPTIONAL).
 | 
			
		||||
            // The ImGuiViewportFlags_NoInputs flag is set while dragging a viewport, as want to detect the window behind the one we are dragging.
 | 
			
		||||
 
 | 
			
		||||
@@ -5520,6 +5520,8 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
 | 
			
		||||
                viewport_flags |= ImGuiViewportFlags_NoTaskBarIcon;
 | 
			
		||||
            if (g.IO.ConfigViewportsNoDecoration || (flags & (ImGuiWindowFlags_ChildMenu | ImGuiWindowFlags_Tooltip | ImGuiWindowFlags_Popup)) != 0)
 | 
			
		||||
                viewport_flags |= ImGuiViewportFlags_NoDecoration;
 | 
			
		||||
            if ((viewport_flags & ImGuiViewportFlags_NoDecoration) && (viewport_flags & ImGuiViewportFlags_NoTaskBarIcon))
 | 
			
		||||
                viewport_flags |= ImGuiViewportFlags_NoFocusOnAppearing | ImGuiViewportFlags_NoFocusOnClick;
 | 
			
		||||
 | 
			
		||||
            // We can overwrite viewport flags using ImGuiWindowClass (advanced users)
 | 
			
		||||
            // We don't default to the main viewport because.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										7
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								imgui.h
									
									
									
									
									
								
							@@ -2298,9 +2298,10 @@ enum ImGuiViewportFlags_
 | 
			
		||||
    ImGuiViewportFlags_NoDecoration             = 1 << 0,   // Platform Window: Disable platform decorations: title bar, borders, etc. (generally set all windows, but if ImGuiConfigFlags_ViewportsDecoration is set we only set this on popups/tooltips)
 | 
			
		||||
    ImGuiViewportFlags_NoTaskBarIcon            = 1 << 1,   // Platform Window: Disable platform task bar icon (generally set on popups/tooltips, or all windows if ImGuiConfigFlags_ViewportsNoTaskBarIcon is set)
 | 
			
		||||
    ImGuiViewportFlags_NoFocusOnAppearing       = 1 << 2,   // Platform Window: Don't take focus when created.
 | 
			
		||||
    ImGuiViewportFlags_NoInputs                 = 1 << 3,   // Platform Window: Make mouse pass through so we can drag this window while peaking behind it.
 | 
			
		||||
    ImGuiViewportFlags_NoRendererClear          = 1 << 4,   // Platform Window: Renderer doesn't need to clear the framebuffer ahead (because we will fill it entirely).
 | 
			
		||||
    ImGuiViewportFlags_TopMost                  = 1 << 5    // Platform Window: Display on top (for tooltips only)
 | 
			
		||||
    ImGuiViewportFlags_NoFocusOnClick           = 1 << 3,   // Platform Window: Don't take focus when clicked on.
 | 
			
		||||
    ImGuiViewportFlags_NoInputs                 = 1 << 4,   // Platform Window: Make mouse pass through so we can drag this window while peaking behind it.
 | 
			
		||||
    ImGuiViewportFlags_NoRendererClear          = 1 << 5,   // Platform Window: Renderer doesn't need to clear the framebuffer ahead (because we will fill it entirely).
 | 
			
		||||
    ImGuiViewportFlags_TopMost                  = 1 << 6    // Platform Window: Display on top (for tooltips only)
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// The viewports created and managed by imgui. The role of the platform back-end is to create the platform/OS windows corresponding to each viewport.
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user