[gnome-games/wip/exalm/ds: 1/2] retro-runner-builder: Allow subclassing



commit 1493c295e3300929def4f822aa00a5493435430a
Author: Alexander Mikhaylenko <exalm7659 gmail com>
Date:   Wed Jun 19 15:43:32 2019 +0500

    retro-runner-builder: Allow subclassing

 src/retro/retro-runner-builder.vala |  4 ++--
 src/retro/retro-runner.vala         | 36 +++++++++++++++++++-----------------
 2 files changed, 21 insertions(+), 19 deletions(-)
---
diff --git a/src/retro/retro-runner-builder.vala b/src/retro/retro-runner-builder.vala
index 2f1150e5..543c8c6e 100644
--- a/src/retro/retro-runner-builder.vala
+++ b/src/retro/retro-runner-builder.vala
@@ -46,11 +46,11 @@ public class Games.RetroRunnerBuilder : Object {
                media_set = new MediaSet ();
        }
 
-       public RetroRunner to_runner () {
+       public RetroRunner to_runner (Type type = typeof (RetroRunner)) {
                return_val_if_fail (uid != null, null);
                return_val_if_fail (title != null, null);
                return_val_if_fail (platform != null, null);
 
-               return new RetroRunner (this);
+               return Object.new (type, "builder", this, null) as RetroRunner;
        }
 }
diff --git a/src/retro/retro-runner.vala b/src/retro/retro-runner.vala
index 81ecf792..8da75815 100644
--- a/src/retro/retro-runner.vala
+++ b/src/retro/retro-runner.vala
@@ -80,24 +80,26 @@ public class Games.RetroRunner : Object, Runner {
        private bool is_ready;
        private bool should_save;
 
-       internal RetroRunner (RetroRunnerBuilder builder) {
+       public RetroRunnerBuilder builder {
+               construct {
+                       core_descriptor = value.core_descriptor;
+                       _media_set = value.media_set;
+
+                       uid = value.uid;
+                       core_source = value.core_source;
+                       platform = value.platform;
+                       input_capabilities = value.input_capabilities;
+                       game_title = value.title;
+
+                       _media_set.notify["selected-media-number"].connect (on_media_number_changed);
+               }
+       }
+
+       construct {
                is_initialized = false;
                is_ready = false;
                should_save = false;
 
-               core_descriptor = builder.core_descriptor;
-               _media_set = builder.media_set;
-
-               uid = builder.uid;
-               core_source = builder.core_source;
-               platform = builder.platform;
-               input_capabilities = builder.input_capabilities;
-               game_title = builder.title;
-
-               _media_set.notify["selected-media-number"].connect (on_media_number_changed);
-       }
-
-       construct {
                settings = new Settings ("org.gnome.Games");
        }
 
@@ -133,7 +135,7 @@ public class Games.RetroRunner : Object, Runner {
                return view;
        }
 
-       public Gtk.Widget? get_extra_widget () {
+       public virtual Gtk.Widget? get_extra_widget () {
                return null;
        }
 
@@ -309,11 +311,11 @@ public class Games.RetroRunner : Object, Runner {
                        return { InputMode.GAMEPAD };
        }
 
-       public bool key_press_event (Gdk.EventKey event) {
+       public virtual bool key_press_event (Gdk.EventKey event) {
                return false;
        }
 
-       public bool gamepad_button_press_event (uint16 button) {
+       public virtual bool gamepad_button_press_event (uint16 button) {
                return false;
        }
 


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