[gnome-shell] Consolidate ConsoleKit and Systemd code



commit 6cb713b0e382e36490a6784b46cca06a3d8425df
Author: Giovanni Campagna <gcampagna src gnome org>
Date:   Fri Aug 17 14:18:53 2012 +0200

    Consolidate ConsoleKit and Systemd code
    
    In preparation for accessing it in the screenshield, factor out
    common code for ConsoleKit and Systemd.
    Also, clean up ConsoleKit manager, as the daemon is required in
    a non systemd installation. In particular:
    - We allow it to be autostarted at session startup (or really,
      we expect it to be already there, started by GDM during session
      opening).
    - We no longer silently assume that the session is active if
      it can't start.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=682096

 js/Makefile.am            |    4 +-
 js/gdm/consoleKit.js      |   22 --------------
 js/gdm/powerMenu.js       |    4 +-
 js/gdm/systemd.js         |   31 --------------------
 js/misc/consoleKit.js     |   55 ++++++++++++++++++++++++++++++++++++
 js/misc/systemd.js        |   44 +++++++++++++++++++++++++++++
 js/ui/automountManager.js |   68 ++++----------------------------------------
 7 files changed, 110 insertions(+), 118 deletions(-)
---
diff --git a/js/Makefile.am b/js/Makefile.am
index 91dc84c..37c4a92 100644
--- a/js/Makefile.am
+++ b/js/Makefile.am
@@ -17,14 +17,13 @@ jsdir = $(pkgdatadir)/js
 
 nobase_dist_js_DATA = 	\
 	gdm/batch.js		\
-	gdm/consoleKit.js	\
 	gdm/fingerprint.js	\
 	gdm/loginDialog.js	\
 	gdm/powerMenu.js	\
-	gdm/systemd.js	 	\
 	gdm/util.js		\
 	extensionPrefs/main.js	\
 	misc/config.js		\
+	misc/consoleKit.js	\
 	misc/extensionUtils.js	\
 	misc/fileUtils.js	\
 	misc/gnomeSession.js	\
@@ -32,6 +31,7 @@ nobase_dist_js_DATA = 	\
 	misc/jsParse.js		\
 	misc/modemManager.js	\
 	misc/params.js		\
+	misc/systemd.js	 	\
 	misc/util.js		\
 	perf/core.js		\
 	ui/altTab.js		\
diff --git a/js/gdm/powerMenu.js b/js/gdm/powerMenu.js
index 613a896..e06c7a2 100644
--- a/js/gdm/powerMenu.js
+++ b/js/gdm/powerMenu.js
@@ -21,8 +21,8 @@
 const Lang = imports.lang;
 const UPowerGlib = imports.gi.UPowerGlib;
 
-const ConsoleKit = imports.gdm.consoleKit;
-const Systemd = imports.gdm.systemd;
+const ConsoleKit = imports.misc.consoleKit;
+const Systemd = imports.misc.systemd;
 
 const PanelMenu = imports.ui.panelMenu;
 const PopupMenu = imports.ui.popupMenu;
diff --git a/js/misc/consoleKit.js b/js/misc/consoleKit.js
new file mode 100644
index 0000000..96afd5a
--- /dev/null
+++ b/js/misc/consoleKit.js
@@ -0,0 +1,55 @@
+// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
+
+const Gio = imports.gi.Gio;
+
+const ConsoleKitManagerIface = <interface name='org.freedesktop.ConsoleKit.Manager'>
+<method name='CanRestart'>
+    <arg type='b' direction='out'/>
+</method>
+<method name='CanStop'>
+    <arg type='b' direction='out'/>
+</method>
+<method name='Restart' />
+<method name='Stop' />
+<method name='GetCurrentSession'>
+    <arg type='o' direction='out' />
+</method>
+</interface>;
+
+const ConsoleKitSessionIface = <interface name='org.freedesktop.ConsoleKit.Session'>
+<method name='IsActive'>
+    <arg type='b' direction='out' />
+</method>
+<signal name='ActiveChanged'>
+    <arg type='b' direction='out' />
+</signal>
+<signal name='Lock' />
+<signal name='Unlock' />
+</interface>;
+
+const ConsoleKitSessionProxy = Gio.DBusProxy.makeProxyWrapper(ConsoleKitSessionIface);
+
+const ConsoleKitManagerInfo = Gio.DBusInterfaceInfo.new_for_xml(ConsoleKitManagerIface);
+
+function ConsoleKitManager() {
+    var self = new Gio.DBusProxy({ g_connection: Gio.DBus.system,
+				   g_interface_name: ConsoleKitManagerInfo.name,
+				   g_interface_info: ConsoleKitManagerInfo,
+				   g_name: 'org.freedesktop.ConsoleKit',
+				   g_object_path: '/org/freedesktop/ConsoleKit/Manager',
+                                   g_flags: Gio.DBusProxyFlags.DO_NOT_LOAD_PROPERTIES });
+    self.init(null);
+
+    self.GetCurrentSessionRemote(function([session]) {
+        self.ckSession = new ConsoleKitSessionProxy(Gio.DBus.system, 'org.freedesktop.ConsoleKit', session);
+
+        self.ckSession.connectSignal('ActiveChanged', function(object, senderName, [isActive]) {
+            self.sessionActive = isActive;
+        });
+        self.ckSession.IsActiveRemote(function([isActive]) {
+            self.sessionActive = isActive;
+        });
+    });
+
+    return self;
+}
diff --git a/js/misc/systemd.js b/js/misc/systemd.js
new file mode 100644
index 0000000..39ef129
--- /dev/null
+++ b/js/misc/systemd.js
@@ -0,0 +1,44 @@
+// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
+
+const GLib = imports.gi.GLib;
+const Gio = imports.gi.Gio;
+
+const SystemdLoginManagerIface = <interface name='org.freedesktop.login1.Manager'>
+<method name='PowerOff'>
+    <arg type='b' direction='in'/>
+</method>
+<method name='Reboot'>
+    <arg type='b' direction='in'/>
+</method>
+<method name='CanPowerOff'>
+    <arg type='s' direction='out'/>
+</method>
+<method name='CanReboot'>
+    <arg type='s' direction='out'/>
+</method>
+</interface>;
+
+const SystemdLoginSessionIface = <interface name='org.freedesktop.login1.Session'>
+<signal name='Lock' />
+<signal name='Unlock' />
+</interface>;
+
+const SystemdLoginManagerProxy = Gio.DBusProxy.makeProxyWrapper(SystemdLoginManagerIface);
+
+const SystemdLoginSessionProxy = Gio.DBusProxy.makeProxyWrapper(SystemdLoginSessionIface);
+
+function SystemdLoginManager() {
+    return new SystemdLoginManagerProxy(Gio.DBus.system,
+                                        'org.freedesktop.login1',
+                                        '/org/freedesktop/login1');
+};
+
+function SystemdLoginSession(id) {
+    return new SystemdLoginSessionProxy(Gio.DBus.system,
+                                        'org.freedesktop.login1',
+                                        '/org/freedesktop/login1/session/' + id);
+}
+
+function haveSystemd() {
+    return GLib.access("/sys/fs/cgroup/systemd", 0) >= 0;
+}
diff --git a/js/ui/automountManager.js b/js/ui/automountManager.js
index 69a94cb..19f2aca 100644
--- a/js/ui/automountManager.js
+++ b/js/ui/automountManager.js
@@ -5,11 +5,13 @@ const Mainloop = imports.mainloop;
 const GLib = imports.gi.GLib;
 const Gio = imports.gi.Gio;
 const Params = imports.misc.params;
