[gnome-sudoku] Do not draw focused or highlighted cell when board is not in focus



commit 90b7cf63c42aa058a8dbd761fdf7d0fa47254925
Author: Andrey Kutejko <andy128k gmail com>
Date:   Sun Aug 2 23:50:18 2020 +0200

    Do not draw focused or highlighted cell when board is not in focus

 src/sudoku-view.vala | 40 +++++++++++++++++++++++++++++++++-------
 1 file changed, 33 insertions(+), 7 deletions(-)
---
diff --git a/src/sudoku-view.vala b/src/sudoku-view.vala
index 749b7ca..3b257c3 100644
--- a/src/sudoku-view.vala
+++ b/src/sudoku-view.vala
@@ -334,7 +334,7 @@ private class SudokuCellView : DrawingArea
     public override bool draw (Cairo.Context c)
     {
         RGBA background_color;
-        if (_selected)
+        if (_selected && is_focus)
             background_color = selected_bg_color;
         else if (is_fixed)
             background_color = fixed_cell_color;
@@ -465,15 +465,21 @@ public class SudokuView : AspectFrame
     private DrawingArea drawing;
     private Grid grid;
 
-    private int selected_row = 0;
-    private int selected_col = 0;
+    private int selected_row = -1;
+    private int selected_col = -1;
     private void set_selected (int cell_row, int cell_col)
     {
-        cells[selected_row, selected_col].selected = false;
-        cells[selected_row, selected_col].queue_draw ();
+        if (selected_row >= 0 && selected_col >= 0)
+        {
+            cells[selected_row, selected_col].selected = false;
+            cells[selected_row, selected_col].queue_draw ();
+        }
         selected_row = cell_row;
         selected_col = cell_col;
-        cells[selected_row, selected_col].selected = true;
+        if (selected_row >= 0 && selected_col >= 0)
+        {
+            cells[selected_row, selected_col].selected = true;
+        }
     }
 
     public SudokuView (SudokuGame game)
@@ -545,7 +551,8 @@ public class SudokuView : AspectFrame
 
                     for (var col_tmp = 0; col_tmp < game.board.cols; col_tmp++)
                     {
-                        for (var row_tmp = 0; row_tmp < game.board.rows; row_tmp++) {
+                        for (var row_tmp = 0; row_tmp < game.board.rows; row_tmp++)
+                        {
                             cells[row_tmp, col_tmp].highlighted = _highlighter && (
                                 col_tmp == cell_col ||
                                 row_tmp == cell_row ||
@@ -560,6 +567,25 @@ public class SudokuView : AspectFrame
                     return false;
                 });
 
+                cell.focus_out_event.connect (() => {
+                    if (game.paused)
+                        return false;
+
+                    this.set_selected (-1, -1);
+
+                    for (var col_tmp = 0; col_tmp < game.board.cols; col_tmp++)
+                    {
+                        for (var row_tmp = 0; row_tmp < game.board.rows; row_tmp++)
+                        {
+                            cells[row_tmp, col_tmp].highlighted = false;
+                        }
+                    }
+
+                    queue_draw ();
+
+                    return false;
+                });
+
                 cell.notify["value"].connect ((s, p)=> {
                     if (_show_possibilities || _show_warnings || game.board.broken || 
previous_board_broken_state)
                         previous_board_broken_state = game.board.broken;


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