- private void init_ipc_server ()
- {
- this.ipc_server = new MoonshotServer (this);
- GLib.Bus.own_name (GLib.BusType.SESSION,
- "org.janet.Moonshot",
- GLib.BusNameOwnerFlags.NONE,
- bus_acquired_cb,
- (conn, name) => {},
- (conn, name) => {
- bool shown=false;
- try {
- IIdentityManager manager = Bus.get_proxy_sync (BusType.SESSION, name, "/org/janet/moonshot");
- shown = manager.show_ui();
- } catch (IOError e) {
- }
- if (!shown) {
- GLib.error ("Couldn't own name %s on dbus or show previously launched identity manager.", name);
- } else {
- stdout.printf("Showed previously launched identity manager.\n");
- GLib.Process.exit(0);
- }
- });
+ private void init_ipc_server() {
+ this.ipc_server = new MoonshotServer(this);
+ bool shown = false;
+ GLib.Bus.own_name(GLib.BusType.SESSION,
+ "org.janet.Moonshot",
+ GLib.BusNameOwnerFlags.NONE,
+ bus_acquired_cb,
+
+ // Name acquired callback:
+ (conn, name) => {
+ logger.trace(@"init_ipc_server: name_acquired_closure; show_requested=$show_requested");
+
+ name_is_owned = true;
+
+ // Now that we know that we own the name, it's safe to show the UI.
+ if (show_requested) {
+ show();
+ show_requested = false;
+ }
+ shown = true;
+ },
+
+ // Name lost callback:
+ (conn, name) => {
+ logger.trace("init_ipc_server: name_lost_closure");
+
+ // This callback usually means that another moonshot is already running.
+ // But it *might* mean that we lost the name for some other reason
+ // (though it's unclear to me yet what those reasons are.)
+ // Clearing these flags seems like a good idea for that case. -- dbreslau
+ name_is_owned = false;
+ show_requested = false;
+
+ try {
+ if (!shown) {
+ IIdentityManager manager = Bus.get_proxy_sync(BusType.SESSION, name, "/org/janet/moonshot");
+ shown = manager.show_ui();
+ }
+ } catch (IOError e) {
+ logger.error("init_ipc_server.name_lost_closure: Caught IOError: " + e.message);
+ }
+ if (!shown) {
+ logger.error("init_ipc_server.name_lost_closure: Couldn't own name %s on dbus or show previously launched identity manager".printf(name));
+ GLib.error("Couldn't own name %s on dbus or show previously launched identity manager.", name);
+ } else {
+ logger.trace("init_ipc_server.name_lost_closure: Showed previously launched identity manager.");
+ stdout.printf("Showed previously launched identity manager.\n");
+ GLib.Process.exit(0);
+ }
+ });