diff --git a/code/__DEFINES/computers.dm b/code/__DEFINES/computers.dm index ba3294ae683..c9cce7a7114 100644 --- a/code/__DEFINES/computers.dm +++ b/code/__DEFINES/computers.dm @@ -11,3 +11,6 @@ #define CATEGORY_BEPIS "Bepis Tech" #define CATEGORY_BITRUNNING_FLAIR "Misc" #define CATEGORY_BITRUNNING_TECH "Tech" + +///Helper macro for record computers' preview views, used to ensure consistency in all use cases. +#define USER_PREVIEW_ASSIGNED_VIEW(user_ckey) "preview_[user_ckey]_[REF(src)]_records" diff --git a/code/game/machinery/computer/records/medical.dm b/code/game/machinery/computer/records/medical.dm index c4242ace958..6dd12acbdb6 100644 --- a/code/game/machinery/computer/records/medical.dm +++ b/code/game/machinery/computer/records/medical.dm @@ -31,7 +31,7 @@ return ui = SStgui.try_update_ui(user, src, ui) if (!ui) - create_character_preview_view(user) + character_preview_view = create_character_preview_view(user) ui = new(user, src, "MedicalRecords") ui.set_autoupdate(FALSE) ui.open() diff --git a/code/game/machinery/computer/records/records.dm b/code/game/machinery/computer/records/records.dm index 76ee1f19bca..c3aba60e4c6 100644 --- a/code/game/machinery/computer/records/records.dm +++ b/code/game/machinery/computer/records/records.dm @@ -13,11 +13,17 @@ if(!has_access) return data - data["assigned_view"] = "preview_[user.ckey]_[REF(src)]_records" + data["assigned_view"] = USER_PREVIEW_ASSIGNED_VIEW(user.ckey) data["station_z"] = !!(z && is_station_level(z)) return data +/obj/machinery/computer/records/ui_close(mob/user) + . = ..() + user.client?.screen_maps -= USER_PREVIEW_ASSIGNED_VIEW(user.ckey) + if((LAZYLEN(open_uis) <= 1) && character_preview_view) //only delete the preview if we're the last one to close the console. + QDEL_NULL(character_preview_view) + /obj/machinery/computer/records/ui_act(action, list/params, datum/tgui/ui) . = ..() if(.) @@ -101,13 +107,14 @@ /// Creates a character preview view for the UI. /obj/machinery/computer/records/proc/create_character_preview_view(mob/user) - var/assigned_view = "preview_[user.ckey]_[REF(src)]_records" + var/assigned_view = USER_PREVIEW_ASSIGNED_VIEW(user.ckey) if(user.client?.screen_maps[assigned_view]) return var/atom/movable/screen/map_view/char_preview/new_view = new(null, src) new_view.generate_view(assigned_view) new_view.display_to(user) + return new_view /// Takes a record and updates the character preview view to match it. /obj/machinery/computer/records/proc/update_preview(mob/user, assigned_view, datum/record/crew/target)