-
 const Shell = imports.gi.Shell;
+
+const ConsoleKit = imports.misc.consoleKit;
+const GnomeSession = imports.misc.gnomeSession;
 const Main = imports.ui.main;
 const ShellMountOperation = imports.ui.shellMountOperation;
-const GnomeSession = imports.misc.gnomeSession;
+const Systemd = imports.misc.systemd;
 
 const GNOME_SESSION_AUTOMOUNT_INHIBIT = 16;
 
@@ -19,62 +21,6 @@ const SETTING_ENABLE_AUTOMOUNT = 'automount';
 
 const AUTORUN_EXPIRE_TIMEOUT_SECS = 10;
 
-const ConsoleKitSessionIface = <interface name="org.freedesktop.ConsoleKit.Session">
-<method name="IsActive">
-    <arg type="b" direction="out" />
-</method>
-<signal name="ActiveChanged">
-    <arg type="b" direction="out" />
-</signal>
-</interface>;
-
-const ConsoleKitSessionProxy = Gio.DBusProxy.makeProxyWrapper(ConsoleKitSessionIface);
-
-const ConsoleKitManagerIface = <interface name="org.freedesktop.ConsoleKit.Manager">
-<method name="GetCurrentSession">
-    <arg type="o" direction="out" />
-</method>
-</interface>;
-
-const ConsoleKitManagerInfo = Gio.DBusInterfaceInfo.new_for_xml(ConsoleKitManagerIface);
-
-function ConsoleKitManager() {
-    var self = new Gio.DBusProxy({ g_connection: Gio.DBus.system,
-				   g_interface_name: ConsoleKitManagerInfo.name,
-				   g_interface_info: ConsoleKitManagerInfo,
-				   g_name: 'org.freedesktop.ConsoleKit',
-				   g_object_path: '/org/freedesktop/ConsoleKit/Manager',
-                                   g_flags: (Gio.DBusProxyFlags.DO_NOT_AUTO_START |
-                                             Gio.DBusProxyFlags.DO_NOT_LOAD_PROPERTIES) });
-
-    self._updateSessionActive = function() {
-        if (self.g_name_owner) {
-            self.GetCurrentSessionRemote(function([session]) {
-                self._ckSession = new ConsoleKitSessionProxy(Gio.DBus.system, 'org.freedesktop.ConsoleKit', session);
-
-                self._ckSession.connectSignal('ActiveChanged', function(object, senderName, [isActive]) {
-                    self.sessionActive = isActive;
-                });
-                self._ckSession.IsActiveRemote(function([isActive]) {
-                    self.sessionActive = isActive;
-                });
-            });
-        } else {
-            self.sessionActive = true;
-        }
-    };
-    self.connect('notify::g-name-owner',
-                 Lang.bind(self, self._updateSessionActive));
-
-    self._updateSessionActive();
-    self.init(null);
-    return self;
-}
-
-function haveSystemd() {
-    return GLib.access("/sys/fs/cgroup/systemd", 0) >= 0;
-}
-
 const AutomountManager = new Lang.Class({
     Name: 'AutomountManager',
 
@@ -88,8 +34,8 @@ const AutomountManager = new Lang.Class({
                                     Lang.bind(this, this._InhibitorsChanged));
         this._inhibited = false;
 
-        if (!haveSystemd())
-            this.ckListener = new ConsoleKitManager();
+        if (!Systemd.haveSystemd())
+            this.ckListener = new ConsoleKit.ConsoleKitManager();
 
         Main.screenShield.connect('lock-status-changed', Lang.bind(this, this._lockStatusChanged));
 
@@ -151,7 +97,7 @@ const AutomountManager = new Lang.Class({
         // right mechanism: either systemd if available or ConsoleKit
         // as fallback.
 
-        if (haveSystemd())
+        if (Systemd.haveSystemd())
             return Shell.session_is_active_for_systemd();
 
         return this.ckListener.sessionActive;



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