Fixes crash when using Theme::clear

This commit is contained in:
Haoyu Qiu 2019-12-10 16:31:40 +08:00
parent 2845e6a21a
commit c29b8cf751

View file

@ -720,7 +720,10 @@ void Theme::clear() {
while ((K = icon_map.next(K))) { while ((K = icon_map.next(K))) {
const StringName *L = NULL; const StringName *L = NULL;
while ((L = icon_map[*K].next(L))) { while ((L = icon_map[*K].next(L))) {
icon_map[*K][*L]->disconnect("changed", this, "_emit_theme_changed"); Ref<Texture> icon = icon_map[*K][*L];
if (icon.is_valid()) {
icon->disconnect("changed", this, "_emit_theme_changed");
}
} }
} }
} }
@ -730,7 +733,10 @@ void Theme::clear() {
while ((K = style_map.next(K))) { while ((K = style_map.next(K))) {
const StringName *L = NULL; const StringName *L = NULL;
while ((L = style_map[*K].next(L))) { while ((L = style_map[*K].next(L))) {
style_map[*K][*L]->disconnect("changed", this, "_emit_theme_changed"); Ref<StyleBox> style = style_map[*K][*L];
if (style.is_valid()) {
style->disconnect("changed", this, "_emit_theme_changed");
}
} }
} }
} }
@ -740,7 +746,10 @@ void Theme::clear() {
while ((K = font_map.next(K))) { while ((K = font_map.next(K))) {
const StringName *L = NULL; const StringName *L = NULL;
while ((L = font_map[*K].next(L))) { while ((L = font_map[*K].next(L))) {
font_map[*K][*L]->disconnect("changed", this, "_emit_theme_changed"); Ref<Font> font = font_map[*K][*L];
if (font.is_valid()) {
font->disconnect("changed", this, "_emit_theme_changed");
}
} }
} }
} }