diff --git a/src/gui/gui_main_callback_header_bar_load_rom.c b/src/gui/gui_main_callback_header_bar_load_rom.c index 627c54a..f9496a8 100644 --- a/src/gui/gui_main_callback_header_bar_load_rom.c +++ b/src/gui/gui_main_callback_header_bar_load_rom.c @@ -82,6 +82,9 @@ void gui_main_callback_header_bar_load_rom(GtkApplication *app, gpointer user_da break; } default: + // Stop emulation + gui_emulation_timer_stop(); + // Use newly created CPU instance if (gl_gui_components.chip8_cpu) { chip8_free_cpu(gl_gui_components.chip8_cpu); @@ -92,6 +95,9 @@ void gui_main_callback_header_bar_load_rom(GtkApplication *app, gpointer user_da gchar *basename = g_filename_display_basename(filename); gtk_header_bar_set_subtitle(GTK_HEADER_BAR(gl_gui_components.gtk_header_bar), basename); g_free(basename); + + // Start emulation + gui_emulation_timer_start(); break; } diff --git a/src/gui/gui_main_callback_window_destroy.c b/src/gui/gui_main_callback_window_destroy.c index 4a7ead2..aa82eb5 100644 --- a/src/gui/gui_main_callback_window_destroy.c +++ b/src/gui/gui_main_callback_window_destroy.c @@ -1,6 +1,14 @@ #include "gui.h" void gui_main_callback_window_destroy(GtkWidget *widget, gpointer data) { + // Stop emulation gui_emulation_timer_stop(); - gtk_widget_destroy(widget); + + // Free allocated global variables + gtk_widget_destroy(gl_gui_components.gtk_header_bar); + gtk_widget_destroy(gl_gui_components.gtk_drawing_area); + gtk_widget_destroy(widget); // gl_gui_components.gtk_window + + // Free CPU + chip8_free_cpu(gl_gui_components.chip8_cpu); }