From ef716a7eb5c7d0e98e61dc8d260d97e99254f68a Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
Date: Thu, 28 Nov 2019 18:16:53 -0300
Subject: [PATCH] screenShield: Move clock to Unlock Dialog

Move the Screen Shield clock to Unlock Dialog. Also adjust
the CSS style classes names to match the new owner.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
---
 data/theme/gnome-shell-sass/_common.scss |  6 +--
 js/ui/screenShield.js                    | 47 +--------------------
 js/ui/unlockDialog.js                    | 52 +++++++++++++++++++++++-
 3 files changed, 54 insertions(+), 51 deletions(-)

diff --git a/data/theme/gnome-shell-sass/_common.scss b/data/theme/gnome-shell-sass/_common.scss
index 5dac4d6fc..df530ede6 100644
--- a/data/theme/gnome-shell-sass/_common.scss
+++ b/data/theme/gnome-shell-sass/_common.scss
@@ -2049,7 +2049,7 @@ StScrollBar {
 
 $_screenshield_shadow: 0px 0px 6px rgba(0, 0, 0, 0.726);
 
-.screen-shield-clock {
+.unlock-dialog-clock {
   color: white;
   text-shadow: $_screenshield_shadow;
   font-weight: bold;
@@ -2057,13 +2057,13 @@ $_screenshield_shadow: 0px 0px 6px rgba(0, 0, 0, 0.726);
   padding-bottom: 1.5em;
 }
 
-.screen-shield-clock-time {
+.unlock-dialog-clock-time {
   font-size: 72pt;
   text-shadow: $_screenshield_shadow;
   font-feature-settings: "tnum";
 }
 
-.screen-shield-clock-date { 
+.unlock-dialog-clock-date {
   font-size: 28pt;
   font-weight: normal;
 }
diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js
index 3e2bc90dc..871e8211c 100644
--- a/js/ui/screenShield.js
+++ b/js/ui/screenShield.js
@@ -1,7 +1,7 @@
 // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
 
 const { AccountsService, Clutter, Gio, GLib,
-        GnomeDesktop, GObject, Graphene, Meta, Shell, St } = imports.gi;
+        GObject, Graphene, Meta, Shell, St } = imports.gi;
 const Signals = imports.signals;
 
 const Background = imports.ui.background;
@@ -45,46 +45,6 @@ var STANDARD_FADE_TIME = 10000;
 var MANUAL_FADE_TIME = 300;
 var CURTAIN_SLIDE_TIME = 300;
 
-var Clock = GObject.registerClass(
-class ScreenShieldClock extends St.BoxLayout {
-    _init() {
-        super._init({ style_class: 'screen-shield-clock', vertical: true });
-
-        this._time = new St.Label({
-            style_class: 'screen-shield-clock-time',
-            x_align: Clutter.ActorAlign.CENTER,
-        });
-        this._date = new St.Label({
-            style_class: 'screen-shield-clock-date',
-            x_align: Clutter.ActorAlign.CENTER,
-        });
-
-        this.add_child(this._time);
-        this.add_child(this._date);
-
-        this._wallClock = new GnomeDesktop.WallClock({ time_only: true });
-        this._wallClock.connect('notify::clock', this._updateClock.bind(this));
-
-        this._updateClock();
-
-        this.connect('destroy', this._onDestroy.bind(this));
-    }
-
-    _updateClock() {
-        this._time.text = this._wallClock.clock;
-
-        let date = new Date();
-        /* Translators: This is a time format for a date in
-           long format */
-        let dateFormat = Shell.util_translate_time_string(N_("%A, %B %d"));
-        this._date.text = date.toLocaleFormat(dateFormat);
-    }
-
-    _onDestroy() {
-        this._wallClock.run_dispose();
-    }
-});
-
 var NotificationsBox = GObject.registerClass({
     Signals: { 'wake-up-screen': {} },
 }, class NotificationsBox extends St.BoxLayout {
@@ -972,8 +932,6 @@ var ScreenShield = class {
                                                          y_expand: true,
                                                          vertical: true,
                                                          style_class: 'screen-shield-contents-box' });
-        this._clock = new Clock();
-        this._lockScreenContentsBox.add_child(this._clock);
 
         this._lockScreenContents.add_actor(this._lockScreenContentsBox);
 
@@ -990,9 +948,6 @@ var ScreenShield = class {
     }
 
     _clearLockScreen() {
-        this._clock.destroy();
-        this._clock = null;
-
         if (this._notificationsBox) {
             this._notificationsBox.disconnect(this._wakeUpScreenId);
             this._notificationsBox.destroy();
diff --git a/js/ui/unlockDialog.js b/js/ui/unlockDialog.js
index 6584bea45..d413fcd33 100644
--- a/js/ui/unlockDialog.js
+++ b/js/ui/unlockDialog.js
@@ -1,8 +1,8 @@
 // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
 /* exported UnlockDialog */
 
-const { AccountsService, Atk, Clutter,
-        Gdm, Gio, GLib, GObject, Meta, Shell, St } = imports.gi;
+const { AccountsService, Atk, Clutter, Gdm, Gio,
+        GnomeDesktop, GLib, GObject, Meta, Shell, St } = imports.gi;
 
 const Layout = imports.ui.layout;
 const Main = imports.ui.main;
@@ -12,6 +12,46 @@ const AuthPrompt = imports.gdm.authPrompt;
 // The timeout before going back automatically to the lock screen (in seconds)
 const IDLE_TIMEOUT = 2 * 60;
 
+var Clock = GObject.registerClass(
+class UnlockDialogClock extends St.BoxLayout {
+    _init() {
+        super._init({ style_class: 'unlock-dialog-clock', vertical: true });
+
+        this._time = new St.Label({
+            style_class: 'unlock-dialog-clock-time',
+            x_align: Clutter.ActorAlign.CENTER,
+        });
+        this._date = new St.Label({
+            style_class: 'unlock-dialog-clock-date',
+            x_align: Clutter.ActorAlign.CENTER,
+        });
+
+        this.add_child(this._time);
+        this.add_child(this._date);
+
+        this._wallClock = new GnomeDesktop.WallClock({ time_only: true });
+        this._wallClock.connect('notify::clock', this._updateClock.bind(this));
+
+        this._updateClock();
+
+        this.connect('destroy', this._onDestroy.bind(this));
+    }
+
+    _updateClock() {
+        this._time.text = this._wallClock.clock;
+
+        let date = new Date();
+        /* Translators: This is a time format for a date in
+           long format */
+        let dateFormat = Shell.util_translate_time_string(N_("%A, %B %d"));
+        this._date.text = date.toLocaleFormat(dateFormat);
+    }
+
+    _onDestroy() {
+        this._wallClock.run_dispose();
+    }
+});
+
 var UnlockDialog = GObject.registerClass({
     Signals: { 'failed': {} },
 }, class UnlockDialog extends St.Widget {
@@ -37,6 +77,9 @@ var UnlockDialog = GObject.registerClass({
                                              y_expand: true });
         this.add_child(this._promptBox);
 
+        this._clock = new Clock();
+        this._promptBox.add_child(this._clock);
+
         this._authPrompt = new AuthPrompt.AuthPrompt(new Gdm.Client(), AuthPrompt.AuthPromptMode.UNLOCK_ONLY);
         this._authPrompt.connect('failed', this._fail.bind(this));
         this._authPrompt.connect('cancelled', this._fail.bind(this));
@@ -110,6 +153,11 @@ var UnlockDialog = GObject.registerClass({
     }
 
     _onDestroy() {
+        if (this._clock) {
+            this._clock.destroy();
+            this._clock = null;
+        }
+
         this.popModal();
 
         if (this._idleWatchId) {