don't allow saving of non-started studio

hidden clients, ports and connections are not saved
so only app list will be saved.
This commit is contained in:
Nedko Arnaudov 2009-12-07 23:35:37 +02:00
parent b042bbf078
commit 672c5e52d8
3 changed files with 47 additions and 18 deletions

View File

@ -652,6 +652,12 @@ static bool run(void * command_context)
ret = false;
if (!studio_is_started())
{
log_error("Cannot save not-started studio");
goto exit;
}
if (!studio_compose_filename(g_studio.name, &filename, &bak_filename))
{
log_error("failed to compose studio filename");

View File

@ -540,6 +540,18 @@ static void ladish_save_studio(struct dbus_method_call * call_ptr)
{
log_info("Save studio request");
/* FIXME: this is wrong place to do such check because state before
command execution needs to be checked and not state before
command is submited, but doing it here will show error to
user. Once notification mechanism is implemented, the
studio_is_started() check in save command run menthod
will send a notification and this check must be removed. */
if (!studio_is_started())
{
lash_dbus_error(call_ptr, LASH_DBUS_ERROR_GENERIC, "Cannot save not-started studio");
return;
}
if (ladish_command_save_studio(call_ptr, &g_studio.cmd_queue))
{
method_return_new_void(call_ptr);

View File

@ -73,6 +73,8 @@ graph_view_handle g_studio_view = NULL;
static guint g_jack_poll_source_tag;
static double g_jack_max_dsp_load = 0.0;
static bool g_studio_started = false;
static bool g_studio_loaded = false;
struct studio_list
{
@ -479,10 +481,25 @@ static gboolean poll_jack(gpointer data)
return TRUE;
}
void studio_state_changed(void)
{
gtk_widget_set_sensitive(g_menu_item_start_studio, g_studio_loaded);
gtk_widget_set_sensitive(g_menu_item_stop_studio, g_studio_loaded);
gtk_widget_set_sensitive(g_menu_item_save_studio, g_studio_loaded && g_studio_started);
gtk_widget_set_sensitive(g_menu_item_unload_studio, g_studio_loaded);
gtk_widget_set_sensitive(g_menu_item_rename_studio, g_studio_loaded);
gtk_widget_set_sensitive(g_menu_item_start_app, g_studio_loaded);
//gtk_widget_set_sensitive(g_menu_item_create_room, g_studio_loaded);
//gtk_widget_set_sensitive(g_menu_item_destroy_room, g_studio_loaded);
//gtk_widget_set_sensitive(g_menu_item_load_project, g_studio_loaded);
}
void control_proxy_on_studio_appeared(void)
{
char * name;
g_studio_loaded = true;
if (!studio_proxy_get_name(&name))
{
log_error("failed to get studio name");
@ -501,15 +518,7 @@ void control_proxy_on_studio_appeared(void)
goto free_name;
}
gtk_widget_set_sensitive(g_menu_item_start_studio, true);
gtk_widget_set_sensitive(g_menu_item_stop_studio, true);
gtk_widget_set_sensitive(g_menu_item_save_studio, true);
gtk_widget_set_sensitive(g_menu_item_unload_studio, true);
gtk_widget_set_sensitive(g_menu_item_rename_studio, true);
gtk_widget_set_sensitive(g_menu_item_start_app, true);
//gtk_widget_set_sensitive(g_menu_item_create_room, true);
//gtk_widget_set_sensitive(g_menu_item_destroy_room, true);
//gtk_widget_set_sensitive(g_menu_item_load_project, true);
studio_state_changed();
gtk_label_set_text(GTK_LABEL(g_studio_status_label), name);
@ -528,15 +537,9 @@ void control_proxy_on_studio_disappeared(void)
return;
}
gtk_widget_set_sensitive(g_menu_item_start_studio, false);
gtk_widget_set_sensitive(g_menu_item_stop_studio, false);
gtk_widget_set_sensitive(g_menu_item_save_studio, false);
gtk_widget_set_sensitive(g_menu_item_unload_studio, false);
gtk_widget_set_sensitive(g_menu_item_rename_studio, false);
gtk_widget_set_sensitive(g_menu_item_start_app, false);
//gtk_widget_set_sensitive(g_menu_item_create_room, false);
//gtk_widget_set_sensitive(g_menu_item_destroy_room, false);
//gtk_widget_set_sensitive(g_menu_item_load_project, false);
g_studio_loaded = false;
studio_state_changed();
gtk_label_set_text(GTK_LABEL(g_studio_status_label), "No studio loaded");
@ -559,6 +562,10 @@ void jack_started(void)
{
log_info("JACK started");
g_studio_started = true;
studio_state_changed();
gtk_widget_set_sensitive(g_buffer_size_combo, true);
gtk_widget_set_sensitive(g_clear_load_button, true);
@ -569,8 +576,12 @@ void jack_stopped(void)
{
log_info("JACK stopped");
g_studio_started = false;
g_source_remove(g_jack_poll_source_tag);
studio_state_changed();
gtk_widget_set_sensitive(g_buffer_size_combo, false);
buffer_size_clear();
gtk_widget_set_sensitive(g_clear_load_button, false);