diff -Nru lxsession-vala-0.0.1/debian/changelog lxsession-vala-0.0.1/debian/changelog --- lxsession-vala-0.0.1/debian/changelog 2011-01-18 19:03:37.000000000 +0000 +++ lxsession-vala-0.0.1/debian/changelog 2011-01-19 00:45:24.000000000 +0000 @@ -1,4 +1,4 @@ -lxsession-vala (0.0.1-0ubuntu1~ppa2) natty; urgency=low +lxsession-vala (0.0.1-0ubuntu1~ppa3) natty; urgency=low * Initial release diff -Nru lxsession-vala-0.0.1/src/main.vala lxsession-vala-0.0.1/src/main.vala --- lxsession-vala-0.0.1/src/main.vala 2011-01-18 01:41:52.000000000 +0000 +++ lxsession-vala-0.0.1/src/main.vala 2011-01-19 00:51:50.000000000 +0000 @@ -1,7 +1,5 @@ -/*TODO -Implement functiosn to read keyfile for options -Read settings to load or not org.gnome.SessionManager session -*/ +/* TODO Read parameter and launch a Setting Manager (a GNOME or a LXDE ....) + */ void main() { try { @@ -18,13 +16,21 @@ var lxde_server = new LxdeSessionServer(); conn.register_object("/org/lxde/SessionManager", lxde_server); - // try to register service in session bus - uint reply_gnome = bus.request_name("org.gnome.SessionManager", (uint) 0); - assert(reply_gnome == DBus.RequestNameReply.PRIMARY_OWNER); + var config = new LxsessionConfig(); - // start service - var gnome_server = new GnomeSessionServer(); - conn.register_object("/org/gnome/SessionManager", gnome_server); + stdout.printf(config.gnome_session.to_string()); + + if (config.gnome_session) { + + // try to register service in session bus + uint reply_gnome = bus.request_name("org.gnome.SessionManager", (uint) 0); + assert(reply_gnome == DBus.RequestNameReply.PRIMARY_OWNER); + + // start service + var gnome_server = new GnomeSessionServer(); + conn.register_object("/org/gnome/SessionManager", gnome_server); + + } // start main loop new MainLoop().run(); diff -Nru lxsession-vala-0.0.1/src/settings.vala lxsession-vala-0.0.1/src/settings.vala --- lxsession-vala-0.0.1/src/settings.vala 2011-01-09 12:59:54.000000000 +0000 +++ lxsession-vala-0.0.1/src/settings.vala 2011-01-19 00:52:27.000000000 +0000 @@ -0,0 +1,90 @@ +public class LxsessionConfig: GLib.Object { + + /* Fields */ + private KeyFile config_file; + + /* For Properties */ + private bool _gnome_session; + + /* Properties */ + [Description(nick = "gnome session fallback", blurb = "Determine if the Gnome Session fallback is launched")] + public bool gnome_session { + get { return _gnome_session; } + set { _gnome_session = value; } + } + /* Constructor */ + construct { + config_file = load_config("desktop.conf"); + _gnome_session = read_gnome_session(); + this.notify["gnome_session"].connect(this.update_value_gnome_session); + } + + private bool read_gnome_session() { + bool setting; + try { + setting = config_file.get_boolean ("Session", "gnome_session"); + } + catch (KeyFileError err) { + warning (err.message); + setting = false; + } + return setting; + } + + private void update_value_gnome_session() { + bool gnome_session_value; + try { + gnome_session_value = config_file.get_boolean ("Session", "gnome_session"); + if (_gnome_session != gnome_session_value){ + config_file.set_boolean ("Session", "gnome_session", _gnome_session); + } + } + catch (KeyFileError err) { + warning (err.message); + } + } + +} + +/* Remove when full support of lxsession will be merged */ +public string get_session_name () { + string? session_name = Environment.get_variable ("DESKTOP_SESSION"); + return session_name; +} + +public KeyFile load_config(string conf) { + KeyFile kf = new KeyFile(); + string session = get_session_name (); + string user_config_dir = Environment.get_user_config_dir (); + string config_file = Path.build_filename (user_config_dir, session, conf); + string config_system_file; + try { + kf.load_from_file(config_file, KeyFileFlags.NONE); + } + catch (KeyFileError err) { + warning (err.message); + } + catch (FileError err) { + string[] system_config_dirs = Environment.get_system_config_dirs (); + string config_system_location; + foreach (string config in (system_config_dirs)) { + config_system_location = Path.build_filename (config, session); + if (FileUtils.test (config, FileTest.EXISTS)) { + config_system_file = Path.build_filename (session, conf); + break; + } + } + try { + kf.load_from_file(config_file, KeyFileFlags.NONE); + } + catch (KeyFileError err) { + warning (err.message); + kf = null; + } + catch (FileError err) { + warning (err.message); + kf = null; + } + } + return kf; +}