| Summary: | save/overwrite fails: wrong dialog | ||
|---|---|---|---|
| Product: | [Applications] digikam | Reporter: | Daniel Bauer <linux> |
| Component: | ImageEditor-Save | Assignee: | Digikam Developers <digikam-bugs-null> |
| Status: | RESOLVED FIXED | ||
| Severity: | normal | ||
| Priority: | NOR | ||
| Version First Reported In: | unspecified | ||
| Target Milestone: | --- | ||
| Platform: | openSUSE | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented In: | 0.9.1 | |
| Sentry Crash Report: | |||
|
Description
Daniel Bauer
2006-12-18 09:06:29 UTC
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;
|