From 97241e73f9946b74c706552a4220d1713906a00f Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Mon, 16 Dec 2024 11:26:08 -0800 Subject: [PATCH] more aggressively commit changes to meta-entity edits in watch windows; undo if cancelling --- src/raddbg/raddbg_main.c | 4 +--- src/raddbg/raddbg_views.c | 25 ++++++++++++++++++------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/raddbg/raddbg_main.c b/src/raddbg/raddbg_main.c index fe6ae2a3..4235630f 100644 --- a/src/raddbg/raddbg_main.c +++ b/src/raddbg/raddbg_main.c @@ -4,10 +4,8 @@ //////////////////////////////// //~ rjf: post-0.9.12 TODO notes // -// [ ] fullscreen with new custom borders are busted... // [ ] breakpoints in optimized code? maybe early-terminating bp resolution loop? @bpmiss -// [ ] committing strings in target editor needs to be a bit more aggressive -// if e.g. someone clicks away +// - actually this seems to be potentially because of incomplete src-line-map info... // [ ] CLI argument over-mangling? // [ ] OutputDebugString spam, keeping way too much around! // [ ] Mohit-reported breakpoint not hitting - may be similar thing to @bpmiss diff --git a/src/raddbg/raddbg_views.c b/src/raddbg/raddbg_views.c index 45798975..3accb9fc 100644 --- a/src/raddbg/raddbg_views.c +++ b/src/raddbg/raddbg_views.c @@ -1765,20 +1765,31 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo }break; case RD_WatchViewColumnKind_Member: case RD_WatchViewColumnKind_Value: - if(editing_complete && evt->slot != UI_EventActionSlot_Cancel) { EV_WindowedRowList rows = ev_windowed_row_list_from_block_range_list(scratch.arena, eval_view, filter, &block_ranges, r1u64(ui_scroll_list_row_from_item(&row_blocks, y), ui_scroll_list_row_from_item(&row_blocks, y)+1)); - B32 success = 0; if(rows.first != 0) { + B32 should_commit_asap = editing_complete; E_Expr *expr = rd_expr_from_watch_view_row_column(scratch.arena, eval_view, row, col); E_Eval dst_eval = e_eval_from_expr(scratch.arena, expr); - success = rd_commit_eval_value_string(dst_eval, new_string, !col->dequote_string); - } - if(!success) - { - log_user_error(str8_lit("Could not commit value successfully.")); + if(dst_eval.space.kind == RD_EvalSpaceKind_MetaEntity) + { + should_commit_asap = 1; + } + else if(evt->slot != UI_EventActionSlot_Cancel) + { + should_commit_asap = 0; + } + if(should_commit_asap) + { + B32 success = 0; + success = rd_commit_eval_value_string(dst_eval, new_string, !col->dequote_string); + if(!success) + { + log_user_error(str8_lit("Could not commit value successfully.")); + } + } } }break; case RD_WatchViewColumnKind_Type:{}break;