From 5549ff78f08f5b3c8143389de4e0eea93e8208a7 Mon Sep 17 00:00:00 2001 From: Jonas Kulla Date: Fri, 24 Oct 2014 18:55:03 +0200 Subject: [PATCH] Bindings: Viewport: Don't dispose children in RGSS2/3 --- binding-mri/disposable-binding.h | 9 +++++---- binding-mri/viewportelement-binding.h | 4 +++- binding-mruby/disposable-binding.h | 8 +++++--- binding-mruby/viewportelement-binding.h | 4 +++- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/binding-mri/disposable-binding.h b/binding-mri/disposable-binding.h index fa057a4..bfe6b9c 100644 --- a/binding-mri/disposable-binding.h +++ b/binding-mri/disposable-binding.h @@ -27,8 +27,7 @@ /* 'Children' are disposables that are disposed together * with their parent. Currently this is only used by Viewport - * in RGSS1. - * FIXME: Disable this behavior when RGSS2 or 3 */ + * in RGSS1. */ inline void disposableAddChild(VALUE disp, VALUE child) { @@ -72,7 +71,8 @@ RB_METHOD(disposableDispose) if (d->isDisposed()) return Qnil; - disposableDisposeChildren(self); + if (rgssVer == 1) + disposableDisposeChildren(self); d->dispose(); @@ -100,7 +100,8 @@ static void disposableBindingInit(VALUE klass) /* Make sure we always have access to the original method, even * if it is overridden by user scripts */ - rb_define_alias(klass, "_mkxp_dispose_alias", "dispose"); + if (rgssVer == 1) + rb_define_alias(klass, "_mkxp_dispose_alias", "dispose"); } template diff --git a/binding-mri/viewportelement-binding.h b/binding-mri/viewportelement-binding.h index f3c5928..7cca69c 100644 --- a/binding-mri/viewportelement-binding.h +++ b/binding-mri/viewportelement-binding.h @@ -75,7 +75,9 @@ viewportElementInitialize(int argc, VALUE *argv, VALUE self) if (!NIL_P(viewportObj)) { viewport = getPrivateDataCheck(viewportObj, ViewportType); - disposableAddChild(viewportObj, self); + + if (rgssVer == 1) + disposableAddChild(viewportObj, self); } /* Construct object */ diff --git a/binding-mruby/disposable-binding.h b/binding-mruby/disposable-binding.h index 7cf80cb..a1c2725 100644 --- a/binding-mruby/disposable-binding.h +++ b/binding-mruby/disposable-binding.h @@ -74,7 +74,8 @@ MRB_METHOD(disposableDispose) if (d->isDisposed()) return mrb_nil_value(); - disposableDisposeChildren(mrb, self); + if (rgssVer == 1) + disposableDisposeChildren(mrb, self); d->dispose(); @@ -100,8 +101,9 @@ static void disposableBindingInit(mrb_state *mrb, RClass *klass) mrb_define_method(mrb, klass, "dispose", disposableDispose, MRB_ARGS_NONE()); mrb_define_method(mrb, klass, "disposed?", disposableIsDisposed, MRB_ARGS_NONE()); - mrb_alias_method(mrb, klass, getMrbData(mrb)->symbols[CS_mkxp_dispose_alias], - mrb_intern_lit(mrb, "dispose")); + if (rgssVer == 1) + mrb_alias_method(mrb, klass, getMrbData(mrb)->symbols[CS_mkxp_dispose_alias], + mrb_intern_lit(mrb, "dispose")); } template diff --git a/binding-mruby/viewportelement-binding.h b/binding-mruby/viewportelement-binding.h index 38cd3d1..ece12f4 100644 --- a/binding-mruby/viewportelement-binding.h +++ b/binding-mruby/viewportelement-binding.h @@ -50,7 +50,9 @@ viewportElementInitialize(mrb_state *mrb, mrb_value self) if (!mrb_nil_p(viewportObj)) { viewport = getPrivateDataCheck(mrb, viewportObj, ViewportType); - disposableAddChild(mrb, viewportObj, self); + + if (rgssVer == 1) + disposableAddChild(mrb, viewportObj, self); } /* Construct object */