diff --git a/src/gui/gtk-lumiera.cpp b/src/gui/gtk-lumiera.cpp index f112c613c..31d319b47 100644 --- a/src/gui/gtk-lumiera.cpp +++ b/src/gui/gtk-lumiera.cpp @@ -65,10 +65,11 @@ GtkLumiera::main(int argc, char *argv[]) Project project; Controller controller(project); - WindowManager window_manager; - window_manager.set_theme("lumiera_ui.rc"); - window_manager.new_window(project, controller); + WindowManager *manager = WindowManager::instance(); + REQUIRE(manager); + manager->set_theme("lumiera_ui.rc"); + manager->new_window(project, controller); kit.run(); } diff --git a/src/gui/window-manager.cpp b/src/gui/window-manager.cpp index b077b45dd..ec8596563 100644 --- a/src/gui/window-manager.cpp +++ b/src/gui/window-manager.cpp @@ -73,17 +73,31 @@ WindowManager::set_theme(Glib::ustring path) return true; } +WindowManager* +WindowManager::instance() +{ + // Initialized during first access + static WindowManager manager; + return &manager; +} + bool -WindowManager::on_window_closed(GdkEventAny*) -{ +WindowManager::on_window_closed(GdkEventAny* event) +{ + REQUIRE(event); + REQUIRE(event->window); + list< shared_ptr >::iterator iterator = windowList.begin(); + while(iterator != windowList.end()) { - shared_ptr window(*iterator); - REQUIRE(window); + shared_ptr workspace_window(*iterator); + REQUIRE(workspace_window); - if(!window->get_frame()) + RefPtr window = workspace_window->get_window(); + REQUIRE(window); + if(window->gobj() == event->window) { // This window has been closed iterator = windowList.erase(iterator); diff --git a/src/gui/window-manager.hpp b/src/gui/window-manager.hpp index 8599f7bd9..0f2f9c0e2 100644 --- a/src/gui/window-manager.hpp +++ b/src/gui/window-manager.hpp @@ -69,6 +69,9 @@ public: bool set_theme(Glib::ustring path); public: + + static WindowManager* instance(); + /** * A utility function which reads a colour style from the GTK Style. * @param widget The widget to load the style out of. @@ -87,7 +90,7 @@ private: /** * An event handler for when a window has been closed. **/ - bool on_window_closed(GdkEventAny*); + bool on_window_closed(GdkEventAny* event); private: diff --git a/src/gui/workspace/actions.cpp b/src/gui/workspace/actions.cpp index fa89310d5..f226775be 100644 --- a/src/gui/workspace/actions.cpp +++ b/src/gui/workspace/actions.cpp @@ -23,6 +23,8 @@ #include "actions.hpp" #include "workspace-window.hpp" +#include "../window-manager.hpp" + #include "../dialogs/render.hpp" #include "../dialogs/preferences-dialog.hpp" #include "../dialogs/name-chooser.hpp" @@ -188,7 +190,8 @@ Actions::on_menu_view_viewer() void Actions::on_menu_view_new_window() { - g_message("New Window"); + WindowManager::instance()->new_window(workspaceWindow.project, + workspaceWindow.controller); } /* ===== Sequence Menu Event Handlers ===== */