diff --git a/CMakeLists.txt b/CMakeLists.txt index 3615e5f23..e614718e1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -278,10 +278,10 @@ if (OPTION_OMP) endif (OPENMP_FOUND) endif (OPTION_OMP) -if(USE_EXPERIMENTAL_LANG_VERSIONS) +if(USE_EXPERIMENTAL_LANG_VERSIONS OR NOT (SIGC_VERSION VERSION_LESS 2.5.1)) SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu1x") SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++0x") -endif (USE_EXPERIMENTAL_LANG_VERSIONS) +endif () # find out whether we are building out of source get_filename_component(ABS_SOURCE_DIR "${PROJECT_SOURCE_DIR}" ABSOLUTE) diff --git a/rtdata/languages/Catala b/rtdata/languages/Catala index 414b7a4bb..269e122d4 100644 --- a/rtdata/languages/Catala +++ b/rtdata/languages/Catala @@ -1294,6 +1294,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !MAIN_BUTTON_NAVNEXT_TOOLTIP;Navigate to the next image relative to image opened in the Editor.\nShortcut: Shift-F4\n\nTo navigate to the next image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F4 !MAIN_BUTTON_NAVPREV_TOOLTIP;Navigate to the previous image relative to image opened in the Editor.\nShortcut: Shift-F3\n\nTo navigate to the previous image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F3 !MAIN_BUTTON_NAVSYNC_TOOLTIP;Synchronize the File Browser or Filmstrip with the Editor to reveal the thumbnail of the currently opened image, and clear any active filters.\nShortcut: x\n\nAs above, but without clearing active filters:\nShortcut: y\n(Note that the thumbnail of the opened image will not be shown if filtered out). +!MAIN_BUTTON_SENDTOEDITOR;Edit image in external editor !MAIN_MSG_OPERATIONCANCELLED;Operation cancelled !MAIN_MSG_PATHDOESNTEXIST;The path\n\n%1\n\ndoes not exist. Please set a correct path in Preferences. !MAIN_MSG_SETPATHFIRST;You first have to set a target path in Preferences in order to use this function! diff --git a/rtdata/languages/Czech b/rtdata/languages/Czech index 423a0e41d..b6d64cc45 100644 --- a/rtdata/languages/Czech +++ b/rtdata/languages/Czech @@ -1999,4 +1999,5 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !!!!!!!!!!!!!!!!!!!!!!!!! !HISTORY_MSG_166;Exposure - Reset +!MAIN_BUTTON_SENDTOEDITOR;Edit image in external editor !TP_NEUTRAL;Reset diff --git a/rtdata/languages/English (UK) b/rtdata/languages/English (UK) index 3f54ab72b..f0cdc3390 100644 --- a/rtdata/languages/English (UK) +++ b/rtdata/languages/English (UK) @@ -788,6 +788,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !MAIN_BUTTON_PREFERENCES;Preferences !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Put current image to processing queue.\nShortcut: Ctrl+b !MAIN_BUTTON_SAVE_TOOLTIP;Save current image.\nShortcut: Ctrl+s +!MAIN_BUTTON_SENDTOEDITOR;Edit image in external editor !MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Edit current image in external editor.\nShortcut: Ctrl+e !MAIN_BUTTON_SHOWHIDESIDEPANELS_TOOLTIP;Show/hide all side panels.\nShortcut: m !MAIN_BUTTON_UNFULLSCREEN;Exit fullscreen diff --git a/rtdata/languages/English (US) b/rtdata/languages/English (US) index 56f004c7f..82087395d 100644 --- a/rtdata/languages/English (US) +++ b/rtdata/languages/English (US) @@ -709,6 +709,7 @@ !MAIN_BUTTON_PREFERENCES;Preferences !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Put current image to processing queue.\nShortcut: Ctrl+b !MAIN_BUTTON_SAVE_TOOLTIP;Save current image.\nShortcut: Ctrl+s +!MAIN_BUTTON_SENDTOEDITOR;Edit image in external editor !MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Edit current image in external editor.\nShortcut: Ctrl+e !MAIN_BUTTON_SHOWHIDESIDEPANELS_TOOLTIP;Show/hide all side panels.\nShortcut: m !MAIN_BUTTON_UNFULLSCREEN;Exit fullscreen diff --git a/rtdata/languages/Francais b/rtdata/languages/Francais index ca118df48..9822bc600 100644 --- a/rtdata/languages/Francais +++ b/rtdata/languages/Francais @@ -1912,6 +1912,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !HISTORY_MSG_424;Retinex - HL threshold !HISTORY_MSG_425;Retinex - Log base !HISTORY_MSG_426;Retinex - Hue equalizer +!MAIN_BUTTON_SENDTOEDITOR;Edit image in external editor !PARTIALPASTE_RETINEX;Retinex !PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file !SAVEDLG_SUBSAMP_TOOLTIP;Best compression:\nJ:a:b 4:2:0\nh/v 2/2\nChroma halved horizontally and vertically.\n\nBalanced:\nJ:a:b 4:2:2\nh/v 2/1\nChroma halved horizontally.\n\nBest quality:\nJ:a:b 4:4:4\nh/v 1/1\nNo chroma subsampling. diff --git a/rtdata/languages/Italiano b/rtdata/languages/Italiano index fd3991a53..1268b74d2 100644 --- a/rtdata/languages/Italiano +++ b/rtdata/languages/Italiano @@ -1558,6 +1558,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !HISTORY_MSG_424;Retinex - HL threshold !HISTORY_MSG_425;Retinex - Log base !HISTORY_MSG_426;Retinex - Hue equalizer +!MAIN_BUTTON_SENDTOEDITOR;Edit image in external editor !MAIN_TAB_INSPECT; Inspect !MAIN_TAB_WAVELET;Wavelet !MAIN_TAB_WAVELET_TOOLTIP;Shortcut: Alt-w diff --git a/rtdata/languages/Japanese b/rtdata/languages/Japanese index e3a29fe2a..164d9d5de 100644 --- a/rtdata/languages/Japanese +++ b/rtdata/languages/Japanese @@ -1946,6 +1946,7 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: - !HISTORY_MSG_424;Retinex - HL threshold !HISTORY_MSG_425;Retinex - Log base !HISTORY_MSG_426;Retinex - Hue equalizer +!MAIN_BUTTON_SENDTOEDITOR;Edit image in external editor !PARTIALPASTE_RETINEX;Retinex !PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file !SAVEDLG_SUBSAMP_TOOLTIP;Best compression:\nJ:a:b 4:2:0\nh/v 2/2\nChroma halved horizontally and vertically.\n\nBalanced:\nJ:a:b 4:2:2\nh/v 2/1\nChroma halved horizontally.\n\nBest quality:\nJ:a:b 4:4:4\nh/v 1/1\nNo chroma subsampling. diff --git a/rtdata/languages/Nederlands b/rtdata/languages/Nederlands index 4accd6424..3b854174e 100644 --- a/rtdata/languages/Nederlands +++ b/rtdata/languages/Nederlands @@ -1968,6 +1968,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !HISTORY_MSG_166;Exposure - Reset !HISTORY_MSG_412;Retinex - Scales !HISTORY_MSG_416;Retinex +!MAIN_BUTTON_SENDTOEDITOR;Edit image in external editor !TP_COLORTONING_STR;Strength !TP_DIRPYRDENOISE_CUR;Curve !TP_DIRPYRDENOISE_LAB;L*a*b* diff --git a/rtdata/languages/Polish b/rtdata/languages/Polish index fb8a07571..1e3702cbd 100644 --- a/rtdata/languages/Polish +++ b/rtdata/languages/Polish @@ -1650,6 +1650,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_424;Retinex - HL threshold !HISTORY_MSG_425;Retinex - Log base !HISTORY_MSG_426;Retinex - Hue equalizer +!MAIN_BUTTON_SENDTOEDITOR;Edit image in external editor !MAIN_TAB_INSPECT; Inspect !MAIN_TAB_WAVELET;Wavelet !MAIN_TAB_WAVELET_TOOLTIP;Shortcut: Alt-w diff --git a/rtdata/languages/Polish (Latin Characters) b/rtdata/languages/Polish (Latin Characters) index 8519cc04a..aa4edff85 100644 --- a/rtdata/languages/Polish (Latin Characters) +++ b/rtdata/languages/Polish (Latin Characters) @@ -1650,6 +1650,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: - !HISTORY_MSG_424;Retinex - HL threshold !HISTORY_MSG_425;Retinex - Log base !HISTORY_MSG_426;Retinex - Hue equalizer +!MAIN_BUTTON_SENDTOEDITOR;Edit image in external editor !MAIN_TAB_INSPECT; Inspect !MAIN_TAB_WAVELET;Wavelet !MAIN_TAB_WAVELET_TOOLTIP;Shortcut: Alt-w diff --git a/rtdata/languages/Russian b/rtdata/languages/Russian index f86ff63c9..1748fd39a 100644 --- a/rtdata/languages/Russian +++ b/rtdata/languages/Russian @@ -1501,6 +1501,7 @@ ZOOMPANEL_ZOOMOUT;Удалить - !HISTORY_MSG_424;Retinex - HL threshold !HISTORY_MSG_425;Retinex - Log base !HISTORY_MSG_426;Retinex - Hue equalizer +!MAIN_BUTTON_SENDTOEDITOR;Edit image in external editor !MAIN_TAB_INSPECT; Inspect !MAIN_TAB_WAVELET;Wavelet !MAIN_TAB_WAVELET_TOOLTIP;Shortcut: Alt-w diff --git a/rtdata/languages/Swedish b/rtdata/languages/Swedish index db6512429..62416d9ee 100644 --- a/rtdata/languages/Swedish +++ b/rtdata/languages/Swedish @@ -1777,6 +1777,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !HISTORY_MSG_424;Retinex - HL threshold !HISTORY_MSG_425;Retinex - Log base !HISTORY_MSG_426;Retinex - Hue equalizer +!MAIN_BUTTON_SENDTOEDITOR;Edit image in external editor !PARTIALPASTE_COLORTONING;Color toning !PARTIALPASTE_FLATFIELDCLIPCONTROL;Flat-field clip control !PARTIALPASTE_RETINEX;Retinex diff --git a/rtdata/languages/default b/rtdata/languages/default index 5729f950f..a7c06711a 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -710,6 +710,7 @@ MAIN_BUTTON_NAVSYNC_TOOLTIP;Synchronize the File Browser or Filmstrip with the E MAIN_BUTTON_PREFERENCES;Preferences MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Put current image to processing queue.\nShortcut: Ctrl+b MAIN_BUTTON_SAVE_TOOLTIP;Save current image.\nShortcut: Ctrl+s +MAIN_BUTTON_SENDTOEDITOR;Edit image in external editor MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Edit current image in external editor.\nShortcut: Ctrl+e MAIN_BUTTON_SHOWHIDESIDEPANELS_TOOLTIP;Show/hide all side panels.\nShortcut: m MAIN_BUTTON_UNFULLSCREEN;Exit fullscreen diff --git a/rtengine/StopWatch.h b/rtengine/StopWatch.h index fa043aa24..2b3ff1baf 100644 --- a/rtengine/StopWatch.h +++ b/rtengine/StopWatch.h @@ -24,6 +24,12 @@ #include #include "mytime.h" +#ifdef BENCHMARK + #define BENCHFUN StopWatch StopFun(__func__); +#else + #define BENCHFUN +#endif + class StopWatch { public: diff --git a/rtengine/amaze_demosaic_RT.cc b/rtengine/amaze_demosaic_RT.cc index dc2d4316e..46c77d7d7 100644 --- a/rtengine/amaze_demosaic_RT.cc +++ b/rtengine/amaze_demosaic_RT.cc @@ -31,12 +31,14 @@ #include "procparams.h" #include "sleef.c" #include "opthelper.h" +#include "StopWatch.h" namespace rtengine { SSEFUNCTION void RawImageSource::amaze_demosaic_RT(int winx, int winy, int winw, int winh) { + BENCHFUN #define HCLIP(x) x //is this still necessary??? //min(clip_pt,x) diff --git a/rtengine/camconst.cc b/rtengine/camconst.cc index 80d73ea2e..e45a332e1 100644 --- a/rtengine/camconst.cc +++ b/rtengine/camconst.cc @@ -683,29 +683,22 @@ CameraConstantsStore::CameraConstantsStore() { } -static CameraConstantsStore *global_instance; - -void CameraConstantsStore::initCameraConstants(Glib::ustring baseDir, Glib::ustring userSettingsDir) +void CameraConstantsStore::init(Glib::ustring baseDir, Glib::ustring userSettingsDir) { - if (global_instance) { - // should only be called once during init. - abort(); - } - - global_instance = new CameraConstantsStore(); - global_instance->parse_camera_constants_file(Glib::build_filename(baseDir, "camconst.json")); + parse_camera_constants_file(Glib::build_filename(baseDir, "camconst.json")); Glib::ustring userFile(Glib::build_filename(userSettingsDir, "camconst.json")); if (safe_file_test(userFile, Glib::FILE_TEST_EXISTS)) { - global_instance->parse_camera_constants_file(userFile); + parse_camera_constants_file(userFile); } } CameraConstantsStore * CameraConstantsStore::getInstance(void) { - return global_instance; + static CameraConstantsStore instance_; + return &instance_; } CameraConst * diff --git a/rtengine/camconst.h b/rtengine/camconst.h index a591f09fe..b57c3fee9 100644 --- a/rtengine/camconst.h +++ b/rtengine/camconst.h @@ -54,7 +54,7 @@ private: bool parse_camera_constants_file(Glib::ustring filename); public: - static void initCameraConstants(Glib::ustring baseDir, Glib::ustring userSettingsDir); + void init(Glib::ustring baseDir, Glib::ustring userSettingsDir); static CameraConstantsStore *getInstance(void); CameraConst *get(const char make[], const char model[]); }; diff --git a/rtengine/dcp.cc b/rtengine/dcp.cc index 9b3d852fc..9dd01330b 100644 --- a/rtengine/dcp.cc +++ b/rtengine/dcp.cc @@ -1691,18 +1691,8 @@ void DCPProfile::step2ApplyTile(float *rc, float *gc, float *bc, int width, int // Generates as singleton DCPStore* DCPStore::getInstance() { - static DCPStore* instance_ = 0; - - if ( instance_ == 0 ) { - static MyMutex smutex_; - MyMutex::MyLock lock(smutex_); - - if ( instance_ == 0 ) { - instance_ = new DCPStore(); - } - } - - return instance_; + static DCPStore instance_; + return &instance_; } // Reads all profiles from the given profiles dir diff --git a/rtengine/iccstore.cc b/rtengine/iccstore.cc index 195da3fe3..bad4e8dfa 100644 --- a/rtengine/iccstore.cc +++ b/rtengine/iccstore.cc @@ -192,18 +192,8 @@ ICCStore::makeStdGammaProfile(cmsHPROFILE iprof) ICCStore* ICCStore::getInstance(void) { - static ICCStore* instance_ = 0; - - if ( instance_ == 0 ) { - static MyMutex smutex_; - MyMutex::MyLock lock(smutex_); - - if ( instance_ == 0 ) { - instance_ = new ICCStore(); - } - } - - return instance_; + static ICCStore instance_; + return &instance_; } ICCStore::ICCStore () diff --git a/rtengine/init.cc b/rtengine/init.cc index acedd844f..9fa5c48ee 100644 --- a/rtengine/init.cc +++ b/rtengine/init.cc @@ -46,7 +46,7 @@ int init (const Settings* s, Glib::ustring baseDir, Glib::ustring userSettingsDi dcpStore->init (baseDir + "/dcpprofiles"); - CameraConstantsStore::initCameraConstants (baseDir, userSettingsDir); + CameraConstantsStore::getInstance ()->init (baseDir, userSettingsDir); profileStore.init (); ProcParams::init (); Color::init (); diff --git a/rtengine/lcp.cc b/rtengine/lcp.cc index da042711a..903e54a0a 100644 --- a/rtengine/lcp.cc +++ b/rtengine/lcp.cc @@ -781,18 +781,8 @@ void XMLCALL LCPProfile::XmlEndHandler(void *pLCPProfile, const char *el) // Generates as singleton LCPStore* LCPStore::getInstance() { - static LCPStore* instance_ = 0; - - if ( instance_ == 0 ) { - static MyMutex smutex_; - MyMutex::MyLock lock(smutex_); - - if ( instance_ == 0 ) { - instance_ = new LCPStore(); - } - } - - return instance_; + static LCPStore instance_; + return &instance_; } LCPProfile* LCPStore::getProfile (Glib::ustring filename) diff --git a/rtexif/rtexif.cc b/rtexif/rtexif.cc index 2aa9c66e0..be442945d 100644 --- a/rtexif/rtexif.cc +++ b/rtexif/rtexif.cc @@ -2783,17 +2783,11 @@ TagDirectory* ExifManager::parseTIFF (FILE* f, bool skipIgnored) return parse (f, 0, skipIgnored); } -std::vector ExifManager::defTags; - -// forthis: the byte order will be taken from directory "forthis" -const std::vector& ExifManager::getDefaultTIFFTags (TagDirectory* forthis) +std::vector ExifManager::getDefaultTIFFTags (TagDirectory* forthis) { + std::vector defTags; - for (size_t i = 0; i < defTags.size(); i++) { - delete defTags[i]; - } - - defTags.clear (); + defTags.reserve (12); defTags.push_back (new Tag (forthis, lookupAttrib(ifdAttribs, "ImageWidth"), 0, LONG)); defTags.push_back (new Tag (forthis, lookupAttrib(ifdAttribs, "ImageHeight"), 0, LONG)); defTags.push_back (new Tag (forthis, lookupAttrib(ifdAttribs, "XResolution"), 300, RATIONAL)); @@ -2843,14 +2837,16 @@ int ExifManager::createJPEGMarker (const TagDirectory* root, const rtengine::pro cl->applyChange (i->first, i->second); } - getDefaultTIFFTags (cl); + const std::vector defTags = getDefaultTIFFTags (cl); defTags[0]->setInt (W, 0, LONG); defTags[1]->setInt (H, 0, LONG); defTags[8]->setInt (8, 0, SHORT); for (int i = defTags.size() - 1; i >= 0; i--) { - cl->replaceTag (defTags[i]->clone (cl)); + Tag* defTag = defTags[i]; + cl->replaceTag (defTag->clone (cl)); + delete defTag; } cl->sort (); @@ -2928,7 +2924,7 @@ int ExifManager::createTIFFHeader (const TagDirectory* root, const rtengine::pro } // append default properties - getDefaultTIFFTags (cl); + const std::vector defTags = getDefaultTIFFTags (cl); defTags[0]->setInt (W, 0, LONG); defTags[1]->setInt (H, 0, LONG); @@ -2939,7 +2935,9 @@ int ExifManager::createTIFFHeader (const TagDirectory* root, const rtengine::pro } for (int i = defTags.size() - 1; i >= 0; i--) { - cl->replaceTag (defTags[i]->clone (cl)); + Tag* defTag = defTags[i]; + cl->replaceTag (defTag->clone (cl)); + delete defTag; } // calculate strip offsets diff --git a/rtexif/rtexif.h b/rtexif/rtexif.h index f476445d1..d7c13f77a 100644 --- a/rtexif/rtexif.h +++ b/rtexif/rtexif.h @@ -306,8 +306,6 @@ public: class ExifManager { - static std::vector defTags; - static Tag* saveCIFFMNTag (FILE* f, TagDirectory* root, int len, const char* name); public: static TagDirectory* parse (FILE*f, int base, bool skipIgnored = true); @@ -316,7 +314,10 @@ public: static TagDirectory* parseCIFF (FILE* f, int base, int length); static void parseCIFF (FILE* f, int base, int length, TagDirectory* root); - static const std::vector& getDefaultTIFFTags (TagDirectory* forthis); + /// @brief Get default tag for TIFF + /// @param forthis The byte order will be taken from the given directory. + /// @return The ownership of the return tags is passed to the caller. + static std::vector getDefaultTIFFTags (TagDirectory* forthis); static int createJPEGMarker (const TagDirectory* root, const rtengine::procparams::ExifPairs& changeList, int W, int H, unsigned char* buffer); static int createTIFFHeader (const TagDirectory* root, const rtengine::procparams::ExifPairs& changeList, int W, int H, int bps, const char* profiledata, int profilelen, const char* iptcdata, int iptclen, unsigned char* buffer); }; diff --git a/rtgui/cachemanager.cc b/rtgui/cachemanager.cc index 3d3702176..0b88ea5f4 100644 --- a/rtgui/cachemanager.cc +++ b/rtgui/cachemanager.cc @@ -30,18 +30,8 @@ CacheManager* CacheManager::getInstance(void) { - static CacheManager* instance_ = 0; - - if ( instance_ == 0 ) { - static MyMutex smutex_; - MyMutex::MyLock lock(smutex_); - - if ( instance_ == 0 ) { - instance_ = new CacheManager(); - } - } - - return instance_; + static CacheManager instance_; + return &instance_; } void CacheManager::init () diff --git a/rtgui/coordinateadjuster.cc b/rtgui/coordinateadjuster.cc index 1e81c2763..3a06409bf 100644 --- a/rtgui/coordinateadjuster.cc +++ b/rtgui/coordinateadjuster.cc @@ -103,6 +103,12 @@ CoordinateAdjuster::CoordinateAdjuster(CoordinateProvider *provider, CurveEditor createWidgets(defaultAxis); } +CoordinateAdjuster::~CoordinateAdjuster() +{ + for (std::vector::iterator iterator = axisAdjusters.begin(); iterator != axisAdjusters.end(); ++iterator) + delete *iterator; +} + void CoordinateAdjuster::createWidgets(const std::vector &axis) { unsigned int count = axis.size(); diff --git a/rtgui/coordinateadjuster.h b/rtgui/coordinateadjuster.h index cb1eb91ed..8f00f8ae7 100644 --- a/rtgui/coordinateadjuster.h +++ b/rtgui/coordinateadjuster.h @@ -136,7 +136,7 @@ public: /// For more complex adjuster CoordinateAdjuster(CoordinateProvider *provider, CurveEditorSubGroup *parent, const std::vector &axis); - virtual ~CoordinateAdjuster() {} + virtual ~CoordinateAdjuster(); // Update the Axis list, e.g. on Curve change, but MUST have the same axis count void setAxis(const std::vector &axis); diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc index 437c285c3..4ee300159 100644 --- a/rtgui/editorpanel.cc +++ b/rtgui/editorpanel.cc @@ -528,7 +528,6 @@ void EditorPanel::open (Thumbnail* tmb, rtengine::InitialImage* isrc) lastSaveAsFileName = removeExtension (Glib::path_get_basename (fname)); previewHandler = new PreviewHandler (); - previewHandler2 = new PreviewHandler (); this->isrc = isrc; ipc = rtengine::StagedImageProcessor::create (isrc); diff --git a/rtgui/editorpanel.h b/rtgui/editorpanel.h index 78b919806..4b2aa5162 100644 --- a/rtgui/editorpanel.h +++ b/rtgui/editorpanel.h @@ -88,7 +88,6 @@ protected: ImageAreaPanel* iareapanel; PreviewHandler* previewHandler; PreviewHandler* beforePreviewHandler; // for the before-after view - PreviewHandler* previewHandler2; Navigator* navigator; ImageAreaPanel* beforeIarea; // for the before-after view Gtk::VBox* beforeBox; diff --git a/rtgui/editwindow.cc b/rtgui/editwindow.cc index 094c098c0..027d3f53e 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) diff --git a/rtgui/exifpanel.cc b/rtgui/exifpanel.cc index c68f05de1..54404d700 100644 --- a/rtgui/exifpanel.cc +++ b/rtgui/exifpanel.cc @@ -176,14 +176,17 @@ void ExifPanel::setImageData (const ImageMetaData* id) idata = id; exifTreeModel->clear (); - const std::vector& defTags = ExifManager::getDefaultTIFFTags (NULL); + const std::vector defTags = ExifManager::getDefaultTIFFTags (NULL); - for (size_t i = 0; i < defTags.size(); i++) - if (defTags[i]->nameToString() == "ImageWidth" || defTags[i]->nameToString() == "ImageHeight" || defTags[i]->nameToString() == "BitsPerSample") { - addTag (exifTreeModel->children(), defTags[i]->nameToString(), "?", AC_SYSTEM, false); + for (size_t i = 0; i < defTags.size(); i++) { + Tag* defTag = defTags[i]; + if (defTag->nameToString() == "ImageWidth" || defTag->nameToString() == "ImageHeight" || defTag->nameToString() == "BitsPerSample") { + addTag (exifTreeModel->children(), defTag->nameToString(), "?", AC_SYSTEM, false); } else { - addTag (exifTreeModel->children(), defTags[i]->nameToString(), defTags[i]->valueToString(), AC_SYSTEM, false); + addTag (exifTreeModel->children(), defTag->nameToString(), defTag->valueToString(), AC_SYSTEM, false); } + delete defTag; + } if (id && id->getExifData ()) { // id->getExifData ()->printAll (); @@ -516,6 +519,9 @@ void ExifPanel::editTag (Gtk::TreeModel::Children root, Glib::ustring name, Glib } } + if (iter == root.end()) + return; + if (dp == Glib::ustring::npos) { if (value == "#keep" && iter->get_value (exifColumns.action) != AC_SYSTEM) { iter->set_value (exifColumns.icon, iter->get_value (exifColumns.edited) ? editicon : keepicon); diff --git a/rtgui/extprog.cc b/rtgui/extprog.cc index 8e0ab225f..b6ef31255 100644 --- a/rtgui/extprog.cc +++ b/rtgui/extprog.cc @@ -74,18 +74,8 @@ bool ExtProgAction::Execute(std::vector fileNames) // Generates as singleton ExtProgStore* ExtProgStore::getInstance() { - static ExtProgStore* instance_ = 0; - - if ( instance_ == 0 ) { - static MyMutex smutex_; - MyMutex::MyLock lock(smutex_); - - if ( instance_ == 0 ) { - instance_ = new ExtProgStore(); - } - } - - return instance_; + static ExtProgStore instance_; + return &instance_; } ExtProgStore::~ExtProgStore() diff --git a/rtgui/previewloader.cc b/rtgui/previewloader.cc index b0916824e..83d7cd2d2 100644 --- a/rtgui/previewloader.cc +++ b/rtgui/previewloader.cc @@ -169,19 +169,8 @@ PreviewLoader::PreviewLoader(): PreviewLoader* PreviewLoader::getInstance(void) { - // this will not be deleted... - static PreviewLoader* instance_ = NULL; - - if ( instance_ == NULL ) { - static MyMutex smutex_; - MyMutex::MyLock lock(smutex_); - - if ( instance_ == NULL ) { - instance_ = new PreviewLoader(); - } - } - - return instance_; + static PreviewLoader instance_; + return &instance_; } void PreviewLoader::add(int dir_id, const Glib::ustring& dir_entry, PreviewLoaderListener* l) diff --git a/rtgui/thumbimageupdater.cc b/rtgui/thumbimageupdater.cc index e9baf25f1..57c705b45 100644 --- a/rtgui/thumbimageupdater.cc +++ b/rtgui/thumbimageupdater.cc @@ -175,14 +175,8 @@ public: ThumbImageUpdater* ThumbImageUpdater::getInstance(void) { - // this will not be deleted... - static ThumbImageUpdater* instance_ = 0; - - if ( instance_ == 0 ) { - instance_ = new ThumbImageUpdater(); - } - - return instance_; + static ThumbImageUpdater instance_; + return &instance_; } ThumbImageUpdater::ThumbImageUpdater():