Handle window close commands and interaction logic improvements

This commit is contained in:
Stone_Red
2026-06-08 20:47:19 +02:00
parent 169c604c7a
commit 7d8a336337
2 changed files with 24 additions and 5 deletions
+8 -4
View File
@@ -111,7 +111,7 @@ public sealed class Window(string title, int processId, int id, IRenderSource re
bool anyChildChanged; bool anyChildChanged;
List<UIElement> elementsCopy; List<UIElement> elementsCopy;
lock (uiElementsLock) lock (uiElementsLock)
{ {
anyChildChanged = uiElements.Values.Any(e => e.AnyPropertyChanged); anyChildChanged = uiElements.Values.Any(e => e.AnyPropertyChanged);
@@ -222,10 +222,14 @@ public sealed class Window(string title, int processId, int id, IRenderSource re
dragOffset = new Point(pointerPosition.X - Position.X, pointerPosition.Y - Position.Y); dragOffset = new Point(pointerPosition.X - Position.X, pointerPosition.Y - Position.Y);
} }
if (currentInteraction != InteractionMode.None) if (currentInteraction != InteractionMode.None || inBounds)
{ {
interactionStartBounds = new Rectangle(Position, Size); if (currentInteraction != InteractionMode.None)
interactionStartPointer = pointerPosition; {
interactionStartBounds = new Rectangle(Position, Size);
interactionStartPointer = pointerPosition;
}
WindowManager.FocusWindow(this); WindowManager.FocusWindow(this);
return true; return true;
} }
+16 -1
View File
@@ -123,9 +123,24 @@ public static class WindowManager
public static void CloseWindowsForProcess(int processId) public static void CloseWindowsForProcess(int processId)
{ {
List<Window> windowsToClose = new();
lock (windowsLock) lock (windowsLock)
{ {
windows.Remove(processId); if (windows.TryGetValue(processId, out var processWindows))
{
windowsToClose.AddRange(processWindows);
windows.Remove(processId);
}
}
if (windowsToClose.Count > 0)
{
List<RenderCommand> closeCommands = new();
foreach (var window in windowsToClose)
{
closeCommands.Add(new RenderCommand { WindowId = window.Id, ElementId = window.Id, ElementType = "WindowClose", Position = window.Position, Properties = new Dictionary<string, object?>() });
}
renderSource.Render(closeCommands);
} }
} }