[gnome-shell/gnome-3-34] extensionSystem: Create a file to flag that extensions are being loaded



commit 91f41105d5b15454ce03d1ca411825b058b99873
Author: Benjamin Berg <bberg redhat com>
Date:   Mon Nov 25 21:20:02 2019 +0100

    extensionSystem: Create a file to flag that extensions are being loaded
    
    When the extension system is loaded, create the
    gnome-shell-disable-extensions file in the users runtime directory. This
    file is automatically removed 60s later. The sole purpose of this file
    is to be consumed by the systemd units. If the file exists, the systemd
    units will disable extensions when the gnome-shell fails.
    
    https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/858

 js/ui/extensionSystem.js | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)
---
diff --git a/js/ui/extensionSystem.js b/js/ui/extensionSystem.js
index 7c36d70903..a7a386963a 100644
--- a/js/ui/extensionSystem.js
+++ b/js/ui/extensionSystem.js
@@ -1,7 +1,7 @@
 // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
 /* exported init connect disconnect */
 
-const { Gio, St } = imports.gi;
+const { GLib, Gio, St } = imports.gi;
 const Signals = imports.signals;
 
 const ExtensionUtils = imports.misc.extensionUtils;
@@ -28,6 +28,23 @@ var ExtensionManager = class {
     }
 
     init() {
+        // The following file should exist for a period of time when extensions
+        // are enabled after start. If it exists, then the systemd unit will
+        // disable extensions should gnome-shell crash.
+        // Should the file already exist from a previous login, then this is OK.
+        let disableFilename = GLib.build_filenamev([GLib.get_user_runtime_dir(), 
'gnome-shell-disable-extensions']);
+        let disableFile = Gio.File.new_for_path(disableFilename);
+        try {
+            disableFile.create(Gio.FileCreateFlags.REPLACE_DESTINATION, null);
+        } catch (e) {
+            log(`Failed to create file ${disableFilename}: ${e.message}`);
+        }
+
+        GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, 60, () => {
+            FileUtils.deleteGFile(disableFile);
+            return GLib.SOURCE_REMOVE;
+        });
+
         this._sessionUpdated();
     }
 


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