[gnome-games] savestates-list: Ensure selected row is visible on rename and delete



commit 9d9db1a415f3f815cfaf745ecea862de68c2f25d
Author: Yetizone <andreii lisita gmail com>
Date:   Thu Aug 15 20:51:31 2019 +0300

    savestates-list: Ensure selected row is visible on rename and delete
    
    Ensures the rename popover appears on screen
    Fixes https://gitlab.gnome.org/GNOME/gnome-games/issues/225

 src/ui/savestates-list.vala | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
---
diff --git a/src/ui/savestates-list.vala b/src/ui/savestates-list.vala
index 233cb0f2..828f44c2 100644
--- a/src/ui/savestates-list.vala
+++ b/src/ui/savestates-list.vala
@@ -142,6 +142,7 @@ private class Games.SavestatesList : Gtk.Box {
                var savestate_row = selected_row as SavestateListBoxRow;
                var savestate = savestate_row.savestate;
 
+               ensure_row_is_visible (selected_row);
                runner.delete_savestate (savestate);
                savestate_row.remove_animated ();
 
@@ -172,11 +173,26 @@ private class Games.SavestatesList : Gtk.Box {
        private void on_rename_clicked () {
                var selected_row = list_box.get_selected_row ();
 
+               ensure_row_is_visible (selected_row);
+
                rename_entry.text = state.selected_savestate.get_name ();
                rename_popover.relative_to = selected_row;
                rename_popover.popup ();
        }
 
+       // Adapted from gtklistbox.c, ensure_row_visible()
+       private void ensure_row_is_visible (Gtk.ListBoxRow row) {
+               Gtk.Allocation allocation;
+
+               row.get_allocation (out allocation);
+               var y = allocation.y;
+               var height = allocation.height;
+
+               scrolled_window.kinetic_scrolling = false;
+               scrolled_window.vadjustment.clamp_page (y, y + height);
+               scrolled_window.kinetic_scrolling = true;
+       }
+
        [GtkCallback]
        private void on_rename_entry_activated () {
                if (check_rename_is_valid ())


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]