From 7f17fea6ea82c6ec5f598f881c9be14f1d28da4f Mon Sep 17 00:00:00 2001 From: Nedko Arnaudov Date: Mon, 27 Dec 2010 03:15:14 +0200 Subject: [PATCH] gladish: dont allow start of room apps when there is no project dir. Fix for #146 --- gui/graph_view.c | 4 +++- gui/menu.c | 57 ++++++++++++++++++++++++++++++++++++++---------- gui/menu.h | 2 +- 3 files changed, 50 insertions(+), 13 deletions(-) diff --git a/gui/graph_view.c b/gui/graph_view.c index aaa97a0d..a4708d08 100644 --- a/gui/graph_view.c +++ b/gui/graph_view.c @@ -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) diff --git a/gui/menu.c b/gui/menu.c index 38d9f490..f2ef8793 100644 --- a/gui/menu.c +++ b/gui/menu.c @@ -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 */ diff --git a/gui/menu.h b/gui/menu.h index a5449c26..bc0574d0 100644 --- a/gui/menu.h +++ b/gui/menu.h @@ -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);