gladish: dont allow start of room apps when there is no project dir. Fix for #146

This commit is contained in:
Nedko Arnaudov 2010-12-27 03:15:14 +02:00
parent 9868de418b
commit 7f17fea6ea
3 changed files with 50 additions and 13 deletions

View File

@ -83,6 +83,8 @@ void announce_view_name_change(struct graph_view * view_ptr)
{
set_main_window_title((graph_view_handle)view_ptr);
}
menu_view_changed();
}
static void detach_canvas(struct graph_view * view_ptr)
@ -385,7 +387,7 @@ void activate_view(graph_view_handle view)
{
attach_canvas(view_ptr);
set_main_window_title(view);
menu_view_activated(is_room_view(view));
menu_view_changed();
}
const char * get_view_name(graph_view_handle view)

View File

@ -245,6 +245,36 @@ void menu_uninit(void)
ladish_dynmenu_destroy(g_project_dynmenu);
}
static bool is_new_app_allowed(graph_view_handle view)
{
unsigned int studio_state;
studio_state = get_studio_state();
if (studio_state != STUDIO_STATE_STOPPED && studio_state != STUDIO_STATE_STARTED)
{
return false;
}
if (view == NULL)
{
return false;
}
if (graph_view_get_app_supervisor(view) == NULL)
{
return false;
}
if (!is_room_view(view))
{
/* studio view is currently selected */
return true;
}
return room_has_project(view);
}
void menu_studio_state_changed(unsigned int studio_state)
{
graph_view_handle view;
@ -255,11 +285,22 @@ void menu_studio_state_changed(unsigned int studio_state)
gtk_widget_set_sensitive(g_menu_item_save_as_studio, studio_state == STUDIO_STATE_STARTED);
gtk_widget_set_sensitive(g_menu_item_unload_studio, studio_state != STUDIO_STATE_UNLOADED);
gtk_widget_set_sensitive(g_menu_item_rename_studio, studio_state == STUDIO_STATE_STOPPED || studio_state == STUDIO_STATE_STARTED);
gtk_widget_set_sensitive(g_menu_item_start_app, studio_state == STUDIO_STATE_STOPPED || studio_state == STUDIO_STATE_STARTED);
gtk_widget_set_sensitive(g_menu_item_create_room, studio_state == STUDIO_STATE_STOPPED || studio_state == STUDIO_STATE_STARTED);
view = get_current_view();
gtk_widget_set_sensitive(g_menu_item_project, studio_state == STUDIO_STATE_STARTED && view != NULL && is_room_view(view));
gtk_widget_set_sensitive(g_menu_item_start_app, is_new_app_allowed(view));
}
void menu_view_changed(void)
{
graph_view_handle view;
view = get_current_view();
gtk_widget_set_sensitive(g_menu_item_start_app, is_new_app_allowed(view));
gtk_widget_set_sensitive(g_menu_item_destroy_room, is_room_view(view));
gtk_widget_set_sensitive(g_menu_item_project, is_room_view(view) && get_studio_state() == STUDIO_STATE_STARTED);
}
void menu_set_jack_latency_items_sensivity(bool sensitive)
@ -329,12 +370,6 @@ void menu_set_toolbar_visibility(bool visible)
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(g_menu_item_view_toolbar), visible);
}
void menu_view_activated(bool room)
{
gtk_widget_set_sensitive(g_menu_item_destroy_room, room);
gtk_widget_set_sensitive(g_menu_item_project, room && get_studio_state() == STUDIO_STATE_STARTED);
}
static void on_popup_menu_action_start_app(GtkWidget * menuitem, gpointer userdata)
{
menu_request_start_app();
@ -356,18 +391,18 @@ void fill_view_popup_menu(GtkMenu * menu, graph_view_handle view)
log_info("filling view menu...");
if (graph_view_get_app_supervisor(view) != NULL)
if (graph_view_get_app_supervisor(view) != NULL && (!is_room_view(view) || room_has_project(view)))
{
menuitem = gtk_menu_item_new_with_label(_("New Application..."));
g_signal_connect(menuitem, "activate", (GCallback)on_popup_menu_action_start_app, NULL);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
menuitem = gtk_separator_menu_item_new(); /* separator */
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
}
if (is_room_view(view))
{
menuitem = gtk_separator_menu_item_new(); /* separator */
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
ladish_dynmenu_fill_external(g_project_dynmenu, menu);
menuitem = gtk_separator_menu_item_new(); /* separator */

View File

@ -33,10 +33,10 @@ bool menu_init(void);
void menu_uninit(void);
void menu_studio_state_changed(unsigned int studio_state);
void menu_view_changed(void);
void menu_set_jack_latency_items_sensivity(bool sensitive);
bool menu_set_jack_latency(uint32_t buffer_size, bool force);
void menu_set_toolbar_visibility(bool visible);
void menu_view_activated(bool room);
void fill_view_popup_menu(GtkMenu * menu, graph_view_handle view);
void menu_request_ladishd_exit(void);