52 lines
1.9 KiB
Diff
52 lines
1.9 KiB
Diff
--- branches/KDE/4.1/kdelibs/kdecore/kernel/kglobal.cpp 2008/08/01 00:12:03 840376
|
|
+++ branches/KDE/4.1/kdelibs/kdecore/kernel/kglobal.cpp 2008/08/01 00:14:54 840377
|
|
@@ -251,11 +251,14 @@
|
|
|
|
/**
|
|
* This counter indicates when to quit the application.
|
|
- * It starts at 1, is decremented in KMainWindow when the last window is closed, but
|
|
- * is incremented by operations that should outlive the last window closed
|
|
- * (e.g. a file copy for a file manager, or 'compacting folders on exit' for a mail client).
|
|
+ * It starts at 0, is incremented by KMainWindow, systray icons, running jobs, etc.
|
|
+ * and decremented again when those things are destroyed.
|
|
+ * This mechanism allows dialogs and jobs to outlive the last window closed
|
|
+ * e.g. a file copy for a file manager, or 'compacting folders on exit' for a mail client,
|
|
+ * the job progress widget with "keep open" checked, etc.
|
|
*/
|
|
-static int s_refCount = 1;
|
|
+static int s_refCount = 0;
|
|
+static bool s_allowQuit = false;
|
|
|
|
void KGlobal::ref()
|
|
{
|
|
@@ -267,9 +270,14 @@
|
|
{
|
|
--s_refCount;
|
|
//kDebug() << "KGlobal::deref() : refCount = " << s_refCount;
|
|
- if (s_refCount <= 0) {
|
|
+ if (s_refCount <= 0 && s_allowQuit) {
|
|
QCoreApplication::instance()->quit();
|
|
}
|
|
}
|
|
|
|
+void KGlobal::setAllowQuit(bool allowQuit)
|
|
+{
|
|
+ s_allowQuit = allowQuit;
|
|
+}
|
|
+
|
|
#undef PRIVATE_DATA
|
|
--- branches/KDE/4.1/kdelibs/kdeui/widgets/kmainwindow.cpp 2008/08/01 00:12:03 840376
|
|
+++ branches/KDE/4.1/kdelibs/kdeui/widgets/kmainwindow.cpp 2008/08/01 00:14:54 840377
|
|
@@ -226,6 +226,11 @@
|
|
{
|
|
KGlobal::ref();
|
|
|
|
+ // We set allow quit to true, so when the refcounting reaches 0 the application instance will
|
|
+ // be exited. This has a similar purpose than setQuitOnLastWindowClosed (from
|
|
+ // QApplication), but it honors (de)refing from KGlobal.
|
|
+ KGlobal::setAllowQuit(true);
|
|
+
|
|
q = _q;
|
|
|
|
q->setAnimated(KGlobalSettings::graphicEffectsLevel() & KGlobalSettings::SimpleAnimationEffects);
|