Skip to content

Commit 0707f40

Browse files
authored
fix(ui): keep permission dialog responsive between sequential prompts (#422)
1 parent 6ab7d2f commit 0707f40

2 files changed

Lines changed: 11 additions & 13 deletions

File tree

lua/opencode/ui/permission_window.lua

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,8 @@ function M.remove_permission(permission_id)
161161
else
162162
M._setup_dialog() -- Setup dialog for next permission
163163
end
164+
165+
require('opencode.ui.renderer.events').render_permissions_display()
164166
end
165167

166168
---Get currently selected permission (always the first one now)
@@ -274,6 +276,10 @@ function M._setup_dialog()
274276
end
275277

276278
local function on_select(index)
279+
if M._processing then
280+
return
281+
end
282+
277283
if not check_focused() then
278284
return
279285
end
@@ -284,23 +290,21 @@ function M._setup_dialog()
284290
end
285291

286292
M._processing = true
287-
require('opencode.ui.renderer.events').render_permissions_display()
288-
M._clear_dialog()
289293

290294
local api = require('opencode.api')
291295
local actions = { 'accept', 'deny', 'accept_all' }
292296
local action = actions[index]
293297

294-
vim.defer_fn(function()
298+
vim.schedule(function()
295299
if action then
296300
local api_func = api['permission_' .. action]
297301
if api_func then
298302
api_func(permission)
299303
end
300304
end
301-
M.remove_permission(permission.id)
302305
M._processing = false
303-
end, 50)
306+
M.remove_permission(permission.id)
307+
end)
304308
end
305309

306310
local function on_navigate()
@@ -346,7 +350,8 @@ function M.restore_pending_permissions(session_id)
346350
return Promise.new():resolve(nil)
347351
end
348352

349-
return state.api_client:list_permissions()
353+
return state.api_client
354+
:list_permissions()
350355
:and_then(function(permissions)
351356
if not permissions or type(permissions) ~= 'table' then
352357
return

lua/opencode/ui/renderer/events.lua

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -578,13 +578,6 @@ function M.on_permission_replied(properties)
578578

579579
permission_window.remove_permission(permission_id)
580580
state.renderer.set_pending_permissions(vim.deepcopy(permission_window.get_all_permissions()))
581-
582-
if #state.pending_permissions == 0 then
583-
flush.queue_part_removal('permission-display-part')
584-
flush.queue_message_removal('permission-display-message')
585-
else
586-
M.render_permissions_display()
587-
end
588581
end
589582

590583
---Handle question.asked — show the question picker UI

0 commit comments

Comments
 (0)