mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-02 04:52:10 +00:00
Fix runtime with NTOS apps and improve code involved (#53779)
There exists a specific state where ui.open() can be called yet the result would be a null window and such behaviour would be intentional. The following CRASH in ui.send_asset() would thus be misleading, because send_asset() was called after open(). This PR adds more information to the CRASH about when the failure state can occur, makes open() return a value based on whether it actually opened a new pooled window or not, and makes sure modular computer apps don't send_assets unless a new pooled window was created.
This commit is contained in:
@@ -37,7 +37,7 @@
|
||||
if (!ui)
|
||||
ui = new(user, src, "NtosMain")
|
||||
ui.set_autoupdate(TRUE)
|
||||
ui.open()
|
||||
if(ui.open())
|
||||
ui.send_asset(get_asset_datum(/datum/asset/simple/headers))
|
||||
|
||||
|
||||
|
||||
@@ -179,7 +179,7 @@
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
if(!ui && tgui_id)
|
||||
ui = new(user, src, tgui_id, filedesc)
|
||||
ui.open()
|
||||
if(ui.open())
|
||||
ui.send_asset(get_asset_datum(/datum/asset/simple/headers))
|
||||
|
||||
// CONVENTIONS, READ THIS WHEN CREATING NEW PROGRAM AND OVERRIDING THIS PROC:
|
||||
|
||||
@@ -67,18 +67,20 @@
|
||||
* public
|
||||
*
|
||||
* Open this UI (and initialize it with data).
|
||||
*
|
||||
* return bool - TRUE if a new pooled window is opened, FALSE in all other situations including if a new pooled window didn't open because one already exists.
|
||||
*/
|
||||
/datum/tgui/proc/open()
|
||||
if(!user.client)
|
||||
return null
|
||||
return FALSE
|
||||
if(window)
|
||||
return null
|
||||
return FALSE
|
||||
process_status()
|
||||
if(status < UI_UPDATE)
|
||||
return null
|
||||
return FALSE
|
||||
window = SStgui.request_pooled_window(user)
|
||||
if(!window)
|
||||
return null
|
||||
return FALSE
|
||||
opened_at = world.time
|
||||
window.acquire_lock(src)
|
||||
if(!window.is_ready())
|
||||
@@ -101,6 +103,8 @@
|
||||
with_static_data = TRUE))
|
||||
SStgui.on_open(src)
|
||||
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* public
|
||||
*
|
||||
@@ -156,7 +160,7 @@
|
||||
*/
|
||||
/datum/tgui/proc/send_asset(datum/asset/asset)
|
||||
if(!window)
|
||||
CRASH("send_asset() can only be called after open().")
|
||||
CRASH("send_asset() was called either without calling open() first or when open() did not return TRUE.")
|
||||
return window.send_asset(asset)
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user