Что-то вроде:
GtkWindow* window;
int* data_to_free = malloc(100);
g_signal_connect(window, "destroy", G_CALLBACK (my_function), data_to_free);
void my_function(int* data) {
free(data);
}
где my_function - это функция, которую вы хотите вызвать, когда окно закрывается с необязательным data_to_free (может быть NULL, если my_function не принимает аргументов).