LibGUI/TreeView: Select parent on collapse
When collapsing a tree that contains the current selection, the parent node becomes selected instead.
This commit is contained in:
parent
67a5e9f018
commit
7a4445a1fe
Notes:
sideshowbarker
2024-07-18 17:05:47 +09:00
Author: https://github.com/gmta Commit: https://github.com/SerenityOS/serenity/commit/7a4445a1fe4 Pull-request: https://github.com/SerenityOS/serenity/pull/7646
3 changed files with 16 additions and 0 deletions
|
@ -19,6 +19,17 @@ Variant ModelIndex::data(ModelRole role) const
|
|||
return model()->data(*this, role);
|
||||
}
|
||||
|
||||
bool ModelIndex::is_parent_of(const ModelIndex& child) const
|
||||
{
|
||||
auto current_index = child.parent();
|
||||
while (current_index.is_valid()) {
|
||||
if (current_index == *this)
|
||||
return true;
|
||||
current_index = current_index.parent();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
ModelIndex ModelIndex::sibling(int row, int column) const
|
||||
{
|
||||
if (!is_valid())
|
||||
|
|
|
@ -26,6 +26,7 @@ public:
|
|||
void* internal_data() const { return m_internal_data; }
|
||||
|
||||
ModelIndex parent() const;
|
||||
bool is_parent_of(const ModelIndex&) const;
|
||||
|
||||
bool operator==(const ModelIndex& other) const
|
||||
{
|
||||
|
|
|
@ -148,6 +148,10 @@ void TreeView::toggle_index(const ModelIndex& index)
|
|||
VERIFY(model()->row_count(index));
|
||||
auto& metadata = ensure_metadata_for_index(index);
|
||||
metadata.open = !metadata.open;
|
||||
|
||||
if (!metadata.open && index.is_parent_of(cursor_index()))
|
||||
set_cursor(index, SelectionUpdate::Set);
|
||||
|
||||
if (on_toggle)
|
||||
on_toggle(index, metadata.open);
|
||||
update_column_sizes();
|
||||
|
|
Loading…
Add table
Reference in a new issue