Browse Source

unix: Unref SDL_gtk context on quit

Sam Lantinga 1 month ago
parent
commit
0c5f7f6a33
2 changed files with 7 additions and 1 deletions
  1. 6 1
      src/core/unix/SDL_gtk.c
  2. 1 0
      src/core/unix/SDL_gtk.h

+ 6 - 1
src/core/unix/SDL_gtk.c

@@ -64,6 +64,11 @@ static gulong signal_connect(gpointer instance, const gchar *detailed_signal, vo
 
 
 static void QuitGtk(void)
 static void QuitGtk(void)
 {
 {
+    if (sdl_main_context) {
+        gtk.g.main_context_unref(sdl_main_context);
+        sdl_main_context = NULL;
+    }
+
     SDL_UnloadObject(libgdk);
     SDL_UnloadObject(libgdk);
     SDL_UnloadObject(libgtk);
     SDL_UnloadObject(libgtk);
 
 
@@ -137,6 +142,7 @@ static bool InitGtk(void)
     SDL_GTK_SYM(gtk, libgdk, g, main_context_push_thread_default);
     SDL_GTK_SYM(gtk, libgdk, g, main_context_push_thread_default);
     SDL_GTK_SYM(gtk, libgdk, g, main_context_pop_thread_default);
     SDL_GTK_SYM(gtk, libgdk, g, main_context_pop_thread_default);
     SDL_GTK_SYM(gtk, libgdk, g, main_context_new);
     SDL_GTK_SYM(gtk, libgdk, g, main_context_new);
+    SDL_GTK_SYM(gtk, libgdk, g, main_context_unref);
     SDL_GTK_SYM(gtk, libgdk, g, main_context_acquire);
     SDL_GTK_SYM(gtk, libgdk, g, main_context_acquire);
     SDL_GTK_SYM(gtk, libgdk, g, main_context_iteration);
     SDL_GTK_SYM(gtk, libgdk, g, main_context_iteration);
 
 
@@ -192,7 +198,6 @@ void SDL_Gtk_Quit(void)
 
 
     QuitGtk();
     QuitGtk();
     SDL_zero(gtk);
     SDL_zero(gtk);
-    sdl_main_context = NULL;
 
 
     SDL_SetInitialized(&gtk_init, false);
     SDL_SetInitialized(&gtk_init, false);
 }
 }

+ 1 - 0
src/core/unix/SDL_gtk.h

@@ -88,6 +88,7 @@ typedef struct SDL_GtkContext
 		void (*main_context_push_thread_default)(GMainContext *context);
 		void (*main_context_push_thread_default)(GMainContext *context);
 		void (*main_context_pop_thread_default)(GMainContext *context);
 		void (*main_context_pop_thread_default)(GMainContext *context);
 		GMainContext *(*main_context_new)(void);
 		GMainContext *(*main_context_new)(void);
+		void (*main_context_unref)(GMainContext *context);
 		gboolean (*main_context_acquire)(GMainContext *context);
 		gboolean (*main_context_acquire)(GMainContext *context);
 		gboolean (*main_context_iteration)(GMainContext *context, gboolean may_block);
 		gboolean (*main_context_iteration)(GMainContext *context, gboolean may_block);
 	} g;
 	} g;