[Digikam-devel] [Bug 138949] save/overwrite fails: wrong dialog

Marcel Wiesweg marcel.wiesweg at gmx.de
Sat Dec 23 17:06:23 GMT 2006


------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
         
http://bugs.kde.org/show_bug.cgi?id=138949         
marcel.wiesweg gmx de changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|                            |FIXED



------- Additional Comments From marcel.wiesweg gmx de  2006-12-23 18:06 -------
SVN commit 616109 by mwiesweg:

When an image is saved in another format and put in the cache for the new path,
the read-only property is unchanged.

Only put in cache under for the new path if the file format did not change
- make file format from DImgInterface accessible from Canvas
- store original format in SavingContext as well as saved-to format
- check when putting in cache in ImageWindow

BUG: 138949


 M  +5 -0      canvas/canvas.cpp  
 M  +1 -0      canvas/canvas.h  
 M  +16 -9     canvas/dimginterface.cpp  
 M  +1 -0      canvas/dimginterface.h  
 M  +3 -0      editor/editorwindow.cpp  
 M  +5 -1      editor/imagewindow.cpp  
 M  +2 -1      editor/savingcontextcontainer.h  


--- trunk/extragear/graphics/digikam/utilities/imageeditor/canvas/canvas.cpp #616108:616109
 @ -516,6 +516,11  @
     return DImg(*d->im->getImg());
 }
 
+QString Canvas::currentImageFileFormat()
+{
+    return d->im->getImageFormat();
+}
+
 int Canvas::imageWidth()
 {
     return d->im->origWidth();  
--- trunk/extragear/graphics/digikam/utilities/imageeditor/canvas/canvas.h #616108:616109
 @ -71,6 +71,7  @
     void  setUndoHistoryOrigin();
     void  updateUndoState();
     DImg  currentImage();
+    QString currentImageFileFormat();
 
     bool  maxZoom();
     bool  minZoom();
--- trunk/extragear/graphics/digikam/utilities/imageeditor/canvas/dimginterface.cpp #616108:616109
 @ -527,15 +527,7  @
 
     // This is possibly empty
     if (mimeType.isEmpty())
-    {
-        mimeType = d->image.attribute("format").toString();
-        // It is a bug if format attribute is not given
-        if (mimeType.isEmpty())
-        {
-            DWarning() << "DImg object does not contain attribute \"format\"" << endl;
-            mimeType = QImageIO::imageFormat(d->filename);
-        }
-    }
+        mimeType = getImageFormat();
 
     DDebug() << "Saving to :" << QFile::encodeName(fileName).data() << " (" 
               << mimeType << ")" << endl;
 @ -1142,6 +1134,21  @
     return d->filename.section( '/', -1 );
 }
 
+QString DImgInterface::getImageFormat()
+{
+    if (d->image.isNull())
+        return QString();
+
+    QString mimeType = d->image.attribute("format").toString();
+    // It is a bug in the loader if format attribute is not given
+    if (mimeType.isEmpty())
+    {
+        DWarning() << "DImg object does not contain attribute \"format\"" << endl;
+        mimeType = QImageIO::imageFormat(d->filename);
+    }
+    return mimeType;
+}
+
 ICCSettingsContainer* DImgInterface::getICCSettings()
 {
     return d->cmSettings;
--- trunk/extragear/graphics/digikam/utilities/imageeditor/canvas/dimginterface.h #616108:616109
 @ -143,6 +143,7  @
     ICCSettingsContainer *getICCSettings();
 
     QString               getImageFileName();
+    QString               getImageFormat();
 
 protected slots:
 
--- trunk/extragear/graphics/digikam/utilities/imageeditor/editor/editorwindow.cpp #616108:616109
 @ -1319,6 +1319,8  @
     m_savingContext->srcURL             = url;
     m_savingContext->destinationURL     = m_savingContext->srcURL;
     m_savingContext->destinationExisted = true;
+    m_savingContext->originalFormat     = m_canvas->currentImageFileFormat();
+    m_savingContext->format             = m_savingContext->originalFormat;
     m_savingContext->abortingSaving     = false;
     m_savingContext->savingState        = SavingContextContainer::SavingStateSave;
     // use magic file extension which tells the digikamalbums ioslave to ignore the file
 @ -1456,6 +1458,7  @
     // use magic file extension which tells the digikamalbums ioslave to ignore the file
     m_savingContext->saveTempFile   = new KTempFile(newURL.directory(false), ".digikamtempfile.tmp");
     m_savingContext->destinationURL = newURL;
+    m_savingContext->originalFormat = m_canvas->currentImageFileFormat();
     m_savingContext->savingState    = SavingContextContainer::SavingStateSaveAs;
     m_savingContext->saveTempFile->setAutoDelete(true);
     m_savingContext->abortingSaving = false;
--- trunk/extragear/graphics/digikam/utilities/imageeditor/editor/imagewindow.cpp #616108:616109
 @ -825,7 +825,11  @
         d->urlCurrent = m_savingContext->destinationURL;
         m_canvas->switchToLastSaved(m_savingContext->destinationURL.path());
         slotUpdateItemInfo();
-        LoadingCacheInterface::putImage(m_savingContext->destinationURL.path(), m_canvas->currentImage());
+        // If the DImg is put in the cache under the new name, this means the new file will not be reloaded.
+        // This may irritate users who want to check for quality loss in lossy formats.
+        // In any case, only do that if the format did not change - too many assumptions otherwise (see bug #138949).
+        if (m_savingContext->originalFormat == m_savingContext->format)
+            LoadingCacheInterface::putImage(m_savingContext->destinationURL.path(), m_canvas->currentImage());
 
         // notify main app that file changed or a file is added
         if(m_savingContext->destinationExisted)
--- trunk/extragear/graphics/digikam/utilities/imageeditor/editor/savingcontextcontainer.h #616108:616109
 @ -67,7 +67,8  @
     bool                     synchronousSavingResult;
     bool                     destinationExisted;
     bool                     abortingSaving;
-    
+
+    QString                  originalFormat;
     QString                  format;
 
     KURL                     srcURL;



More information about the Digikam-devel mailing list