From 4ee539ac95763455f7b1eb6861788a7b0139e9de Mon Sep 17 00:00:00 2001 From: Jis G Jacob Date: Fri, 13 Mar 2026 14:54:58 +0530 Subject: [PATCH 1/7] Atoll: Fix Pickers showing text with minimized dropdowns Signed-off-by: Jis G Jacob --- DynamicIsland/components/Settings/SettingsView.swift | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/DynamicIsland/components/Settings/SettingsView.swift b/DynamicIsland/components/Settings/SettingsView.swift index 0a1c2f6..249a1f8 100644 --- a/DynamicIsland/components/Settings/SettingsView.swift +++ b/DynamicIsland/components/Settings/SettingsView.swift @@ -6479,7 +6479,7 @@ struct ClipboardSettings: View { HStack { Text("Display Mode") Spacer() - Picker("Display Mode", selection: $clipboardDisplayMode) { + Picker("", selection: $clipboardDisplayMode) { ForEach(ClipboardDisplayMode.allCases, id: \.self) { mode in Text(mode.displayName).tag(mode) } @@ -6492,7 +6492,7 @@ struct ClipboardSettings: View { HStack { Text("History Size") Spacer() - Picker("History Size", selection: $clipboardHistorySize) { + Picker("", selection: $clipboardHistorySize) { Text("3 items").tag(3) Text("5 items").tag(5) Text("7 items").tag(7) @@ -6690,7 +6690,7 @@ struct ScreenAssistantSettings: View { HStack { Text("Display Mode") Spacer() - Picker("Display Mode", selection: $screenAssistantDisplayMode) { + Picker("", selection: $screenAssistantDisplayMode) { ForEach(ScreenAssistantDisplayMode.allCases, id: \.self) { mode in Text(mode.displayName).tag(mode) } @@ -6817,7 +6817,7 @@ struct ColorPickerSettings: View { HStack { Text("Display Mode") Spacer() - Picker("Display Mode", selection: $colorPickerDisplayMode) { + Picker("", selection: $colorPickerDisplayMode) { ForEach(ColorPickerDisplayMode.allCases, id: \.self) { mode in Text(mode.displayName).tag(mode) } @@ -6830,7 +6830,7 @@ struct ColorPickerSettings: View { HStack { Text("History Size") Spacer() - Picker("History Size", selection: $colorHistorySize) { + Picker("", selection: $colorHistorySize) { Text("5 colors").tag(5) Text("10 colors").tag(10) Text("15 colors").tag(15) From 55a6f0781394de5c8e0858c18e032db3e40ae344 Mon Sep 17 00:00:00 2001 From: Jis G Jacob Date: Sat, 14 Mar 2026 23:27:09 +0530 Subject: [PATCH 2/7] Atoll: Use minWidth for pickers in Settings Signed-off-by: Jis G Jacob --- .../components/Settings/SettingsView.swift | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/DynamicIsland/components/Settings/SettingsView.swift b/DynamicIsland/components/Settings/SettingsView.swift index 249a1f8..a751434 100644 --- a/DynamicIsland/components/Settings/SettingsView.swift +++ b/DynamicIsland/components/Settings/SettingsView.swift @@ -6485,7 +6485,7 @@ struct ClipboardSettings: View { } } .pickerStyle(.menu) - .frame(width: 100) + .frame(minWidth: 100) } .settingsHighlight(id: highlightID("Display Mode")) @@ -6499,7 +6499,7 @@ struct ClipboardSettings: View { Text("10 items").tag(10) } .pickerStyle(.menu) - .frame(width: 100) + .frame(minWidth: 100) } .settingsHighlight(id: highlightID("History Size")) @@ -6696,10 +6696,10 @@ struct ScreenAssistantSettings: View { } } .pickerStyle(.menu) - .frame(width: 100) + .frame(minWidth: 100) } .settingsHighlight(id: highlightID("Display Mode")) - + HStack { Text("Attached Files") Spacer() @@ -6823,10 +6823,10 @@ struct ColorPickerSettings: View { } } .pickerStyle(.menu) - .frame(width: 100) + .frame(minWidth: 100) } .settingsHighlight(id: highlightID("Display Mode")) - + HStack { Text("History Size") Spacer() @@ -6837,7 +6837,7 @@ struct ColorPickerSettings: View { Text("20 colors").tag(20) } .pickerStyle(.menu) - .frame(width: 100) + .frame(minWidth: 100) } .settingsHighlight(id: highlightID("History Size")) From 38f45e9386fd93a9d972a69c05705616073a9388 Mon Sep 17 00:00:00 2001 From: AkhilKonduru1 Date: Tue, 17 Mar 2026 17:49:29 +0000 Subject: [PATCH 3/7] Add reset context button to Screen Assistant --- .../ScreenAssistant/ChatPanels.swift | 18 ++++++++++++++++++ .../managers/ScreenAssistantManager.swift | 6 ++++++ 2 files changed, 24 insertions(+) diff --git a/DynamicIsland/components/ScreenAssistant/ChatPanels.swift b/DynamicIsland/components/ScreenAssistant/ChatPanels.swift index aa7549d..69b0f60 100644 --- a/DynamicIsland/components/ScreenAssistant/ChatPanels.swift +++ b/DynamicIsland/components/ScreenAssistant/ChatPanels.swift @@ -203,6 +203,24 @@ struct ChatMessagesView: View { .foregroundColor(.primary) Spacer() + + Button(action: { + screenAssistantManager.resetConversationContext() + }) { + HStack(spacing: 6) { + Image(systemName: "arrow.counterclockwise") + .font(.caption) + Text("Reset Context") + .font(.caption) + } + .foregroundColor(.secondary) + .padding(.horizontal, 8) + .padding(.vertical, 5) + .background(Color.gray.opacity(0.12)) + .cornerRadius(8) + } + .buttonStyle(PlainButtonStyle()) + .help("Clear conversation and attachments") Button(action: { screenAssistantManager.closePanels() diff --git a/DynamicIsland/managers/ScreenAssistantManager.swift b/DynamicIsland/managers/ScreenAssistantManager.swift index 6577ba6..a1912a5 100644 --- a/DynamicIsland/managers/ScreenAssistantManager.swift +++ b/DynamicIsland/managers/ScreenAssistantManager.swift @@ -1103,7 +1103,13 @@ class ScreenAssistantManager: NSObject, ObservableObject { } func clearChat() { + resetConversationContext() + } + + func resetConversationContext() { + isLoading = false chatMessages.removeAll() + clearAllFiles() } private func addAssistantMessage(_ content: String) { From 8749c0dd07c1067eaf545f3bef1d44bc829269c4 Mon Sep 17 00:00:00 2001 From: shuja-waraich-03 Date: Wed, 18 Mar 2026 06:39:08 -0500 Subject: [PATCH 4/7] Fixed Paste Issue in Notes View --- DynamicIsland/components/Notch/NotchNotesView.swift | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/DynamicIsland/components/Notch/NotchNotesView.swift b/DynamicIsland/components/Notch/NotchNotesView.swift index 4fe1119..48a54af 100644 --- a/DynamicIsland/components/Notch/NotchNotesView.swift +++ b/DynamicIsland/components/Notch/NotchNotesView.swift @@ -158,9 +158,13 @@ struct NotchNotesView: View { return } - // Fallback to text if not editing and clipboard has text - if !isEditingNewNote && selectedNoteId == nil { - if let text = pasteboard.string(forType: .string) { + // Handle text paste + if let text = pasteboard.string(forType: .string) { + if isEditingNewNote || selectedNoteId != nil { + // In editor: insert text at the end of content since we intercepted the shortcut + editorContent.append(text) + } else { + // Not in editor: create a new note with the pasted text createNoteWithContent(text) } } From a85cc65a0384dd92f56af1e1637c7492f1d9ef91 Mon Sep 17 00:00:00 2001 From: AkhilKonduru1 Date: Wed, 18 Mar 2026 17:03:50 +0000 Subject: [PATCH 5/7] fixed more --- .../components/ScreenAssistant/ChatPanels.swift | 1 + .../managers/ScreenAssistantManager.swift | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/DynamicIsland/components/ScreenAssistant/ChatPanels.swift b/DynamicIsland/components/ScreenAssistant/ChatPanels.swift index 69b0f60..095d491 100644 --- a/DynamicIsland/components/ScreenAssistant/ChatPanels.swift +++ b/DynamicIsland/components/ScreenAssistant/ChatPanels.swift @@ -219,6 +219,7 @@ struct ChatMessagesView: View { .background(Color.gray.opacity(0.12)) .cornerRadius(8) } + .disabled(screenAssistantManager.isLoading) .buttonStyle(PlainButtonStyle()) .help("Clear conversation and attachments") diff --git a/DynamicIsland/managers/ScreenAssistantManager.swift b/DynamicIsland/managers/ScreenAssistantManager.swift index a1912a5..eec5ef7 100644 --- a/DynamicIsland/managers/ScreenAssistantManager.swift +++ b/DynamicIsland/managers/ScreenAssistantManager.swift @@ -120,6 +120,7 @@ class ScreenAssistantManager: NSObject, ObservableObject { private var audioRecorder: AVAudioRecorder? private var recordingTimer: Timer? + private var activeRequest: URLSessionTask? // Panel management private var chatMessagesPanel: ChatMessagesPanel? @@ -668,6 +669,7 @@ class ScreenAssistantManager: NSObject, ObservableObject { } } + activeRequest = task task.resume() } @@ -694,6 +696,7 @@ class ScreenAssistantManager: NSObject, ObservableObject { } } + activeRequest = task task.resume() } @@ -721,6 +724,7 @@ class ScreenAssistantManager: NSObject, ObservableObject { } } + activeRequest = task task.resume() } @@ -728,6 +732,13 @@ class ScreenAssistantManager: NSObject, ObservableObject { private func handleResponse(data: Data?, response: URLResponse?, error: Error?, provider: AIModelProvider) { isLoading = false + activeRequest = nil + + // Check if the request was cancelled (e.g., by resetConversationContext) + if let error = error as? NSError, error.code == NSURLErrorCancelled { + print("ℹ️ ScreenAssistant: Request was cancelled") + return + } if let error = error { print("❌ ScreenAssistant: Network error - \(error)") @@ -1107,6 +1118,10 @@ class ScreenAssistantManager: NSObject, ObservableObject { } func resetConversationContext() { + // Cancel any in-flight request + activeRequest?.cancel() + activeRequest = nil + isLoading = false chatMessages.removeAll() clearAllFiles() From cafd0290d4e1eca0d3ae9f5dd200269b2d9d8580 Mon Sep 17 00:00:00 2001 From: AkhilKonduru1 Date: Wed, 18 Mar 2026 12:07:53 -0500 Subject: [PATCH 6/7] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- DynamicIsland/managers/ScreenAssistantManager.swift | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/DynamicIsland/managers/ScreenAssistantManager.swift b/DynamicIsland/managers/ScreenAssistantManager.swift index eec5ef7..6e58a18 100644 --- a/DynamicIsland/managers/ScreenAssistantManager.swift +++ b/DynamicIsland/managers/ScreenAssistantManager.swift @@ -720,6 +720,13 @@ class ScreenAssistantManager: NSObject, ObservableObject { let task = URLSession.shared.dataTask(with: request) { [weak self] data, response, error in DispatchQueue.main.async { guard let self = self else { return } + + // Ensure this callback belongs to the current in-flight request + guard self.activeRequest === task else { return } + + self.isLoading = false + self.activeRequest = nil + self.handleResponse(data: data, response: response, error: error, provider: .claude) } } @@ -731,9 +738,6 @@ class ScreenAssistantManager: NSObject, ObservableObject { // MARK: - Response Handlers private func handleResponse(data: Data?, response: URLResponse?, error: Error?, provider: AIModelProvider) { - isLoading = false - activeRequest = nil - // Check if the request was cancelled (e.g., by resetConversationContext) if let error = error as? NSError, error.code == NSURLErrorCancelled { print("ℹ️ ScreenAssistant: Request was cancelled") From 18766e78859264a3e98aadb0f06ac4aaef5c878f Mon Sep 17 00:00:00 2001 From: Hariharan Mudaliar Date: Thu, 19 Mar 2026 21:42:02 +0530 Subject: [PATCH 7/7] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .../managers/ScreenAssistantManager.swift | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/DynamicIsland/managers/ScreenAssistantManager.swift b/DynamicIsland/managers/ScreenAssistantManager.swift index 6e58a18..da0a0cd 100644 --- a/DynamicIsland/managers/ScreenAssistantManager.swift +++ b/DynamicIsland/managers/ScreenAssistantManager.swift @@ -665,6 +665,13 @@ class ScreenAssistantManager: NSObject, ObservableObject { let task = URLSession.shared.dataTask(with: request) { [weak self] data, response, error in DispatchQueue.main.async { guard let self = self else { return } + + // Ensure this callback belongs to the current in-flight request + guard self.activeRequest === task else { return } + + self.isLoading = false + self.activeRequest = nil + self.handleResponse(data: data, response: response, error: error, provider: provider) } } @@ -692,6 +699,13 @@ class ScreenAssistantManager: NSObject, ObservableObject { let task = URLSession.shared.dataTask(with: request) { [weak self] data, response, error in DispatchQueue.main.async { guard let self = self else { return } + + // Ensure this callback belongs to the current in-flight request + guard self.activeRequest === task else { return } + + self.isLoading = false + self.activeRequest = nil + self.handleResponse(data: data, response: response, error: error, provider: .openai) } }