[gnome-break-timer/dylanmccall/lock-screen-option: 6/6] Add an option to disable screen locking




commit 294d3cbef36d77ff96d57e5f8d32618051a8c91b
Author: Dylan McCall <dylan dylanmccall ca>
Date:   Wed Dec 16 10:05:40 2020 -0800

    Add an option to disable screen locking
    
    In addition, disable screen locking by default. It is easy to enable,
    and making it opt-in will avoid confusion.
    
    Closes #15

 .../gschema/org.gnome.BreakTimer.gschema.xml.in.in |  6 +++++
 src/daemon/restbreak/RestBreakController.vala      |  2 ++
 src/daemon/restbreak/RestBreakType.vala            |  1 +
 src/daemon/restbreak/RestBreakView.vala            |  8 +++++-
 src/settings/BreakSettingsDialog.vala              |  4 +++
 src/settings/break/BreakSettingsWidget.vala        | 29 ++++++----------------
 .../restbreak/RestBreakSettingsWidget.vala         |  8 ++++++
 .../timerbreak/TimerBreakSettingsWidget.vala       |  3 ++-
 8 files changed, 38 insertions(+), 23 deletions(-)
---
diff --git a/data/gschema/org.gnome.BreakTimer.gschema.xml.in.in 
b/data/gschema/org.gnome.BreakTimer.gschema.xml.in.in
index 1c674b4..b57599b 100644
--- a/data/gschema/org.gnome.BreakTimer.gschema.xml.in.in
+++ b/data/gschema/org.gnome.BreakTimer.gschema.xml.in.in
@@ -38,6 +38,12 @@
       <description>The duration of each rest break, in seconds.</description>
       <default>360</default>
     </key>
+
+    <key name="lock-screen" type="b">
+      <summary>Lock screen during breaks</summary>
+      <description>True to lock the screen during rest breaks.</description>
+      <default>false</default>
+    </key>
   </schema>
 
   <schema id="@APPLICATION_ID@.microbreak" path="/org/gnome/BreakTimer/microbreak/">
