mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-09 01:29:17 +00:00
LibWeb: Only clear command states and values if range actually changed
This commit is contained in:
parent
5202ae26e0
commit
486bce8dad
Notes:
github-actions[bot]
2025-01-24 22:54:50 +00:00
Author: https://github.com/gmta
Commit: 486bce8dad
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/3352
2 changed files with 14 additions and 2 deletions
|
@ -1,6 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2022, Luke Wilde <lukew@serenityos.org>
|
* Copyright (c) 2022, Luke Wilde <lukew@serenityos.org>
|
||||||
* Copyright (c) 2022, Andreas Kling <andreas@ladybird.org>
|
* Copyright (c) 2022, Andreas Kling <andreas@ladybird.org>
|
||||||
|
* Copyright (c) 2025, Jelle Raaijmakers <jelle@ladybird.org>
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-2-Clause
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -41,6 +42,14 @@ public:
|
||||||
return start_container() == end_container() && start_offset() == end_offset();
|
return start_container() == end_container() && start_offset() == end_offset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool operator==(AbstractRange const& other) const
|
||||||
|
{
|
||||||
|
return start_container() == other.start_container()
|
||||||
|
&& start_offset() == other.start_offset()
|
||||||
|
&& end_container() == other.end_container()
|
||||||
|
&& end_offset() == other.end_offset();
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
AbstractRange(GC::Ref<Node> start_container, WebIDL::UnsignedLong start_offset, GC::Ref<Node> end_container, WebIDL::UnsignedLong end_offset);
|
AbstractRange(GC::Ref<Node> start_container, WebIDL::UnsignedLong start_offset, GC::Ref<Node> end_container, WebIDL::UnsignedLong end_offset);
|
||||||
|
|
||||||
|
|
|
@ -467,6 +467,7 @@ void Selection::set_range(GC::Ptr<DOM::Range> range)
|
||||||
if (m_range)
|
if (m_range)
|
||||||
m_range->set_associated_selection({}, nullptr);
|
m_range->set_associated_selection({}, nullptr);
|
||||||
|
|
||||||
|
auto range_changed = ((m_range == nullptr) != (range == nullptr)) || (m_range && *m_range != *range);
|
||||||
m_range = range;
|
m_range = range;
|
||||||
|
|
||||||
if (m_range)
|
if (m_range)
|
||||||
|
@ -476,9 +477,11 @@ void Selection::set_range(GC::Ptr<DOM::Range> range)
|
||||||
// Whenever the number of ranges in the selection changes to something different, and whenever a boundary point of
|
// Whenever the number of ranges in the selection changes to something different, and whenever a boundary point of
|
||||||
// the range at a given index in the selection changes to something different, the state override and value override
|
// the range at a given index in the selection changes to something different, the state override and value override
|
||||||
// must be unset for every command.
|
// must be unset for every command.
|
||||||
|
if (range_changed) {
|
||||||
m_document->reset_command_state_overrides();
|
m_document->reset_command_state_overrides();
|
||||||
m_document->reset_command_value_overrides();
|
m_document->reset_command_value_overrides();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
GC::Ptr<DOM::Position> Selection::cursor_position() const
|
GC::Ptr<DOM::Position> Selection::cursor_position() const
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue