void ags_machine_popup_destroy_activate_callback(GtkWidget *widget, AgsMachine *machine) { AgsWindow *window; AgsRemoveAudio *remove_audio; window = (AgsWindow *) gtk_widget_get_toplevel((GtkWidget *) machine); remove_audio = ags_remove_audio_new(window->devout, machine->audio); ags_task_thread_append_task(AGS_TASK_THREAD(AGS_AUDIO_LOOP(AGS_MAIN(window->ags_main)->main_loop)->task_thread), AGS_TASK(remove_audio)); ags_connectable_disconnect(AGS_CONNECTABLE(machine)); gtk_widget_destroy((GtkWidget *) machine); }
void ags_machine_popup_destroy_activate_callback(GtkWidget *widget, AgsMachine *machine) { AgsWindow *window; AgsAudio *audio; AgsRemoveAudio *remove_audio; AgsThread *gui_thread; AgsApplicationContext *application_context; GList *list, *list_start; window = (AgsWindow *) gtk_widget_get_toplevel((GtkWidget *) machine); application_context = (AgsApplicationContext *) window->application_context; /* destroy editor */ list = list_start = gtk_container_get_children((GtkContainer *) window->notation_editor->machine_selector); list = list->next; while(list != NULL){ if(AGS_IS_MACHINE_RADIO_BUTTON(list->data) && AGS_MACHINE_RADIO_BUTTON(list->data)->machine == machine){ gtk_widget_destroy(list->data); break; } list = list->next; } g_list_free(list_start); /* destroy automation editor */ list = list_start = gtk_container_get_children((GtkContainer *) window->automation_window->automation_editor->machine_selector); list = list->next; while(list != NULL){ if(AGS_IS_MACHINE_RADIO_BUTTON(list->data) && AGS_MACHINE_RADIO_BUTTON(list->data)->machine == machine){ gtk_widget_destroy(list->data); break; } list = list->next; } g_list_free(list_start); /* destroy machine */ audio = machine->audio; g_object_ref(audio); ags_connectable_disconnect(AGS_CONNECTABLE(machine)); gtk_widget_destroy((GtkWidget *) machine); /* get task thread */ gui_thread = ags_ui_provider_get_gui_thread(AGS_UI_PROVIDER(application_context)); remove_audio = ags_remove_audio_new(application_context, audio); ags_gui_thread_schedule_task((AgsGuiThread *) gui_thread, (GObject *) remove_audio); }