@@ -467,6 +467,7 @@ static void fl_engine_dispose(GObject* object) {
467
467
fl_texture_registrar_shutdown (self->texture_registrar );
468
468
469
469
g_clear_object (&self->project );
470
+ g_clear_object (&self->display_monitor );
470
471
g_clear_object (&self->renderer );
471
472
g_clear_object (&self->texture_registrar );
472
473
g_clear_object (&self->binary_messenger );
@@ -519,27 +520,46 @@ static void fl_engine_init(FlEngine* self) {
519
520
g_warning (" Failed get get engine function pointers" );
520
521
}
521
522
523
+ self->display_monitor =
524
+ fl_display_monitor_new (self, gdk_display_get_default ());
525
+ self->task_runner = fl_task_runner_new (self);
526
+
522
527
// Implicit view is 0, so start at 1.
523
528
self->next_view_id = 1 ;
524
529
525
530
self->texture_registrar = fl_texture_registrar_new (self);
526
531
}
527
532
528
- FlEngine* fl_engine_new_with_renderer (FlDartProject* project,
529
- FlRenderer* renderer) {
533
+ static FlEngine* fl_engine_new_full (FlDartProject* project,
534
+ FlRenderer* renderer,
535
+ FlBinaryMessenger* binary_messenger) {
530
536
g_return_val_if_fail (FL_IS_DART_PROJECT (project), nullptr );
531
537
g_return_val_if_fail (FL_IS_RENDERER (renderer), nullptr );
532
538
533
539
FlEngine* self = FL_ENGINE (g_object_new (fl_engine_get_type (), nullptr ));
534
540
self->project = FL_DART_PROJECT (g_object_ref (project));
535
541
self->renderer = FL_RENDERER (g_object_ref (renderer));
536
- self->binary_messenger = fl_binary_messenger_new (self);
537
-
542
+ if (binary_messenger != nullptr ) {
543
+ self->binary_messenger =
544
+ FL_BINARY_MESSENGER (g_object_ref (binary_messenger));
545
+ } else {
546
+ self->binary_messenger = fl_binary_messenger_new (self);
547
+ }
548
+ self->keyboard_manager = fl_keyboard_manager_new (self);
549
+ self->mouse_cursor_handler =
550
+ fl_mouse_cursor_handler_new (self->binary_messenger );
538
551
fl_renderer_set_engine (self->renderer , self);
539
552
540
553
return self;
541
554
}
542
555
556
+ FlEngine* fl_engine_new_with_renderer (FlDartProject* project,
557
+ FlRenderer* renderer) {
558
+ g_return_val_if_fail (FL_IS_DART_PROJECT (project), nullptr );
559
+ g_return_val_if_fail (FL_IS_RENDERER (renderer), nullptr );
560
+ return fl_engine_new_full (project, renderer, nullptr );
561
+ }
562
+
543
563
G_MODULE_EXPORT FlEngine* fl_engine_new (FlDartProject* project) {
544
564
g_autoptr (FlRendererGdk) renderer = fl_renderer_gdk_new ();
545
565
return fl_engine_new_with_renderer (project, FL_RENDERER (renderer));
@@ -548,10 +568,8 @@ G_MODULE_EXPORT FlEngine* fl_engine_new(FlDartProject* project) {
548
568
FlEngine* fl_engine_new_with_binary_messenger (
549
569
FlBinaryMessenger* binary_messenger) {
550
570
g_autoptr (FlDartProject) project = fl_dart_project_new ();
551
- FlEngine* self = fl_engine_new (project);
552
- g_object_unref (self->binary_messenger );
553
- self->binary_messenger = FL_BINARY_MESSENGER (g_object_ref (binary_messenger));
554
- return self;
571
+ g_autoptr (FlRendererGdk) renderer = fl_renderer_gdk_new ();
572
+ return fl_engine_new_full (project, FL_RENDERER (renderer), binary_messenger);
555
573
}
556
574
557
575
G_MODULE_EXPORT FlEngine* fl_engine_new_headless (FlDartProject* project) {
@@ -572,8 +590,6 @@ FlDisplayMonitor* fl_engine_get_display_monitor(FlEngine* self) {
572
590
gboolean fl_engine_start (FlEngine* self, GError** error) {
573
591
g_return_val_if_fail (FL_IS_ENGINE (self), FALSE );
574
592
575
- self->task_runner = fl_task_runner_new (self);
576
-
577
593
FlutterRendererConfig config = {};
578
594
config.type = kOpenGL ;
579
595
config.open_gl .struct_size = sizeof (FlutterOpenGLRendererConfig);
@@ -671,8 +687,6 @@ gboolean fl_engine_start(FlEngine* self, GError** error) {
671
687
fl_settings_handler_start (self->settings_handler , settings);
672
688
673
689
self->platform_handler = fl_platform_handler_new (self->binary_messenger );
674
- self->mouse_cursor_handler =
675
- fl_mouse_cursor_handler_new (self->binary_messenger );
676
690
677
691
setup_keyboard (self);
678
692
@@ -681,8 +695,6 @@ gboolean fl_engine_start(FlEngine* self, GError** error) {
681
695
g_warning (" Failed to enable accessibility features on Flutter engine" );
682
696
}
683
697
684
- self->display_monitor =
685
- fl_display_monitor_new (self, gdk_display_get_default ());
686
698
fl_display_monitor_start (self->display_monitor );
687
699
688
700
return TRUE ;
0 commit comments