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); set_main_window_title((graph_view_handle)view_ptr);
} }
menu_view_changed();
} }
static void detach_canvas(struct graph_view * view_ptr) static void detach_canvas(struct graph_view * view_ptr)
@ -385,7 +387,7 @@ void activate_view(graph_view_handle view)
{ {
attach_canvas(view_ptr); attach_canvas(view_ptr);
set_main_window_title(view); set_main_window_title(view);
menu_view_activated(is_room_view(view)); menu_view_changed();
} }
const char * get_view_name(graph_view_handle view) 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); 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) void menu_studio_state_changed(unsigned int studio_state)
{ {
graph_view_handle view; 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_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_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_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); gtk_widget_set_sensitive(g_menu_item_create_room, studio_state == STUDIO_STATE_STOPPED || studio_state == STUDIO_STATE_STARTED);
view = get_current_view(); 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_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) 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); 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) static void on_popup_menu_action_start_app(GtkWidget * menuitem, gpointer userdata)
{ {
menu_request_start_app(); menu_request_start_app();
@ -356,18 +391,18 @@ void fill_view_popup_menu(GtkMenu * menu, graph_view_handle view)
log_info("filling view menu..."); 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...")); menuitem = gtk_menu_item_new_with_label(_("New Application..."));
g_signal_connect(menuitem, "activate", (GCallback)on_popup_menu_action_start_app, NULL); g_signal_connect(menuitem, "activate", (GCallback)on_popup_menu_action_start_app, NULL);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); 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)) 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); ladish_dynmenu_fill_external(g_project_dynmenu, menu);
menuitem = gtk_separator_menu_item_new(); /* separator */ menuitem = gtk_separator_menu_item_new(); /* separator */

View File

@ -33,10 +33,10 @@ bool menu_init(void);
void menu_uninit(void); void menu_uninit(void);
void menu_studio_state_changed(unsigned int studio_state); void menu_studio_state_changed(unsigned int studio_state);
void menu_view_changed(void);
void menu_set_jack_latency_items_sensivity(bool sensitive); void menu_set_jack_latency_items_sensivity(bool sensitive);
bool menu_set_jack_latency(uint32_t buffer_size, bool force); bool menu_set_jack_latency(uint32_t buffer_size, bool force);
void menu_set_toolbar_visibility(bool visible); 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 fill_view_popup_menu(GtkMenu * menu, graph_view_handle view);
void menu_request_ladishd_exit(void); void menu_request_ladishd_exit(void);