[gnome-games] savestates-list: Ensure animated deleted rows don't get selected
- From: Alexander Mikhaylenko <alexm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-games] savestates-list: Ensure animated deleted rows don't get selected
- Date: Fri, 16 Aug 2019 14:54:58 +0000 (UTC)
commit f2bf2269262a20aab22025cd7edc0581243c6997
Author: Yetizone <andreii lisita gmail com>
Date: Fri Aug 16 15:36:10 2019 +0300
savestates-list: Ensure animated deleted rows don't get selected
Fixes runtime errors when clicking Delete rapidly
src/ui/savestate-listbox-row.vala | 1 +
src/ui/savestates-list.vala | 27 +++++++++++++++++++++------
2 files changed, 22 insertions(+), 6 deletions(-)
---
diff --git a/src/ui/savestate-listbox-row.vala b/src/ui/savestate-listbox-row.vala
index e7f546ca..e661afd9 100644
--- a/src/ui/savestate-listbox-row.vala
+++ b/src/ui/savestate-listbox-row.vala
@@ -87,6 +87,7 @@ private class Games.SavestateListBoxRow : Gtk.ListBoxRow {
}
public void remove_animated () {
+ selectable = false;
revealer.notify["child-revealed"].connect(() => {
get_parent ().remove (this);
});
diff --git a/src/ui/savestates-list.vala b/src/ui/savestates-list.vala
index 1ad30a1b..64b02758 100644
--- a/src/ui/savestates-list.vala
+++ b/src/ui/savestates-list.vala
@@ -146,15 +146,30 @@ private class Games.SavestatesList : Gtk.Box {
runner.delete_savestate (savestate);
// Select and preview a new row
- var next_row = list_box.get_row_at_index (selected_row_index + 1);
+ var next_row_index = selected_row_index + 1;
+ var new_selected_row = list_box.get_row_at_index (next_row_index);
+ while (new_selected_row != null && !new_selected_row.selectable) {
+ next_row_index++;
+ new_selected_row = list_box.get_row_at_index (next_row_index);
+ }
+
+ if (new_selected_row == null) {
+ // There are no more selectable rows after the selected row
+ // Check if there are any selectable rows before the selected row
- if (next_row == null && selected_row_index > 1) {
- // The last row of the list will be deleted but there are still
- // rows remaining in the list
- next_row = list_box.get_row_at_index (selected_row_index - 1);
+ var prev_row_index = selected_row_index - 1;
+ new_selected_row = list_box.get_row_at_index (prev_row_index);
+ while (prev_row_index > 1 && !new_selected_row.selectable) {
+ prev_row_index--;
+ new_selected_row = list_box.get_row_at_index (prev_row_index);
+ }
}
- select_savestate_row (next_row);
+ if (new_selected_row != null && new_selected_row.selectable)
+ select_savestate_row (new_selected_row);
+ else
+ select_savestate_row (null);
+
savestate_row.remove_animated ();
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]