mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-10 13:00:29 +03:00
LibGUI: Fix undo stack reporting wrong modified state
Since the `redo` action never goes back to `index: 0`, we have to mark the clean index as being the current non-empty index for the undo/redo navigation to work properly. The problem is that if we never `undo`, the stack index stays at zero, which is the empty container waiting for commands. In that situation, if we save the document, it registers the clean index as being 1 (the non-empty index) but because the stack index has never left zero, the document was being reported as modified, being out of sync with the window modified state.
This commit is contained in:
parent
3c01de4f0b
commit
0b7e19e2bb
Notes:
sideshowbarker
2024-07-18 18:31:46 +09:00
Author: https://github.com/pakerwreah Commit: https://github.com/SerenityOS/serenity/commit/0b7e19e2bb3 Pull-request: https://github.com/SerenityOS/serenity/pull/6941 Issue: https://github.com/SerenityOS/serenity/issues/6926
@ -92,16 +92,12 @@ void UndoStack::finalize_current_combo()
|
||||
|
||||
void UndoStack::set_current_unmodified()
|
||||
{
|
||||
// Skip empty container
|
||||
if (can_undo() && m_stack[m_stack_index].commands.is_empty())
|
||||
m_clean_index = m_stack_index + 1;
|
||||
else
|
||||
m_clean_index = m_stack_index;
|
||||
m_clean_index = non_empty_stack_index();
|
||||
}
|
||||
|
||||
bool UndoStack::is_current_modified() const
|
||||
{
|
||||
return !m_clean_index.has_value() || m_stack_index != m_clean_index.value();
|
||||
return !m_clean_index.has_value() || non_empty_stack_index() != m_clean_index.value();
|
||||
}
|
||||
|
||||
void UndoStack::clear()
|
||||
@ -111,4 +107,12 @@ void UndoStack::clear()
|
||||
m_clean_index.clear();
|
||||
}
|
||||
|
||||
size_t UndoStack::non_empty_stack_index() const
|
||||
{
|
||||
if (can_undo() && m_stack[m_stack_index].commands.is_empty())
|
||||
return m_stack_index + 1;
|
||||
else
|
||||
return m_stack_index;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -32,6 +32,8 @@ public:
|
||||
void clear();
|
||||
|
||||
private:
|
||||
size_t non_empty_stack_index() const;
|
||||
|
||||
struct Combo {
|
||||
NonnullOwnPtrVector<Command> commands;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user