NanoUI windows now close on Destroy(), preventing all sorts of qdel issues.

This commit is contained in:
PsiOmegaDelta
2015-08-12 09:41:22 +02:00
parent 93e666e67c
commit 3e4ec4d7b7
2 changed files with 22 additions and 1 deletions

View File

@@ -18,7 +18,8 @@
/obj/Destroy()
processing_objects -= src
..()
nanomanager.close_uis(src)
return ..()
/obj/Topic(href, href_list, var/nowindow = 0, var/datum/topic_state/state = default_state)
// Calling Topic without a corresponding window open causes runtime errors

View File

@@ -105,6 +105,26 @@
update_count++
return update_count
/**
* Close all /nanoui uis attached to src_object
*
* @param src_object /obj|/mob The obj or mob which the uis are attached to
*
* @return int The number of uis close
*/
/datum/nanomanager/proc/close_uis(src_object)
var/src_object_key = "\ref[src_object]"
if (isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list))
return 0
var/close_count = 0
for (var/ui_key in open_uis[src_object_key])
for (var/datum/nanoui/ui in open_uis[src_object_key][ui_key])
if(ui && ui.src_object && ui.user && ui.src_object.nano_host())
ui.close()
close_count++
return close_count
/**
* Update /nanoui uis belonging to user
*