diff --git a/src/daemon/restbreak/RestBreakController.vala b/src/daemon/restbreak/RestBreakController.vala
index 828903c..9e67d5c 100644
--- a/src/daemon/restbreak/RestBreakController.vala
+++ b/src/daemon/restbreak/RestBreakController.vala
@@ -31,6 +31,8 @@ namespace BreakTimer.Daemon.RestBreak {
  * finished using the computer, and then it will start to count down again.
  */
 public class RestBreakController : TimerBreakController {
+    public bool lock_screen_enabled { get; set; }
+
     private Countdown reminder_countdown;
 
     public signal void current_duration_changed ();
diff --git a/src/daemon/restbreak/RestBreakType.vala b/src/daemon/restbreak/RestBreakType.vala
index eb003c9..27c4248 100644
--- a/src/daemon/restbreak/RestBreakType.vala
+++ b/src/daemon/restbreak/RestBreakType.vala
@@ -32,6 +32,7 @@ public class RestBreakType : TimerBreakType {
         var settings = new GLib.Settings (Config.APPLICATION_ID + ".restbreak");
         settings.bind ("interval-seconds", break_controller, "interval", GLib.SettingsBindFlags.GET);
         settings.bind ("duration-seconds", break_controller, "duration", GLib.SettingsBindFlags.GET);
+        settings.bind ("lock-screen", break_controller, "lock-screen-enabled", GLib.SettingsBindFlags.GET);
 
         base ("restbreak", break_controller, break_view);
     }
diff --git a/src/daemon/restbreak/RestBreakView.vala b/src/daemon/restbreak/RestBreakView.vala
index cc05a42..7e49ae1 100644
--- a/src/daemon/restbreak/RestBreakView.vala
+++ b/src/daemon/restbreak/RestBreakView.vala
@@ -161,7 +161,13 @@ public class RestBreakView : TimerBreakView {
     private void counting_cb (int lap_time, int total_time) {
         this.human_is_resting = lap_time > 20;
 
-        if (this.human_is_resting && this.can_lock_screen ()) {
+        if (this.human_is_resting) {
+            this.try_lock_screen ();
+        }
+    }
+
+    private void try_lock_screen () {
+        if (this.rest_break.lock_screen_enabled && this.can_lock_screen ()) {
             // TODO: Make a sound slightly before locking?
             this.lock_screen ();
         }
diff --git a/src/settings/BreakSettingsDialog.vala b/src/settings/BreakSettingsDialog.vala
index e43a0f7..8cb2089 100644
--- a/src/settings/BreakSettingsDialog.vala
+++ b/src/settings/BreakSettingsDialog.vala
@@ -72,6 +72,9 @@ public class BreakSettingsDialog : Gtk.Dialog {
         );
         settings.bind ("selected-breaks", this.configuration_chooser, "selected-break-ids", 
SettingsBindFlags.DEFAULT);
 
+        // TODO: Create a stack with a child for each configuration. Switch
+        //       between these instead of showing / hiding widgets.
+
         this.breaks_grid = new FixedSizeGrid ();
         content.add (this.breaks_grid);
         this.breaks_grid.set_orientation (Gtk.Orientation.VERTICAL);
@@ -87,6 +90,7 @@ public class BreakSettingsDialog : Gtk.Dialog {
             this.breaks_grid.add (settings_widget);
             settings_widget.realize ();
             settings_widget.set_valign (Gtk.Align.CENTER);
+            settings_widget.set_halign (Gtk.Align.FILL);
             settings_widget.set_vexpand (true);
             settings_widget.set_margin_top (10);
             settings_widget.set_margin_bottom (10);
diff --git a/src/settings/break/BreakSettingsWidget.vala b/src/settings/break/BreakSettingsWidget.vala
index 25ca960..8a6b2ff 100644
--- a/src/settings/break/BreakSettingsWidget.vala
+++ b/src/settings/break/BreakSettingsWidget.vala
@@ -22,7 +22,7 @@ namespace BreakTimer.Settings.Break {
 
 public abstract class BreakSettingsWidget : Gtk.Grid {
     private Gtk.Grid header;
-    private Gtk.Grid details;
+    private Gtk.Box details;
 
     protected BreakSettingsWidget (BreakType break_type, string title, string? description) {
         GLib.Object ();
@@ -34,36 +34,23 @@ public abstract class BreakSettingsWidget : Gtk.Grid {
         this.add (this.header);
         this.header.set_column_spacing (12);
 
-        var title_grid = new Gtk.Grid ();
-        this.set_header (title_grid);
-        title_grid.set_orientation (Gtk.Orientation.VERTICAL);
-        title_grid.set_row_spacing (4);
-
         var title_label = new Gtk.Label (title);
-        title_grid.add (title_label);
+        this.set_header_title (title_label);
         title_label.get_style_context ().add_class ("_settings-title");
-        title_label.set_halign (Gtk.Align.FILL);
+        title_label.set_halign (Gtk.Align.CENTER);
         title_label.set_hexpand (true);
-        title_label.set_justify (Gtk.Justification.CENTER);
-
-        // var description_label = new Gtk.Label ("<small>%s</small>".printf (description));
-        // title_grid.add (description_label);
-        // description_label.get_style_context ().add_class ("_settings-description");
-        // description_label.set_use_markup (true);
-        // description_label.set_halign (Gtk.Align.FILL);
-        // description_label.set_hexpand (true);
-        // description_label.set_justify (Gtk.Justification.CENTER);
+        // title_label.set_justify (Gtk.Justification.CENTER);
 
-        this.details = new Gtk.Grid ();
+        this.details = new Gtk.Box (Gtk.Orientation.VERTICAL, 10);
         this.add (this.details);
         this.details.set_margin_start (12);
-        this.details.set_halign (Gtk.Align.CENTER);
+        this.details.set_halign (Gtk.Align.FILL);
         this.details.set_hexpand (true);
 
         this.show_all ();
     }
 
-    protected void set_header (Gtk.Widget content) {
+    protected void set_header_title (Gtk.Widget content) {
         this.header.attach (content, 0, 0, 1, 1);
     }
 
@@ -73,7 +60,7 @@ public abstract class BreakSettingsWidget : Gtk.Grid {
         content.set_valign (Gtk.Align.CENTER);
     }
 
-    protected void set_details (Gtk.Widget content) {
+    protected void set_details_widget (Gtk.Widget content) {
         this.details.add (content);
     }
 }
diff --git a/src/settings/restbreak/RestBreakSettingsWidget.vala 
b/src/settings/restbreak/RestBreakSettingsWidget.vala
index df192b0..fe35db1 100644
--- a/src/settings/restbreak/RestBreakSettingsWidget.vala
+++ b/src/settings/restbreak/RestBreakSettingsWidget.vala
@@ -29,7 +29,15 @@ class RestBreakSettingsWidget : TimerBreakSettingsWidget {
             _("Full break"),
             _("And take some longer breaks to stretch your legs")
         );
+
+        var lock_toggle = new Gtk.CheckButton.with_label ("Lock the screen during breaks");
+        break_type.settings.bind ("lock-screen", lock_toggle, "active", SettingsBindFlags.DEFAULT);
+        lock_toggle.set_halign (Gtk.Align.CENTER);
+        lock_toggle.show ();
+
+        this.set_details_widget (lock_toggle);
     }
+
 }
 
 }
diff --git a/src/settings/timerbreak/TimerBreakSettingsWidget.vala 
b/src/settings/timerbreak/TimerBreakSettingsWidget.vala
index 47080e0..cb18ccf 100644
--- a/src/settings/timerbreak/TimerBreakSettingsWidget.vala
+++ b/src/settings/timerbreak/TimerBreakSettingsWidget.vala
@@ -28,8 +28,9 @@ public abstract class TimerBreakSettingsWidget : BreakSettingsWidget {
         base (break_type, title, description);
 
         var details_grid = new Gtk.Grid ();
-        this.set_details (details_grid);
+        this.set_details_widget (details_grid);
 
+        details_grid.set_halign (Gtk.Align.CENTER);
         details_grid.set_column_spacing (8);
         details_grid.set_row_spacing (8);
 


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