[gnome-boxes] UI is now an interface rather than abstract class



commit 027b7149d472cc7c2cb1ba0b66d5a86f2f0d8bef
Author: Zeeshan Ali (Khattak) <zeeshanak gnome org>
Date:   Sat Jan 4 22:01:19 2014 +0000

    UI is now an interface rather than abstract class
    
    To be able to make use of GtkBuilder composite widgets support in a
    clean way, we'll have to derive many of the UI classes from different
    gtk widget classes and that means we can't derive UI baseclass anymore.
    
    So lets make UI an interface.

 src/app.vala             |   30 +++++++++++++++++-------------
 src/collection-view.vala |   11 +++++++----
 src/collection.vala      |    7 ++++++-
 src/display-page.vala    |    4 ++--
 src/empty-boxes.vala     |   10 +++++-----
 src/machine.vala         |   25 +++++++++++++++----------
 src/properties.vala      |   11 +++++++----
 src/searchbar.vala       |    9 ++++-----
 src/sidebar.vala         |    9 ++++++---
 src/topbar.vala          |   14 +++++++++-----
 src/ui.vala              |   26 ++++++++++----------------
 src/wizard.vala          |   15 +++++++++------
 12 files changed, 97 insertions(+), 74 deletions(-)
---
diff --git a/src/app.vala b/src/app.vala
index 53564e3..f3fe83f 100644
--- a/src/app.vala
+++ b/src/app.vala
@@ -46,9 +46,11 @@ private class Boxes.Application: Gtk.Application {
     }
 }
 
