diff --git a/src/gui/window-manager.cpp b/src/gui/window-manager.cpp index 0e6319816..d2f91f3b2 100644 --- a/src/gui/window-manager.cpp +++ b/src/gui/window-manager.cpp @@ -56,6 +56,8 @@ WindowManager::new_window(gui::model::Project &source_project, windowList.push_back(window); window->show(); + + update_close_window_in_menus(); } bool @@ -107,11 +109,31 @@ WindowManager::on_window_closed(GdkEventAny* event) REQUIRE(main); main->quit(); } + + update_close_window_in_menus(); // Unless this is false, the window won't close return false; } +void +WindowManager::update_close_window_in_menus() +{ + bool enable = windowList.size() > 1; + + list< shared_ptr >::iterator iterator = + windowList.begin(); + + while (iterator != windowList.end()) + { + shared_ptr workspace_window(*iterator); + REQUIRE(workspace_window); + + workspace_window->set_close_window_sensitive(enable); + iterator++; + } +} + GdkColor WindowManager::read_style_colour_property( Gtk::Widget &widget, const gchar *property_name, diff --git a/src/gui/window-manager.hpp b/src/gui/window-manager.hpp index 341c25fcb..0b320d966 100644 --- a/src/gui/window-manager.hpp +++ b/src/gui/window-manager.hpp @@ -94,6 +94,15 @@ private: private: + /** + * On creating and closing of any window, handle enabling or disabling of the + * Window/Close Window menu option. + * + * It should be enabled when there is more than one window and disabled + * otherwise. + **/ + void update_close_window_in_menus(); + /** * Registers the custom icon sizes. **/ diff --git a/src/gui/workspace/actions.cpp b/src/gui/workspace/actions.cpp index af8d94952..99b52d210 100644 --- a/src/gui/workspace/actions.cpp +++ b/src/gui/workspace/actions.cpp @@ -123,6 +123,9 @@ Actions::populate_main_actions(RefPtr uiManager) actionGroup->add(Action::create("WindowNewWindow", StockID("new_window")), mem_fun(*this, &Actions::on_menu_window_new_window)); + actionGroup->add(Action::create("WindowCloseWindow", + _("Close Window")), + mem_fun(*this, &Actions::on_menu_window_close_window)); actionGroup->add(Action::create("WindowShowPanel", _("_Show Panel"))); // Help Menu @@ -169,6 +172,7 @@ Actions::populate_main_actions(RefPtr uiManager) " " " " " " + " " " " " " " " @@ -335,6 +339,13 @@ Actions::on_menu_window_new_window() workspaceWindow.get_controller()); } +void +Actions::on_menu_window_close_window() +{ + workspaceWindow.hide(); + // delete &workspaceWindow; +} + void Actions::on_menu_show_panel(int panel_index) { diff --git a/src/gui/workspace/actions.hpp b/src/gui/workspace/actions.hpp index c6e843832..8d0a68e6b 100644 --- a/src/gui/workspace/actions.hpp +++ b/src/gui/workspace/actions.hpp @@ -93,6 +93,7 @@ private: void on_menu_track_add(); void on_menu_window_new_window(); + void on_menu_window_close_window(); void on_menu_show_panel(int panel_index); void on_menu_help_about(); diff --git a/src/gui/workspace/workspace-window.cpp b/src/gui/workspace/workspace-window.cpp index 5a74c526f..791e49c99 100644 --- a/src/gui/workspace/workspace-window.cpp +++ b/src/gui/workspace/workspace-window.cpp @@ -117,7 +117,13 @@ WorkspaceWindow::create_ui() show_all_children(); } - + +void +WorkspaceWindow::set_close_window_sensitive(bool enable) +{ + uiManager->get_action("/MenuBar/WindowMenu/WindowCloseWindow") + ->set_sensitive(enable); +} } // namespace workspace } // namespace gui diff --git a/src/gui/workspace/workspace-window.hpp b/src/gui/workspace/workspace-window.hpp index b00b009a6..18727ab39 100644 --- a/src/gui/workspace/workspace-window.hpp +++ b/src/gui/workspace/workspace-window.hpp @@ -69,6 +69,8 @@ public: PanelManager& get_panel_manager(); + void set_close_window_sensitive(bool enable); + private: void create_ui();