Skip to content

Commit 87d88c6

Browse files
committed
protect against bad saved frames
1 parent cafb450 commit 87d88c6

File tree

2 files changed

+43
-2
lines changed

2 files changed

+43
-2
lines changed

gui/gm-editor.lua

+25-2
Original file line numberDiff line numberDiff line change
@@ -92,14 +92,37 @@ function search_relevance(search, candidate)
9292
return ret
9393
end
9494

95+
local RESIZE_MIN = {w=30, h=20}
96+
97+
local function sanitize_frame(frame)
98+
local w, h = dfhack.screen.getWindowSize()
99+
local min = RESIZE_MIN
100+
if frame.t and h - frame.t - (frame.b or 0) < min.h then
101+
frame.t = h - min.h
102+
frame.b = 0
103+
end
104+
if frame.b and h - frame.b - (frame.t or 0) < min.h then
105+
frame.b = h - min.h
106+
frame.t = 0
107+
end
108+
if frame.l and w - frame.l - (frame.r or 0) < min.w then
109+
frame.l = w - min.w
110+
frame.r = 0
111+
end
112+
if frame.r and w - frame.r - (frame.l or 0) < min.w then
113+
frame.r = w - min.w
114+
frame.l = 0
115+
end
116+
return frame
117+
end
95118

96119
GmEditorUi = defclass(GmEditorUi, widgets.Window)
97120
GmEditorUi.ATTRS{
98-
frame=copyall(config.data.frame or {}),
121+
frame=sanitize_frame(copyall(config.data.frame or {})),
99122
frame_title="GameMaster's editor",
100123
frame_inset=0,
101124
resizable=true,
102-
resize_min={w=30, h=20},
125+
resize_min=RESIZE_MIN,
103126
read_only=(config.data.read_only or false)
104127
}
105128

gui/launcher.lua

+18
Original file line numberDiff line numberDiff line change
@@ -910,6 +910,24 @@ function LauncherUI:init()
910910
new_frame[k] = 0
911911
end
912912
end
913+
local w, h = dfhack.screen.getWindowSize()
914+
local min = MainPanel.ATTRS.resize_min
915+
if new_frame.t and h - new_frame.t - (new_frame.b or 0) < min.h then
916+
new_frame.t = h - min.h
917+
new_frame.b = 0
918+
end
919+
if new_frame.b and h - new_frame.b - (new_frame.t or 0) < min.h then
920+
new_frame.b = h - min.h
921+
new_frame.t = 0
922+
end
923+
if new_frame.l and w - new_frame.l - (new_frame.r or 0) < min.w then
924+
new_frame.l = w - min.w
925+
new_frame.r = 0
926+
end
927+
if new_frame.r and w - new_frame.r - (new_frame.l or 0) < min.w then
928+
new_frame.r = w - min.w
929+
new_frame.l = 0
930+
end
913931
end
914932
end
915933
main_panel.frame = new_frame

0 commit comments

Comments
 (0)