From cb4a0d38ae5973787b6c199ec36456f3464166d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20For=C3=A9?= Date: Sat, 18 Apr 2020 10:09:17 -0700 Subject: [PATCH] GridView: use child_focus --- src/Views/GridView.vala | 76 ++++++++++++----------------------------- 1 file changed, 22 insertions(+), 54 deletions(-) diff --git a/src/Views/GridView.vala b/src/Views/GridView.vala index 6ff717562..eee5ae1ee 100644 --- a/src/Views/GridView.vala +++ b/src/Views/GridView.vala @@ -28,12 +28,9 @@ public class Slingshot.Widgets.Grid : Gtk.Grid { } private Gtk.Grid current_grid; - private Gtk.Widget? focused_widget; private Gee.HashMap grids; private Page page; - private int focused_column; - private int focused_row; private uint current_row = 0; private uint current_col = 0; @@ -116,17 +113,6 @@ public class Slingshot.Widgets.Grid : Gtk.Grid { current_grid.attach (new Gtk.Grid (), column, row, 1, 1); } - private Gtk.Widget? get_child_at (int column, int row) { - var col = ((int)(column / page.columns)) + 1; - - var grid = grids.get (col); - if (grid != null) { - return grid.get_child_at (column - (int)page.columns * (col - 1), row) as Widgets.AppButton; - } else { - return null; - } - } - private int get_n_pages () { return (int) page.number; } @@ -137,14 +123,20 @@ public class Slingshot.Widgets.Grid : Gtk.Grid { public void go_to_next () { int page_number = get_current_page () + 1; - if (page_number <= get_n_pages ()) + if (page_number <= get_n_pages ()) { stack.set_visible_child_name (page_number.to_string ()); + } else { + Gdk.beep (); + } } public void go_to_previous () { int page_number = get_current_page () - 1; - if (page_number > 0) + if (page_number > 0) { stack.set_visible_child_name (page_number.to_string ()); + } else { + Gdk.beep (); + } } public void go_to_last () { @@ -155,24 +147,6 @@ public class Slingshot.Widgets.Grid : Gtk.Grid { stack.set_visible_child_name (number.to_string ()); } - private bool set_focus (int column, int row) { - var target_widget = get_child_at (column, row); - - if (target_widget != null) { - go_to_number (((int) (column / page.columns)) + 1); - - focused_column = column; - focused_row = row; - focused_widget = target_widget; - - focused_widget.grab_focus (); - - return true; - } - - return false; - } - public override bool key_press_event (Gdk.EventKey event) { switch (event.keyval) { case Gdk.Key.Home: @@ -182,27 +156,17 @@ public class Slingshot.Widgets.Grid : Gtk.Grid { case Gdk.Key.Left: case Gdk.Key.KP_Left: - if (get_style_context ().direction == Gtk.TextDirection.LTR) { - move_left (event); - } else { - move_right (event); - } - + move_left (event); return Gdk.EVENT_STOP; case Gdk.Key.Right: case Gdk.Key.KP_Right: - if (get_style_context ().direction == Gtk.TextDirection.LTR) { - move_right (event); - } else { - move_left (event); - } - + move_right (event); return Gdk.EVENT_STOP; case Gdk.Key.Up: case Gdk.Key.KP_Up: - if (set_focus (focused_column, focused_row - 1)) { + if (grids[get_current_page ()].child_focus (Gtk.DirectionType.UP)) { return Gdk.EVENT_STOP; } @@ -210,7 +174,9 @@ public class Slingshot.Widgets.Grid : Gtk.Grid { case Gdk.Key.Down: case Gdk.Key.KP_Down: - set_focus (focused_column, focused_row + 1); + if (grids[get_current_page ()].child_focus (Gtk.DirectionType.DOWN) == false) { + Gdk.beep (); + } return Gdk.EVENT_STOP; } @@ -218,18 +184,20 @@ public class Slingshot.Widgets.Grid : Gtk.Grid { } private void move_left (Gdk.EventKey event) { - if (event.state == Gdk.ModifierType.SHIFT_MASK) { + if ( + event.state == Gdk.ModifierType.SHIFT_MASK || + grids[get_current_page ()].child_focus (Gtk.DirectionType.LEFT) == false + ) { go_to_previous (); - } else { - set_focus (focused_column - 1, focused_row); } } private void move_right (Gdk.EventKey event) { - if (event.state == Gdk.ModifierType.SHIFT_MASK) { + if ( + event.state == Gdk.ModifierType.SHIFT_MASK || + grids[get_current_page ()].child_focus (Gtk.DirectionType.RIGHT) == false + ) { go_to_next (); - } else { - set_focus (focused_column + 1, focused_row); } } }