Skip to content

Commit c816a85

Browse files
committed
Fix editor crash on startup
This temporarily disables the resource format loader in editor, which makes .ftl files not show up in the file system.
1 parent 779660c commit c816a85

File tree

2 files changed

+13
-7
lines changed

2 files changed

+13
-7
lines changed

rust/src/fluent/global.rs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,29 @@
11
use godot::prelude::*;
2-
use godot::classes::ResourceLoader;
2+
use godot::classes::{Engine, ResourceLoader};
33

44
use super::ResourceFormatLoaderFluent;
55

66
/// Singleton for handling Fluent Translation. For internal use only.
77
#[derive(GodotClass)]
88
#[class(base=Object, init)]
99
pub struct FluentI18nSingleton {
10-
loader: Gd<ResourceFormatLoaderFluent>,
10+
loader: Option<Gd<ResourceFormatLoaderFluent>>,
1111
}
1212

1313
impl FluentI18nSingleton {
1414
pub(crate) const SINGLETON_NAME: &'static str = "FluentI18nSingleton";
1515

16-
pub(crate) fn register(&self) {
17-
ResourceLoader::singleton().add_resource_format_loader(&self.loader);
16+
pub(crate) fn register(&mut self) {
17+
// HACK: Resource format loader crashes editor on startup, see https://github.com/godot-rust/gdext/issues/597
18+
if !Engine::singleton().is_editor_hint() {
19+
self.loader = Some(ResourceFormatLoaderFluent::new_gd());
20+
ResourceLoader::singleton().add_resource_format_loader(&self.loader.clone().unwrap());
21+
}
1822
}
1923

2024
pub(crate) fn unregister(&self) {
21-
ResourceLoader::singleton().remove_resource_format_loader(&self.loader);
25+
if let Some(loader) = &self.loader {
26+
ResourceLoader::singleton().remove_resource_format_loader(loader);
27+
}
2228
}
2329
}

rust/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ unsafe impl ExtensionLibrary for FluentI18n {
2525
if level == InitLevel::Scene {
2626
project_settings::register();
2727

28-
let singleton = FluentI18nSingleton::new_alloc();
29-
singleton.bind().register();
28+
let mut singleton = FluentI18nSingleton::new_alloc();
29+
singleton.bind_mut().register();
3030

3131
Engine::singleton()
3232
.register_singleton(FluentI18nSingleton::SINGLETON_NAME, &singleton);

0 commit comments

Comments
 (0)