| Summary: | Critical: ShowFoto silently aborts saving image when closed | ||
|---|---|---|---|
| Product: | [Applications] digikam | Reporter: | Dik Takken <kde> |
| Component: | Showfoto-Save | Assignee: | Digikam Developers <digikam-bugs-null> |
| Status: | RESOLVED FIXED | ||
| Severity: | critical | CC: | caulier.gilles |
| Priority: | NOR | ||
| Version First Reported In: | unspecified | ||
| Target Milestone: | --- | ||
| Platform: | unspecified | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented In: | 0.9.0 | |
| Sentry Crash Report: | |||
|
Description
Dik Takken
2006-08-08 20:18:25 UTC
SVN commit 571245 by mwiesweg:
First part of a fix: Properly delete thread.
CCBUG: 132081
M +1 -0 dimginterface.cpp
--- trunk/extragear/graphics/digikam/utilities/imageeditor/canvas/dimginterface.cpp #571244:571245
@@ -167,6 +167,7 @@
DImgInterface::~DImgInterface()
{
delete d->undoMan;
+ delete d->thread;
delete d;
m_instance = 0;
}
SVN commit 571560 by mwiesweg:
When a save operation is runnnig, wait, show a message box and enter a loop.
- it would be better if the dialog shown does not have a OK button,
but queuedMessageBox comes in very handy
- fix still missing for ImageWindow (IE), interfering with other local changes here
CCBUG: 132081
M +4 -0 showfoto/showfoto.cpp
M +21 -2 utilities/imageeditor/editor/editorwindow.cpp
M +1 -0 utilities/imageeditor/editor/editorwindow.h
--- trunk/extragear/graphics/digikam/showfoto/showfoto.cpp #571559:571560
@@ -217,6 +217,10 @@
if (!e)
return;
+ // wait if a save operation is currently running
+ if (!waitForSavingToComplete())
+ return;
+
if (m_currentItem && !promptUserSave(m_currentItem->url()))
return;
--- trunk/extragear/graphics/digikam/utilities/imageeditor/editor/editorwindow.cpp #571559:571560
@@ -257,7 +257,7 @@
actionCollection(), "editorwindow_print");
m_fileDeleteAction = new KAction(i18n("Delete File"), "editdelete",
- SHIFT+Key_Delete,
+ Key_Delete,
this, SLOT(slotDeleteCurrentItem()),
actionCollection(), "editorwindow_delete");
@@ -1025,7 +1025,7 @@
// In this case, do not call enter_loop because exit_loop will not be called.
if (saving)
{
- // Waiting asynchronous image file saving operation runing in separate thread.
+ // Waiting for asynchronous image file saving operation runing in separate thread.
m_savingContext->synchronizingState = SavingContextContainer::SynchronousSaving;
enter_loop();
m_savingContext->synchronizingState = SavingContextContainer::NormalSaving;
@@ -1050,6 +1050,25 @@
return true;
}
+bool EditorWindow::waitForSavingToComplete()
+{
+ // avoid reentrancy - return false means we have reentered the loop already.
+ if (m_savingContext->synchronizingState == SavingContextContainer::SynchronousSaving)
+ return false;
+
+ if (m_savingContext->savingState != SavingContextContainer::SavingStateNone)
+ {
+ // Waiting for asynchronous image file saving operation runing in separate thread.
+ m_savingContext->synchronizingState = SavingContextContainer::SynchronousSaving;
+ KMessageBox::queuedMessageBox(this,
+ KMessageBox::Information,
+ i18n("Please wait while the image is being saved..."));
+ enter_loop();
+ m_savingContext->synchronizingState = SavingContextContainer::NormalSaving;
+ }
+ return true;
+}
+
void EditorWindow::enter_loop()
{
QWidget dummy(0, 0, WType_Dialog | WShowModal);
--- trunk/extragear/graphics/digikam/utilities/imageeditor/editor/editorwindow.h #571559:571560
@@ -126,6 +126,7 @@
void loadImagePlugins();
bool promptUserSave(const KURL& url);
+ bool waitForSavingToComplete();
void startingSave(const KURL& url);
bool startingSaveAs(const KURL& url);
bool checkPermissions(const KURL& url);
SVN commit 572636 by mwiesweg:
Wait for saving to complete in ImageWindow as well
BUG: 132081
M +4 -0 imagewindow.cpp
--- trunk/extragear/graphics/digikam/utilities/imageeditor/editor/imagewindow.cpp #572635:572636
@@ -161,6 +161,10 @@
if (!e)
return;
+ // wait if a save operation is currently running
+ if (!waitForSavingToComplete())
+ return;
+
if (!promptUserSave(m_urlCurrent))
return;
|