[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