Przeglądaj źródła

Fix game input freeze (Derek Jamison)

jblanked 1 rok temu
rodzic
commit
8cffd9f1e6
3 zmienionych plików z 17 dodań i 32 usunięć
  1. 0 2
      alloc/alloc.c
  2. 17 29
      callback/callback.c
  3. 0 1
      callback/callback.h

+ 0 - 2
alloc/alloc.c

@@ -25,8 +25,6 @@ FlipWorldApp *flip_world_app_alloc()
         return NULL;
     }
 
-    view_dispatcher_set_custom_event_callback(app->view_dispatcher, flip_world_custom_event_callback);
-
     // Submenu
     if (!easy_flipper_set_submenu(&app->submenu, FlipWorldViewSubmenu, VERSION_TAG, callback_exit_app, &app->view_dispatcher))
     {

+ 17 - 29
callback/callback.c

@@ -302,35 +302,10 @@ void free_all_views(void *context, bool should_free_variable_item_list)
     free_about_view(app);
     free_main_view(app);
     free_text_input_view(app);
-}
-
-static void flip_world_loader_process_callback(void *context)
-{
-    FlipWorldApp *app = (FlipWorldApp *)context;
-    if (!app)
-    {
-        FURI_LOG_E(TAG, "FlipWorldApp is NULL");
-        return;
-    }
-
-    // load game
-    game_app(NULL);
-}
-
-bool flip_world_custom_event_callback(void *context, uint32_t index)
-{
-    if (!context)
-    {
-        FURI_LOG_E(TAG, "context is NULL");
-        return false;
-    }
-    switch (index)
+    if (app->view_main)
     {
-    case FlipWorldCustomEventPlay:
-        flip_world_loader_process_callback(context);
-        return true;
-    default:
-        return false;
+        view_free(app->view_main);
+        app->view_main = NULL;
     }
 }
 
@@ -346,7 +321,20 @@ void callback_submenu_choices(void *context, uint32_t index)
     {
     case FlipWorldSubmenuIndexRun:
         free_all_views(app, true);
-        view_dispatcher_send_custom_event(app->view_dispatcher, FlipWorldCustomEventPlay);
+        if (!app->view_main)
+        {
+            if (!easy_flipper_set_view(&app->view_main, FlipWorldViewMain, NULL, NULL, callback_to_submenu, &app->view_dispatcher, app))
+            {
+                return;
+            }
+            if (!app->view_main)
+            {
+                return;
+            }
+        }
+        view_dispatcher_switch_to_view(app->view_dispatcher, FlipWorldViewMain);
+        FuriThread *thread = furi_thread_alloc_ex("game", 4096, game_app, app);
+        furi_thread_start(thread);
         break;
     case FlipWorldSubmenuIndexAbout:
         free_all_views(app, true);

+ 0 - 1
callback/callback.h

@@ -11,5 +11,4 @@
 #include "engine/entity_i.h"
 
 void free_all_views(void *context, bool free_variable_item_list);
-bool flip_world_custom_event_callback(void *context, uint32_t index);
 void callback_submenu_choices(void *context, uint32_t index);