From ebe85388a3a3babdca8c2d11b18824b7ce46b9ab Mon Sep 17 00:00:00 2001 From: Adam Reichold Date: Sat, 28 Nov 2015 12:48:06 +0100 Subject: [PATCH] Simplify the EditWindow singleton using an instance wrapper. --- rtgui/editwindow.cc | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/rtgui/editwindow.cc b/rtgui/editwindow.cc index 3b99f57e5..88bd2aee4 100644 --- a/rtgui/editwindow.cc +++ b/rtgui/editwindow.cc @@ -24,8 +24,6 @@ #include "rtimage.h" #include "threadutils.h" -static EditWindow* editWnd = NULL; - // Check if the system has more than one display and option is set bool EditWindow::isMultiDisplayEnabled() { @@ -35,29 +33,26 @@ bool EditWindow::isMultiDisplayEnabled() // Should only be created once, auto-creates window on correct display EditWindow* EditWindow::getInstance(RTWindow* p) { + struct EditWindowInstance + { + EditWindow editWnd; - if (editWnd == NULL) { - static MyMutex smutex_; - MyMutex::MyLock lock(smutex_); - - if ( editWnd == 0 ) { - editWnd = new EditWindow(p); - + EditWindowInstance(RTWindow* p) : editWnd(p) + { // Determine the other display and maximize the window on that const Glib::RefPtr< Gdk::Window >& wnd = p->get_window(); int monNo = p->get_screen()->get_monitor_at_window (wnd); Gdk::Rectangle lMonitorRect; - editWnd->get_screen()->get_monitor_geometry(isMultiDisplayEnabled() ? (monNo == 0 ? 1 : 0) : monNo, lMonitorRect); - editWnd->move(lMonitorRect.get_x(), lMonitorRect.get_y()); - editWnd->maximize(); - editWnd->show(); - } else { - editWnd->show_all(); + editWnd.get_screen()->get_monitor_geometry(isMultiDisplayEnabled() ? (monNo == 0 ? 1 : 0) : monNo, lMonitorRect); + editWnd.move(lMonitorRect.get_x(), lMonitorRect.get_y()); + editWnd.maximize(); } - } + }; - return editWnd; + static EditWindowInstance instance_(p); + instance_.editWnd.show_all(); + return &instance_.editWnd; } EditWindow::EditWindow (RTWindow* p) : parent(p) , isFullscreen(false)