From 93ae542b95b3708e49a75aaa6f81943819e95f7e Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Fri, 15 Feb 2019 13:07:06 +0100 Subject: Turn InkscapeApplication into singleton. --- src/inkscape-application.cpp | 15 +++++++++++++++ src/inkscape-application.h | 3 +++ src/inkscape-main.cpp | 4 ++-- src/inkscape-window.cpp | 3 +++ 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/inkscape-application.cpp b/src/inkscape-application.cpp index 0ebc93f82..cd88345ff 100644 --- a/src/inkscape-application.cpp +++ b/src/inkscape-application.cpp @@ -52,6 +52,11 @@ InkscapeApplication::InkscapeApplication() , _active_view(nullptr) {} +/** Update windows in response to: + * - New active window + * - Document change + * - Selection change + */ void InkscapeApplication::update_windows(SPDocument* document) { @@ -60,11 +65,21 @@ InkscapeApplication::update_windows(SPDocument* document) if (it != _documents.end()) { std::vector windows = it->second; std::cout << "InkscapeApplication::update_windows: windows: " << windows.size() << std::endl; + // Loop over InkscapeWindows. + // Loop over DialogWindows. TBD } else { std::cout << "InkscapeApplication::update_windows: no windows found" << std::endl; } } +template +ConcreteInkscapeApplication& +ConcreteInkscapeApplication::get_instance() +{ + static ConcreteInkscapeApplication instance; + return instance; +} + template ConcreteInkscapeApplication::ConcreteInkscapeApplication() : T("org.inkscape.application.with_gui", diff --git a/src/inkscape-application.h b/src/inkscape-application.h index 3b84770cf..d5b58d5cd 100644 --- a/src/inkscape-application.h +++ b/src/inkscape-application.h @@ -96,6 +96,9 @@ protected: template class ConcreteInkscapeApplication : public T, public InkscapeApplication { public: + static ConcreteInkscapeApplication& get_instance(); + +private: ConcreteInkscapeApplication(); public: diff --git a/src/inkscape-main.cpp b/src/inkscape-main.cpp index d4fe68bb8..3e008558f 100644 --- a/src/inkscape-main.cpp +++ b/src/inkscape-main.cpp @@ -21,9 +21,9 @@ int main(int argc, char *argv[]) { if (gtk_init_check(NULL, NULL)) - return (new ConcreteInkscapeApplication())->run(argc, argv); + return (ConcreteInkscapeApplication::get_instance()).run(argc, argv); else - return (new ConcreteInkscapeApplication())->run(argc, argv); + return (ConcreteInkscapeApplication::get_instance()).run(argc, argv); } /* diff --git a/src/inkscape-window.cpp b/src/inkscape-window.cpp index 68a8db819..600b602d1 100644 --- a/src/inkscape-window.cpp +++ b/src/inkscape-window.cpp @@ -41,6 +41,9 @@ InkscapeWindow::InkscapeWindow(SPDocument* document) return; } + ConcreteInkscapeApplication& my_app = + ConcreteInkscapeApplication::get_instance(); + Glib::RefPtr gio_app = Gio::Application::get_default(); Glib::RefPtr gtk_app = Glib::RefPtr::cast_dynamic(gio_app); _app = Glib::RefPtr::cast_dynamic(gtk_app); -- cgit v1.2.3