-private class Boxes.App: Boxes.UI {
+private class Boxes.App: GLib.Object, Boxes.UI {
     public static App app;
-    public override Clutter.Actor actor { get { return stage; } }
+    public Clutter.Actor actor { get { return stage; } }
+    public UIState previous_ui_state { get; protected set; }
+    public UIState ui_state { get; protected set; }
     public Gtk.ApplicationWindow window;
     [CCode (notify = false)]
     public bool fullscreen {
@@ -114,7 +116,7 @@ private class Boxes.App: Boxes.UI {
         application.add_action (action);
 
         action = new GLib.SimpleAction ("new", null);
-        action.activate.connect (() => { ui_state = UIState.WIZARD; });
+        action.activate.connect (() => { set_state (UIState.WIZARD); });
         application.add_action (action);
 
         action = new GLib.SimpleAction ("select-all", null);
@@ -167,6 +169,8 @@ private class Boxes.App: Boxes.UI {
                                    "wrap-license", true);
         });
         application.add_action (action);
+
+        notify["ui-state"].connect (ui_state_changed);
     }
 
     public void startup () {
@@ -334,7 +338,7 @@ private class Boxes.App: Boxes.UI {
     }
 
     public void open (string name) {
-        ui_state = UIState.COLLECTION;
+        set_state (UIState.COLLECTION);
         // we don't want to show the collection items as it will
         // appear as a glitch when opening a box immediately
         view.visible = false;
@@ -350,7 +354,7 @@ private class Boxes.App: Boxes.UI {
     }
 
     public bool open_uuid (string uuid) {
-        ui_state = UIState.COLLECTION;
+        set_state (UIState.COLLECTION);
         // we don't want to show the collection items as it will
         // appear as a glitch when opening a box immediately
         view.visible = false;
@@ -653,7 +657,7 @@ private class Boxes.App: Boxes.UI {
 
         main_vbox.show_all ();
 
-        ui_state = UIState.COLLECTION;
+        set_state (UIState.COLLECTION);
     }
 
     private void set_main_ui_state () {
@@ -690,11 +694,11 @@ private class Boxes.App: Boxes.UI {
         actor.add_transition ("animate-position", transition);
     }
 
-    public override void ui_state_changed () {
+    private void ui_state_changed () {
         // The order is important for some widgets here (e.g properties must change its state before wizard 
so it can
         // flush any deferred changes for wizard to pick-up when going back from properties to wizard 
(review).
         foreach (var ui in new Boxes.UI[] { sidebar, searchbar, topbar, view, properties, wizard, 
empty_boxes }) {
-            ui.ui_state = ui_state;
+            ui.set_state (ui_state);
         }
 
         if (ui_state != UIState.DISPLAY)
@@ -751,7 +755,7 @@ private class Boxes.App: Boxes.UI {
         }
 
         if (current_item != null)
-            current_item.ui_state = ui_state;
+            current_item.set_state (ui_state);
     }
 
     public void suspend_machines () {
@@ -821,7 +825,7 @@ private class Boxes.App: Boxes.UI {
         // Show for the first selected item
         foreach (var item in selected_items) {
             current_item = item;
-            ui_state = UIState.PROPERTIES;
+            set_state (UIState.PROPERTIES);
             break;
         }
     }
@@ -908,7 +912,7 @@ private class Boxes.App: Boxes.UI {
         });
 
         // Start the CREDS state
-        ui_state = UIState.CREDS;
+        set_state (UIState.CREDS);
 
         // Connect to the display
         machine.connect_display.begin (flags, (obj, res) => {
@@ -918,7 +922,7 @@ private class Boxes.App: Boxes.UI {
                 if (maximized)
                     fullscreen = true;
             } catch (GLib.Error e) {
-                ui_state = UIState.COLLECTION;
+                set_state (UIState.COLLECTION);
                 debug ("connect display failed: %s", e.message);
                 var bar = App.app.notificationbar;
 
@@ -954,7 +958,7 @@ private class Boxes.App: Boxes.UI {
         } else if (ui_state == UIState.WIZARD) {
             current_item = item;
 
-            ui_state = UIState.PROPERTIES;
+            set_state (UIState.PROPERTIES);
         }
     }
 }
diff --git a/src/collection-view.vala b/src/collection-view.vala
index f9b485e..03f809f 100644
--- a/src/collection-view.vala
+++ b/src/collection-view.vala
@@ -7,8 +7,10 @@ public enum Boxes.SelectionCriteria {
     RUNNING
 }
 
-private class Boxes.CollectionView: Boxes.UI {
-    public override Clutter.Actor actor { get { return gtkactor; } }
+private class Boxes.CollectionView: GLib.Object, Boxes.UI {
+    public Clutter.Actor actor { get { return gtkactor; } }
+    public UIState previous_ui_state { get; protected set; }
+    public UIState ui_state { get; protected set; }
 
     private GtkClutter.Actor gtkactor;
 
@@ -43,6 +45,7 @@ private class Boxes.CollectionView: Boxes.UI {
     public CollectionView () {
         category = new Category (_("New and Recent"), Category.Kind.NEW);
         setup_view ();
+        notify["ui-state"].connect (ui_state_changed);
         App.app.notify["selection-mode"].connect (() => {
             main_view.set_selection_mode (App.app.selection_mode);
             if (!App.app.selection_mode)
@@ -63,7 +66,7 @@ private class Boxes.CollectionView: Boxes.UI {
         }
     }
 
-    public override void ui_state_changed () {
+    private void ui_state_changed () {
         if (ui_state == UIState.COLLECTION)
             main_view.unselect_all ();
         fade_actor (actor, ui_state == UIState.COLLECTION ? 255 : 0);
@@ -184,7 +187,7 @@ private class Boxes.CollectionView: Boxes.UI {
         });
         item.set_data<ulong> ("under_construct_id", under_construct_id);
 
-        item.ui_state = App.app.ui_state;
+        item.set_state (App.app.ui_state);
         actor_remove (item.actor);
 
         update_item_visible (item);
diff --git a/src/collection.vala b/src/collection.vala
index 91e64bf..5c8dc86 100644
--- a/src/collection.vala
+++ b/src/collection.vala
@@ -1,8 +1,13 @@
 // This file is part of GNOME Boxes. License: LGPLv2+
 
-private abstract class Boxes.CollectionItem: Boxes.UI {
+private abstract class Boxes.CollectionItem: GLib.Object, Boxes.UI {
     public string name { set; get; }
 
+    public Clutter.Actor actor { get { return item_actor; } }
+    public abstract Clutter.Actor item_actor { get; }
+    public UIState previous_ui_state { get; protected set; }
+    public UIState ui_state { get; protected set; }
+
     public virtual int compare (CollectionItem other) {
         // First machines before non-machines
         if (other is Machine)
diff --git a/src/display-page.vala b/src/display-page.vala
index 82cefa8..34f1521 100644
--- a/src/display-page.vala
+++ b/src/display-page.vala
@@ -31,7 +31,7 @@ private class Boxes.DisplayToolbar: Gtk.HeaderBar {
         var back_icon = (get_direction () == Gtk.TextDirection.RTL)? "go-previous-rtl-symbolic" :
                                                                      "go-previous-symbolic";
         var back = add_image_button (back_icon, true);
-        back.clicked.connect ((button) => { App.app.ui_state = UIState.COLLECTION; });
+        back.clicked.connect ((button) => { App.app.set_state (UIState.COLLECTION); });
 
         var fullscreen = add_image_button ("view-fullscreen-symbolic", false);
         App.app.notify["fullscreen"].connect_after ( () => {
@@ -44,7 +44,7 @@ private class Boxes.DisplayToolbar: Gtk.HeaderBar {
         fullscreen.clicked.connect ((button) => { App.app.fullscreen = !App.app.fullscreen; });
 
         var props = add_image_button ("preferences-system-symbolic", false);
-        props.clicked.connect ((button) => { App.app.ui_state = UIState.PROPERTIES; });
+        props.clicked.connect ((button) => { App.app.set_state (UIState.PROPERTIES); });
     }
 
     private Gtk.Button add_image_button (string icon_name, bool pack_start) {
diff --git a/src/empty-boxes.vala b/src/empty-boxes.vala
index aa68840..65a91f6 100644
--- a/src/empty-boxes.vala
+++ b/src/empty-boxes.vala
@@ -1,7 +1,9 @@
 // This file is part of GNOME Boxes. License: LGPLv2+
 
-private class Boxes.EmptyBoxes : Boxes.UI {
-    public override Clutter.Actor actor { get { return gtk_actor; } }
+private class Boxes.EmptyBoxes : GLib.Object, Boxes.UI {
+    public Clutter.Actor actor { get { return gtk_actor; } }
+    public UIState previous_ui_state { get; protected set; }
+    public UIState ui_state { get; protected set; }
 
     private GtkClutter.Actor gtk_actor;
     private Gtk.Grid grid;
@@ -55,10 +57,8 @@ private class Boxes.EmptyBoxes : Boxes.UI {
 
         App.app.collection.item_added.connect (update_visibility);
         App.app.collection.item_removed.connect (update_visibility);
-    }
 
-    public override void ui_state_changed () {
-        update_visibility ();
+        notify["ui-state"].connect (update_visibility);
     }
 
     private void update_visibility () {
diff --git a/src/machine.vala b/src/machine.vala
index 2d1aa1b..59b49ee 100644
--- a/src/machine.vala
+++ b/src/machine.vala
@@ -4,7 +4,7 @@ using Gdk;
 using Gtk;
 
 private abstract class Boxes.Machine: Boxes.CollectionItem, Boxes.IPropertiesProvider {
-    public override Clutter.Actor actor { get { return machine_actor.actor; } }
+    public override Clutter.Actor item_actor { get { return machine_actor.actor; } }
     private MachineActor machine_actor;
     public Boxes.CollectionSource source;
     public Boxes.BoxConfig config;
@@ -75,7 +75,7 @@ private abstract class Boxes.Machine: Boxes.CollectionItem, Boxes.IPropertiesPro
                 App.app.current_item == this &&
                 value != MachineState.RUNNING &&
                 value != MachineState.UNKNOWN) {
-                App.app.ui_state = Boxes.UIState.COLLECTION;
+                App.app.set_state (Boxes.UIState.COLLECTION);
             }
         }
     }
@@ -87,7 +87,7 @@ private abstract class Boxes.Machine: Boxes.CollectionItem, Boxes.IPropertiesPro
 
         switch (App.app.ui_state) {
         case Boxes.UIState.CREDS:
-            App.app.ui_state = Boxes.UIState.DISPLAY;
+            App.app.set_state (Boxes.UIState.DISPLAY);
             show_timeout_id = Timeout.add (App.app.duration, () => {
                 show_timeout_id = 0;
                 show_display ();
@@ -148,7 +148,7 @@ private abstract class Boxes.Machine: Boxes.CollectionItem, Boxes.IPropertiesPro
             disconnected_id = _display.disconnected.connect ((failed) => {
                 message (@"display $name disconnected");
                 if (!stay_on_display && App.app.current_item == this)
-                    App.app.ui_state = Boxes.UIState.COLLECTION;
+                    App.app.set_state (Boxes.UIState.COLLECTION);
                 if (failed)
                     App.app.notificationbar.display_error (_("Connection to '%s' failed").printf (name));
             });
@@ -189,6 +189,7 @@ private abstract class Boxes.Machine: Boxes.CollectionItem, Boxes.IPropertiesPro
         pixbuf = draw_fallback_vm ();
         machine_actor = new MachineActor (this);
 
+        notify["ui-state"].connect (ui_state_changed);
         ui_state_id = App.app.notify["ui-state"].connect (() => {
             if (App.app.ui_state == UIState.DISPLAY)
                 set_screenshot_enable (false);
@@ -510,8 +511,8 @@ private abstract class Boxes.Machine: Boxes.CollectionItem, Boxes.IPropertiesPro
         }
     }
 
-    public override void ui_state_changed () {
-        machine_actor.ui_state = ui_state;
+    private void ui_state_changed () {
+        machine_actor.set_state (ui_state);
 
         if (ui_state != Boxes.UIState.DISPLAY &&
             ui_state != Boxes.UIState.PROPERTIES &&
@@ -530,9 +531,11 @@ private abstract class Boxes.Machine: Boxes.CollectionItem, Boxes.IPropertiesPro
     }
 }
 
-private class Boxes.MachineActor: Boxes.UI {
-    public override Clutter.Actor actor { get { return _actor; } }
+private class Boxes.MachineActor: GLib.Object, Boxes.UI {
+    public Clutter.Actor actor { get { return _actor; } }
     public Clutter.Actor _actor;
+    public UIState previous_ui_state { get; protected set; }
+    public UIState ui_state { get; protected set; }
 
     private GtkClutter.Texture screenshot;
     private GtkClutter.Actor gtk_vbox;
@@ -601,6 +604,8 @@ private class Boxes.MachineActor: Boxes.UI {
 
         _actor.add (gtk_vbox);
         _actor.set_reactive (true);
+
+        notify["ui-state"].connect (ui_state_changed);
     }
 
     public void set_screenshot (Gdk.Pixbuf pixbuf) {
@@ -702,7 +707,7 @@ private class Boxes.MachineActor: Boxes.UI {
 
             if (display_widget != null) {
                 click.clicked.connect (() => {
-                    App.app.ui_state = Boxes.UIState.DISPLAY;
+                    App.app.set_state (Boxes.UIState.DISPLAY);
                 });
 
                 machine.display.set_enable_inputs (display_widget, false);
@@ -749,7 +754,7 @@ private class Boxes.MachineActor: Boxes.UI {
         }
     }
 
-    public override void ui_state_changed () {
+    private void ui_state_changed () {
         int window_width, window_height;
         int width, height;
         int x, y;
diff --git a/src/properties.vala b/src/properties.vala
index 34d9899..7f4f319 100644
--- a/src/properties.vala
+++ b/src/properties.vala
@@ -10,8 +10,10 @@ private enum Boxes.PropertiesPage {
     LAST,
 }
 
-private class Boxes.Properties: Boxes.UI {
-    public override Clutter.Actor actor { get { return gtk_actor; } }
+private class Boxes.Properties: GLib.Object, Boxes.UI {
+    public Clutter.Actor actor { get { return gtk_actor; } }
+    public UIState previous_ui_state { get; protected set; }
+    public UIState ui_state { get; protected set; }
 
     public string title {
         set {
@@ -151,6 +153,7 @@ private class Boxes.Properties: Boxes.UI {
     }
 
     public Properties () {
+        notify["ui-state"].connect (ui_state_changed);
         setup_ui ();
     }
 
@@ -232,7 +235,7 @@ private class Boxes.Properties: Boxes.UI {
         back.valign = Gtk.Align.CENTER;
         back.get_style_context ().add_class ("image-button");
         toolbar.pack_start (back);
-        back.clicked.connect ((button) => { App.app.ui_state = App.app.previous_ui_state; });
+        back.clicked.connect ((button) => { App.app.set_state (App.app.previous_ui_state); });
 
         hbox.show_all ();
 
@@ -310,7 +313,7 @@ private class Boxes.Properties: Boxes.UI {
         notebook.show_all ();
     }
 
-    public override void ui_state_changed () {
+    private void ui_state_changed () {
         if (stats_id != 0) {
             App.app.current_item.disconnect (stats_id);
             stats_id = 0;
diff --git a/src/searchbar.vala b/src/searchbar.vala
index 4a8015a..6e8106e 100644
--- a/src/searchbar.vala
+++ b/src/searchbar.vala
@@ -1,7 +1,9 @@
 // This file is part of GNOME Boxes. License: LGPLv2+
 
-private class Boxes.Searchbar: Boxes.UI {
-    public override Clutter.Actor actor { get { return gtk_actor; } }
+private class Boxes.Searchbar: GLib.Object, Boxes.UI {
+    public Clutter.Actor actor { get { return gtk_actor; } }
+    public UIState previous_ui_state { get; protected set; }
+    public UIState ui_state { get; protected set; }
     public bool enable_key_handler {
         set {
             if (value)
@@ -167,7 +169,4 @@ private class Boxes.Searchbar: Boxes.UI {
         gtk_actor = new GtkClutter.Actor.with_contents (widget);
         gtk_actor.name = "searchbar";
     }
-
-    public override void ui_state_changed () {
-    }
 }
diff --git a/src/sidebar.vala b/src/sidebar.vala
index 947efe7..f796ceb 100644
--- a/src/sidebar.vala
+++ b/src/sidebar.vala
@@ -9,8 +9,10 @@ private enum Boxes.SidebarPage {
     PROPERTIES,
 }
 
-private class Boxes.Sidebar: Boxes.UI {
-    public override Clutter.Actor actor { get { return bin_actor; } }
+private class Boxes.Sidebar: GLib.Object, Boxes.UI {
+    public Clutter.Actor actor { get { return bin_actor; } }
+    public UIState previous_ui_state { get; protected set; }
+    public UIState ui_state { get; protected set; }
     public Notebook notebook;
     private uint width;
 
@@ -21,10 +23,11 @@ private class Boxes.Sidebar: Boxes.UI {
     public Sidebar () {
         width = 200;
 
+        notify["ui-state"].connect (ui_state_changed);
         setup_sidebar ();
     }
 
-    public override void ui_state_changed () {
+    private void ui_state_changed () {
         switch (ui_state) {
         case UIState.WIZARD:
         case UIState.PROPERTIES:
diff --git a/src/topbar.vala b/src/topbar.vala
index d181d56..0256025 100644
--- a/src/topbar.vala
+++ b/src/topbar.vala
@@ -10,12 +10,12 @@ public enum Boxes.TopbarPage {
     DISPLAY
 }
 
-private class Boxes.Topbar: Boxes.UI {
+private class Boxes.Topbar: GLib.Object, Boxes.UI {
     // FIXME: This is really redundant now that App is using widget property
     // instead but parent Boxes.UI currently requires an actor. Hopefully
     // soon we can move more towards new Gtk classes and Boxes.UI requires
     // a widget property instead.
-    public override Clutter.Actor actor {
+    public Clutter.Actor actor {
         get {
             if (gtk_actor == null)
                 gtk_actor = new Clutter.Actor ();
@@ -23,6 +23,8 @@ private class Boxes.Topbar: Boxes.UI {
         }
     }
     private Clutter.Actor gtk_actor;
+    public UIState previous_ui_state { get; protected set; }
+    public UIState ui_state { get; protected set; }
 
     public Gtk.Widget widget { get { return notebook; } }
     public Notebook notebook;
@@ -50,6 +52,8 @@ private class Boxes.Topbar: Boxes.UI {
     }
 
     public Topbar () {
+        notify["ui-state"].connect (ui_state_changed);
+
         setup_topbar ();
 
         App.app.notify["selected-items"].connect (() => {
@@ -75,7 +79,7 @@ private class Boxes.Topbar: Boxes.UI {
         new_btn.valign = Gtk.Align.CENTER;
         new_btn.get_style_context ().add_class ("text-button");
         toolbar.pack_start (new_btn);
-        new_btn.clicked.connect ((button) => { App.app.ui_state = UIState.WIZARD; });
+        new_btn.clicked.connect ((button) => { App.app.set_state (UIState.WIZARD); });
 
         var back_icon = (toolbar.get_direction () == Gtk.TextDirection.RTL)? "go-previous-rtl-symbolic" :
                                                                              "go-previous-symbolic";
@@ -86,7 +90,7 @@ private class Boxes.Topbar: Boxes.UI {
         back_btn.get_style_context ().add_class ("image-button");
         toolbar.pack_start (back_btn);
         back_btn.get_accessible ().set_name (_("Back"));
-        back_btn.clicked.connect ((button) => { App.app.ui_state = UIState.COLLECTION; });
+        back_btn.clicked.connect ((button) => { App.app.set_state (UIState.COLLECTION); });
 
         // We need a sizegroup to ensure the spinner is the same size
         // as the buttons so it centers correctly
@@ -207,7 +211,7 @@ private class Boxes.Topbar: Boxes.UI {
         }
     }
 
-    public override void ui_state_changed () {
+    private void ui_state_changed () {
         switch (ui_state) {
         case UIState.COLLECTION:
             notebook.page = TopbarPage.COLLECTION;
diff --git a/src/ui.vala b/src/ui.vala
index 7aca918..0fd119a 100644
--- a/src/ui.vala
+++ b/src/ui.vala
@@ -10,24 +10,18 @@ private enum Boxes.UIState {
     PROPERTIES
 }
 
-private abstract class Boxes.UI: GLib.Object {
+private interface Boxes.UI: GLib.Object {
     public abstract Clutter.Actor actor { get; }
 
-    public UIState previous_ui_state { get; protected set; }
-    private UIState _ui_state;
-    [CCode (notify = false)]
-    public UIState ui_state {
-        get { return _ui_state; }
-        set {
-            if (_ui_state != value) {
-                previous_ui_state = _ui_state;
-                _ui_state = value;
-                ui_state_changed ();
-                notify_property ("ui-state");
-            }
-        }
-    }
+    public abstract UIState previous_ui_state { get; protected set; }
+    public abstract UIState ui_state { get; protected set; }
+
+    public void set_state (UIState new_state) {
+        if (ui_state == new_state)
+            return;
 
-    public abstract void ui_state_changed ();
+        previous_ui_state = ui_state;
+        ui_state = new_state;
+    }
 }
 
diff --git a/src/wizard.vala b/src/wizard.vala
index 4f357e1..56e0413 100644
--- a/src/wizard.vala
+++ b/src/wizard.vala
@@ -10,8 +10,10 @@ private enum Boxes.WizardPage {
     LAST,
 }
 
-private class Boxes.Wizard: Boxes.UI {
-    public override Clutter.Actor actor { get { return gtk_actor; } }
+private class Boxes.Wizard: GLib.Object, Boxes.UI {
+    public Clutter.Actor actor { get { return gtk_actor; } }
+    public UIState previous_ui_state { get; protected set; }
+    public UIState ui_state { get; protected set; }
 
     private GtkClutter.Actor gtk_actor;
     private GenericArray<Gtk.Label> steps;
@@ -95,7 +97,7 @@ private class Boxes.Wizard: Boxes.UI {
                 case WizardPage.LAST:
                     create.begin ((obj, result) => {
                        if (create.end (result))
-                          App.app.ui_state = UIState.COLLECTION;
+                          App.app.set_state (UIState.COLLECTION);
                        else
                           App.app.notificationbar.display_error (_("Box creation failed"));
                     });
@@ -174,6 +176,7 @@ private class Boxes.Wizard: Boxes.UI {
         wizard_source.notify["page"].connect(wizard_source_update_next);
         wizard_source.notify["selected"].connect(wizard_source_update_next);
         wizard_source.url_entry.changed.connect (wizard_source_update_next);
+        notify["ui-state"].connect (ui_state_changed);
 
         wizard_source.activated.connect(() => {
             page = WizardPage.PREPARATION;
@@ -692,7 +695,7 @@ private class Boxes.Wizard: Boxes.UI {
             destroy_machine ();
             vm_creator = null;
             wizard_source.page = SourcePage.MAIN;
-            App.app.ui_state = UIState.COLLECTION;
+            App.app.set_state (UIState.COLLECTION);
         });
         toolbar_sizegroup.add_widget (cancel_button);
 
@@ -730,7 +733,7 @@ private class Boxes.Wizard: Boxes.UI {
     }
 
     public void open_with_uri (string uri, bool skip_review_for_live = true) {
-        App.app.ui_state = UIState.WIZARD;
+        App.app.set_state (UIState.WIZARD);
         this.skip_review_for_live = skip_review_for_live;
 
         page = WizardPage.SOURCE;
@@ -739,7 +742,7 @@ private class Boxes.Wizard: Boxes.UI {
         page = WizardPage.PREPARATION;
     }
 
-    public override void ui_state_changed () {
+    private void ui_state_changed () {
         if (ui_state == UIState.WIZARD) {
             if (previous_ui_state == UIState.PROPERTIES)
                 review.begin ();


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