[gnome-boxes] spice-display: Add 'machine' prop



commit 5612a91a4d7abb79b8b55548e8d9f25795d711ad
Author: Adrien Plazas <kekun plazas laposte net>
Date:   Fri Jul 18 16:18:13 2014 +0200

    spice-display: Add 'machine' prop
    
    SpiceDisplay now checks the state of it's machine instead of the
    App.window singleton's one.
    
    This is needed to drop the use of AppWindow singleton and therefore to
    make multiple windows possible.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=732098

 src/libvirt-machine.vala |    2 +-
 src/ovirt-machine.vala   |    3 ++-
 src/remote-machine.vala  |    2 +-
 src/spice-display.vala   |   16 +++++++++++-----
 4 files changed, 15 insertions(+), 8 deletions(-)
---
diff --git a/src/libvirt-machine.vala b/src/libvirt-machine.vala
index 5386c6b..48fb98c 100644
--- a/src/libvirt-machine.vala
+++ b/src/libvirt-machine.vala
@@ -346,7 +346,7 @@ private class Boxes.LibvirtMachine: Boxes.Machine {
 
         switch (type) {
         case "spice":
-            return new SpiceDisplay (config, host, int.parse (port));
+            return new SpiceDisplay (this, config, host, int.parse (port));
 
         case "vnc":
             return new VncDisplay (config, host, int.parse (port));
diff --git a/src/ovirt-machine.vala b/src/ovirt-machine.vala
index 8518db6..6eae4b2 100644
--- a/src/ovirt-machine.vala
+++ b/src/ovirt-machine.vala
@@ -83,7 +83,8 @@ private class Boxes.OvirtMachine: Boxes.Machine {
 
         switch (vm.display.type) {
         case Ovirt.VmDisplayType.SPICE:
-            var display = new SpiceDisplay (config,
+            var display = new SpiceDisplay (this,
+                                            config,
                                             vm.display.address,
                                             (int) vm.display.port,
                                             (int) vm.display.secure_port,
diff --git a/src/remote-machine.vala b/src/remote-machine.vala
index 9d725a9..1cccc68 100644
--- a/src/remote-machine.vala
+++ b/src/remote-machine.vala
@@ -25,7 +25,7 @@ private class Boxes.RemoteMachine: Boxes.Machine, Boxes.IPropertiesProvider {
 
         switch (type) {
         case "spice":
-            return new SpiceDisplay.with_uri (config, source.uri);
+            return new SpiceDisplay.with_uri (this, config, source.uri);
 
         case "vnc":
             return new VncDisplay.with_uri (config, source.uri);
diff --git a/src/spice-display.vala b/src/spice-display.vala
index bda3eeb..da97e5a 100644
--- a/src/spice-display.vala
+++ b/src/spice-display.vala
@@ -7,6 +7,8 @@ private class Boxes.SpiceDisplay: Boxes.Display {
     public override string uri { owned get { return session.uri; } }
     public GLib.ByteArray ca_cert { owned get { return session.ca; } set { session.ca = value; } }
 
+    private weak Machine machine; // Weak ref for avoiding cyclic ref
+
     private Spice.Session session;
     private unowned Spice.GtkSession gtk_session;
     private unowned Spice.Audio audio;
@@ -19,7 +21,7 @@ private class Boxes.SpiceDisplay: Boxes.Display {
     public bool resize_guest { get; set; }
     private void ui_state_changed () {
         // TODO: multi display
-        if (App.window.ui_state == UIState.DISPLAY) {
+        if (machine.ui_state == UIState.DISPLAY) {
             // disable resize guest when minimizing guest widget
             var display = get_display (0) as Spice.Display;
             display.resize_guest = resize_guest;
@@ -67,8 +69,6 @@ private class Boxes.SpiceDisplay: Boxes.Display {
         this.notify["config"].connect (() => {
             config.sync_properties (gtk_session, gtk_session_sync_properties);
         });
-
-        App.window.notify["ui-state"].connect (ui_state_changed);
     }
 
     Spice.MainChannel? main_channel;
@@ -91,8 +91,11 @@ private class Boxes.SpiceDisplay: Boxes.Display {
         main_cleanup ();
     }
 
-    public SpiceDisplay (BoxConfig config, string host, int port, int tls_port = 0, string? host_subject = 
null)
+    public SpiceDisplay (Machine machine, BoxConfig config, string host, int port, int tls_port = 0, string? 
host_subject = null)
         requires (port != 0 || tls_port != 0) {
+        this.machine = machine;
+        machine.notify["ui-state"].connect (ui_state_changed);
+
         this.config = config;
 
         session.host = host;
@@ -112,7 +115,10 @@ private class Boxes.SpiceDisplay: Boxes.Display {
             session.cert_subject = GLib.Environment.get_variable ("BOXES_SPICE_HOST_SUBJECT");
     }
 
-    public SpiceDisplay.with_uri (BoxConfig config, string uri) {
+    public SpiceDisplay.with_uri (Machine machine, BoxConfig config, string uri) {
+        this.machine = machine;
+        machine.notify["ui-state"].connect (ui_state_changed);
+
         this.config = config;
 
         session.uri = uri;


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