Skip to content

Commit 0d0a19d

Browse files
committed
A rare bugfix when OnApplicationQuit is canceled by Application.wantsToQuit (closed #19)
1 parent ef193f8 commit 0d0a19d

File tree

4 files changed

+67
-3
lines changed

4 files changed

+67
-3
lines changed

Plugins/DynamicPanels/Scripts/DynamicPanelsCanvas.cs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,17 @@ private bool PanelGroupHasAnyOtherPanels( PanelGroup group, Panel panel )
8181
return false;
8282
}
8383

84+
public void OnApplicationQuit()
85+
{
86+
#if UNITY_2018_1_OR_NEWER
87+
canvas.OnApplicationQuitting();
88+
#else
89+
canvas.OnApplicationQuit();
90+
#endif
91+
}
92+
8493
public void AnchorZonesSetActive( bool value ) { canvas.AnchorZonesSetActive( value ); }
8594
public void ReceiveRaycasts( bool value ) { canvas.background.raycastTarget = value; }
86-
public void OnApplicationQuit() { canvas.OnApplicationQuit(); }
8795
}
8896

8997
[System.Serializable]
@@ -260,6 +268,13 @@ private void Awake()
260268
}
261269

262270
PanelManager.Instance.RegisterCanvas( this );
271+
272+
#if UNITY_2018_1_OR_NEWER
273+
// OnApplicationQuit isn't reliable on some Unity versions when Application.wantsToQuit is used; Application.quitting is the only reliable solution on those versions
274+
// https://issuetracker.unity3d.com/issues/onapplicationquit-method-is-called-before-application-dot-wantstoquit-event-is-raised
275+
Application.quitting -= OnApplicationQuitting;
276+
Application.quitting += OnApplicationQuitting;
277+
#endif
263278
}
264279

265280
private void Start()
@@ -319,11 +334,19 @@ private void Start()
319334

320335
private void OnDestroy()
321336
{
337+
#if UNITY_2018_1_OR_NEWER
338+
Application.quitting -= OnApplicationQuitting;
339+
#endif
340+
322341
if( !isQuitting )
323342
PanelManager.Instance.UnregisterCanvas( this );
324343
}
325344

345+
#if UNITY_2018_1_OR_NEWER
346+
private void OnApplicationQuitting()
347+
#else
326348
private void OnApplicationQuit()
349+
#endif
327350
{
328351
isQuitting = true;
329352
}

Plugins/DynamicPanels/Scripts/Panel.cs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,10 +196,18 @@ public void Stop()
196196
panel.resizeZones[i].Stop();
197197
}
198198

199+
public void OnApplicationQuit()
200+
{
201+
#if UNITY_2018_1_OR_NEWER
202+
panel.OnApplicationQuitting();
203+
#else
204+
panel.OnApplicationQuit();
205+
#endif
206+
}
207+
199208
public void AnchorZonesSetActive( bool value ) { panel.AnchorZonesSetActive( value ); }
200209
public void OnResize( Direction direction, Vector2 screenPoint ) { panel.OnResize( direction, screenPoint ); }
201210
public void OnTranslate( Vector2 deltaPosition ) { panel.OnTranslate( deltaPosition ); }
202-
public void OnApplicationQuit() { panel.OnApplicationQuit(); }
203211
}
204212

205213
public RectTransform RectTransform { get; private set; }
@@ -366,6 +374,13 @@ private void Awake()
366374

367375
closeButton.onClick.AddListener( () => PanelNotificationCenter.Internal.PanelClosed( this ) );
368376
closeButton.transform.SetAsLastSibling();
377+
378+
#if UNITY_2018_1_OR_NEWER
379+
// OnApplicationQuit isn't reliable on some Unity versions when Application.wantsToQuit is used; Application.quitting is the only reliable solution on those versions
380+
// https://issuetracker.unity3d.com/issues/onapplicationquit-method-is-called-before-application-dot-wantstoquit-event-is-raised
381+
Application.quitting -= OnApplicationQuitting;
382+
Application.quitting += OnApplicationQuitting;
383+
#endif
369384
}
370385

371386
private void Start()
@@ -398,6 +413,10 @@ private void OnDisable()
398413

399414
private void OnDestroy()
400415
{
416+
#if UNITY_2018_1_OR_NEWER
417+
Application.quitting -= OnApplicationQuitting;
418+
#endif
419+
401420
if( !isQuitting )
402421
{
403422
PanelManager.Instance.UnregisterPanel( this );
@@ -407,7 +426,11 @@ private void OnDestroy()
407426
}
408427
}
409428

429+
#if UNITY_2018_1_OR_NEWER
430+
private void OnApplicationQuitting()
431+
#else
410432
private void OnApplicationQuit()
433+
#endif
411434
{
412435
isQuitting = true;
413436
}

Plugins/DynamicPanels/Scripts/PanelManager.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,27 @@ private void Awake()
5656

5757
nextPanelValidationTime = Time.realtimeSinceStartup + PANEL_TABS_VALIDATE_INTERVAL;
5858
nullPointerEventData = new PointerEventData( null );
59+
60+
#if UNITY_2018_1_OR_NEWER
61+
// OnApplicationQuit isn't reliable on some Unity versions when Application.wantsToQuit is used; Application.quitting is the only reliable solution on those versions
62+
// https://issuetracker.unity3d.com/issues/onapplicationquit-method-is-called-before-application-dot-wantstoquit-event-is-raised
63+
Application.quitting -= OnApplicationQuitting;
64+
Application.quitting += OnApplicationQuitting;
65+
#endif
66+
}
67+
68+
#if UNITY_2018_1_OR_NEWER
69+
private void OnDestroy()
70+
{
71+
Application.quitting -= OnApplicationQuitting;
5972
}
73+
#endif
6074

75+
#if UNITY_2018_1_OR_NEWER
76+
private void OnApplicationQuitting()
77+
#else
6178
private void OnApplicationQuit()
79+
#endif
6280
{
6381
for( int i = 0; i < panels.Count; i++ )
6482
panels[i].Internal.OnApplicationQuit();

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "com.yasirkula.dynamicpanels",
33
"displayName": "Dynamic Panels",
4-
"version": "1.2.8",
4+
"version": "1.2.9",
55
"documentationUrl": "https://github.com/yasirkula/UnityDynamicPanels",
66
"changelogUrl": "https://github.com/yasirkula/UnityDynamicPanels/releases",
77
"licensesUrl": "https://github.com/yasirkula/UnityDynamicPanels/blob/master/LICENSE.txt",

0 commit comments

Comments
 (0)