Use signal for gui disposement. Whena gui is closed, the library data is relesed

This commit is contained in:
2019-03-16 16:09:29 +01:00
parent 5357aff1b8
commit b9cc8570ac
2 changed files with 33 additions and 7 deletions

17
main.c
View File

@@ -71,6 +71,15 @@ const static GActionEntry app_actions[] = {
{"about", app_about, NULL, NULL, NULL, {0}}
};
static void gui_window_closed_callback(GdsRenderGui *gui, gpointer user_data)
{
GList **gui_list = (GList **)user_data;
/* Dispose of Gui element */
*gui_list = g_list_remove(*gui_list, gui);
g_object_unref(gui);
}
static void gapp_activate(GApplication *app, gpointer user_data)
{
GtkWindow *main_window;
@@ -81,6 +90,8 @@ static void gapp_activate(GApplication *app, gpointer user_data)
gui = gds_render_gui_new();
appdata->gui_list = g_list_append(appdata->gui_list, gui);
g_signal_connect(gui, "window-closed", G_CALLBACK(gui_window_closed_callback), &appdata->gui_list);
main_window = gds_render_gui_get_main_window(gui);
gtk_application_add_window(GTK_APPLICATION(app), main_window);
@@ -127,12 +138,6 @@ static int start_gui(int argc, char **argv)
app_status = g_application_run(G_APPLICATION(gapp), argc, argv);
g_object_unref(gapp);
/* Destroy gui_list */
for (list_iter = appdata.gui_list; list_iter != NULL; list_iter = g_list_next(list_iter)) {
gui = RENDERER_GUI(list_iter->data);
g_object_unref(gui);
}
g_list_free(appdata.gui_list);
return app_status;